OpenStack Nova 总结(02)- 虚拟机调度算法

一、概述

虚拟机调度器主要完成以下工作:

  • 过滤掉不满足虚拟机要求的主机
  • 对剩余主机进行权重计算
  • 选取权重计算值最优的主机返回

OpenStack 的虚拟机调度策略主要是由 FilterScheduler 和 ChanceScheduler 实现的,其中FilterScheduler 作为默认的调度器实现了基于主机过滤(filtering)和权值计算(weighing)的调度算法,而 ChanceScheduler 则是基于随机算法来选择可用主机的简单调度引擎。

下图是 FilterScheduler 的虚拟机调度过程,它支持多种内置的 filter 和 weigher 来满足一些常见的业务场景。在设计上,OpenStack 基于 filter 和 weigher 支持第三方扩展,因此用户可以通过自定义filter 和 weigher,或者使用 json 资源选择表达式来影响虚拟机的调度策略从而满足不同的业务需求。

作为 nova-scheduler 默认的调度器,FilterScheduler 调度过程分为两步:
1)通过过滤(filtering)选择满足条件的计算节点(运行 nova-compute)。
2)通过权重计算(weighting)选择在最优(权重值最大)的计算节点上创建实例。
这里写图片描述

上图是调度过程的一个示例:

  • 最开始有 6 个计算节点 Host1-Host6
  • 通过多个 filter 层层过滤,Host2 和 Host4 没有通过,被刷掉了
  • Host1,Host3,Host5,Host6 计算权重,结果 Host5 得分最高,最终入选

二、主机过滤

当 Filter scheduler 需要执行调度操作时,会让 filter 对计算节点进行判断,filter 返回 True 或 False。

nova.conf 中的 scheduler_available_filters 选项用于配置 scheduler 可用的 filter,默认是所有 nova 自带的 filter 都可以用于滤操作。

scheduler_available_filters = nova.scheduler.filters.all_filters

另外还有一个选项 scheduler_default_filters,用于指定 scheduler 真正使用的 filter,默认值如下

scheduler_default_filters = RetryFilter, AvailabilityZoneFilter, RamFilter, DiskFilter, ComputeFilter, ComputeCapabilitiesFilter, ImagePropertiesFilter, ServerGroupAntiAffinityFilter, ServerGroupAffinityFilter

Filter scheduler 将按照列表中的顺序依次过滤。 下面依次介绍每个 filter 及其他 filter。

1.RetryFilter

RetryFilter 的作用是刷掉之前已经调度过的节点。

举例: 假设 A,B,C 三个节点都通过了过滤,最终 A 因为权重值最大被选中执行操作,但由于某个原因,操作在 A 上失败了。 默认情况下,nova-scheduler 会重新执行过滤操作(重复次数由 scheduler_max_attempts 选项指定,默认是 3)。这时候 RetryFilter 就会将 A 直接刷掉,避免操作再次失败。

RetryFilter 通常作为第一个 filter。

2.AvailabilityZoneFilter

为提高容灾性和提供隔离服务,可以将计算节点划分到不同的 Availability Zone (可用域) 中,例如把一个机架上的机器划分在一个 Availability Zone 中。关于 Availability Zone 和 Region 等的区别,请参见《OpenStack几个物理上的概念总结》。

OpenStack 默认有一个命名为 “nova” 的可用域,所有的计算节点初始都是放在 “nova” 中。用户可以根据需要创建自己的可用域。

创建实例时,需要指定将实例部署到在哪个可用域中。
这里写图片描述

3.RamFilter

RamFilter 将不能满足 flavor 内存需求的计算节点过滤掉。

为了提高系统的资源使用率,OpenStack 在计算节点可用内存时允许 overcommit(超配),也就是可以超过实际内存大小。超过的程度是通过 nova.conf 中 ram_allocation_ratio 这个参数来控制的,默认值为 1.5。

ram_allocation_ratio = 1.5

其含义是:如果计算节点的内存有 10GB,OpenStack 则会认为它有 15GB(10*1.5)的内存。

4.DiskFilter

DiskFilter 将不能满足 flavor 磁盘需求的计算节点过滤掉。

Disk 同样允许超配,通过 nova.conf 中 disk_allocation_ratio 控制,默认值为 1。

disk_allocation_ratio = 1.0

在生产环境中,建议磁盘不超配。

5.CoreFilter

CoreFilter 将不能满足 flavor vCPU 需求的计算节点过滤掉。

vCPU 同样允许超配,通过 nova.conf 中 cpu_allocation_ratio 控制,默认值为 16。

cpu_allocation_ratio = 16.0

这意味着一个 8 CPU 的计算节点,nova-scheduler 在调度时认为它有 128 个 vCPU。

注意: nova-scheduler 默认使用的 filter 并没有包含 CoreFilter。 如果要用,可以将 CoreFilter 添加到 nova.conf 的 scheduler_default_filters 配置

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值