openstack nova server_group

前言:

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