主机组 与 主机聚合作用的对象不同。主机聚合是针对 宿主机 计算节点,而主机组是针对 虚拟机实例

按照 关联、不关联、软关联、软不关联 四种策略对用户创建的虚拟机进行管理。实现约束虚拟机与虚拟机在物理机上的部署关系。

1、关联:将实例创建在同一个计算节点上,当该计算节点资源不够时就会失败。例如,2个计算节点,批量创建3个实例,选择“关联”组,则实例全部创建在其中一个计算节点上,不会在另一个计算节点,若资源不够时将会失败,关联组实例不支持迁移。
2、不关联:将实创建在不同计算节点上,当计算节点数等于“不关联”组中实例个数时,再创建实例到“不关联"组就失败。
3、软关联:将实例尽量创建在同一个计算节点上,当评估该计算节点资源不够时不会失败,会落到另一个计算节点。
4、软不关联:将实例尽量创建在不同计算节点上,当计算节点数量不够时,实例会落到同一个计算节点上。

Openstack 的虚拟机调度策略默认是用 FilterScheduler 来实现。通过调度算法实现
1、先过滤掉不满足虚机flavor要求的计算节点
2、对剩余计算节点进行权重计算
3、选取权重值最优的计算节点返回


当filter shceduler需要执行调度操作时,会让filter对计算节点进行判断,filter返回true 或false

nova.conf中的available_filters用于配置可用的filter,默认是所有nova自带的filter都可以用于过滤操作。enabled_filters用于指定scheduler真正可用的filter。
filter_scheduler将按照enabled_filters值的顺序进行过滤。

计算节点:
# vim /etc/nova/nova.conf
[DEFAULT]
cpu_allocation_ratio=1.0
ram_allocation_ratio=1.0
initial_cpu_allocation_ratio=1.0
initial_ram_allocation_ratio=1.0

# systemctl restart openstack-nova-compute.service 

控制节点:
[filter_scheduler]
available_filters=nova.scheduler.filters.all_filters
enabled_filters=RetryFilter,AvailabilityZoneFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter,AggregateInstanceExtraSpecsFilter

# systemctl restart openstack-nova-api.service openstack-nova-scheduler.service openstack-nova-compute.service 


1、RetryFilter
过滤掉已经尝试过调度且失败的节点

2、AvailabilityZoneFilter
为提高容灾性和隔离性,可以将计算节点划分到不同的可用域中,Openstack默认只有一个命名为"nova"的可用域,所有计算节点默认都是放在"nova"可用域中,用户可以通过主机聚合创建自定义域,在创建实例时可以选择自定义域。

3、RamFilter
将不能满足flavor内存的计算节点过滤掉,为了提高系统的资源使用率,Openstack允许实例超额使用内存,也就是可以超过实际内存大小,可通过 ram_allocation_ration=1.5 配置,默认初始超比率 initial_ram_allocation_ratio=1.5。

4、DiskFilter
将不能满足flavor磁盘容量需求的过滤掉,磁盘同样允许超额配置,可通过disk_allocation_ratio=1.0配置,但生产环境不建议超额,默认初始超额比率 initial_disk_allocation_ratio=1.0。默认 DiskFilter 不在 enabled_filters 中,根据需要添加。

5、CoreFilter(train版 没有该过滤器)
将不能满足flavor vCPU需求的计算节点过滤掉,cpu可以超配,可通过 cpu_allocation_ratio=16.0配置,默认初始额比率 initial_cpu_allocation_ratio=16.0。默认 CoreFilter 不在 enabled_filters 中,根据需要添加。

6、ComputeFilter
确保只能正常的计算节点才能被 nova-scheduler 调度,ComputeFilter 是必须的过滤器

7、ComputeCapabilitiesFilter
根据计算节点的特性来过滤,比如计算节点有x86和ARM架构,如果想指定实例部署到x86_64架构节点上,就要使用 ComputeCapabilitiesFilter,同时还需要在 flavor中添加metadata,添加 Architecture=x86_64

8、ImagePropertiesFilter
根据所选image的属性来过滤计算节点,跟flavor类似,image也有metadata,用于指定其属性。


9、ServerGroupAffinityFilter(亲和性)
将实例尽量创建在同一个计算节点上,结合主机组实现,需要创建一个“关联”主机组。

10、ServerGroupAntiAffinityFilter(反亲和性)
与 ServerGroupAffinityFilter 相反, 将实例尽量分散到不同计算节点上,结合主机组实现,需要创建一个“不关联”主机组

测试:
创建主机聚合gd01,选择compute01和compute02作为计算节点

创建实例数量3台,可用域为gd01选择实例类型2vcpu,服务器组选择关联,创建失败
创建实例数量3台,可用域为gd01选择实例类型2vcpu,服务器组选择软关联,创建成功
创建实例数量3台,可用域为gd01选择实例类型1vcpu,服务器组选择不关联,创建失败
创建实例数量3台,可用域为gd01选择实例类型1vcpu,服务器组选择软不关联,创建失败