前言:
openstack在I版中增加了server group的概念,设置server group策略可以做为虚机调度的策略,目前支持的策略有”affinity”和”Anti-Affinity” 意思就是亲和性和非亲和性。
使用场景:
我们知道nova创建虚机调度是通过nova-schedule的算法去筛选出对应的计算节点,然后调度到上面。
在openstack上创建个app高可用集群,需要虚机分布在不同的本nova availability zone的不同的计算节点内,那么我们只需要创建个server group然后配置策略为anti-affinity,创建虚机时选择这个策略,这样创建出来的虚机就会落到不同的计算节点上。
虽然默认的nova-schedule也支持affinity和anti-affinity但nova-schedule并不能支持持久化,只在虚机创建时生效,如果后面执行migration、evacute、resize那高可用就被破坏了。
server group会将group的信息持久化,每次重新调度都能获得正确的虚机。
实现原理
在nova库中增加了以下三张表instance_group_member、instance_group_policy instance_groups。
1,在创建云主机时如果加入了server-group这将instances加入到server_group_member中;
2,conductor 从数据库中取得group信息,解析 group 的 policy 并设置调度参数,通过RPC让 scheduler 选择合适的宿主机;
3,nova-scheduler将创建请求通过rpc传递给对应的nova-compute;
4,nova-comput去访问nova-conductor去获取创建虚机的一些信息;
启用server_group
修改控制节点nova.conf
将scheduler_default_filters改成如下。
1 | scheduler_default_filters=RetryFilter,AvailabilityZoneFilter,RamFilter,CoreFilter,DiskFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter |
目前dashboard没有Server group接口,只能通过cli的方式。
CLI命令创建server_group
创建server-group 其中test-2为group的名字 affinity为policy
查看哪些云主机使用了此server_group
创建云主机时要指定server-group的方法
nova boot时加上–hint group=server_group_id
如
1 | nova boot --image IMAGE_ID --flavor flavor_id --hint group=group-1 test3 |