在OpenStack使用XenServer资源池浅析
在OpenStack使用XenServer资源池浅析
OpenStack中的Xen driver类:nova/virt/xenapi/driver.py中的XenAPIDriver类,该类继承的ComputeDriver是所有driver的基类,是所有虚拟机相关功能集合,而XenAPIDriver实现的方法是ComputeDriver类中方法的子集。
创建资源池并添加主机使用xenserver资源池(支持虚拟机热迁移)前提:
1、有符合创建资源池的xenserver主机,已部署openstack(nova-compute)
2、有共享存储
步骤:
1、在master节点(注意:此时还没有资源池,master节点是我们预定义的某节点)上配置共享存储为默认SR
2、配置所有的slave节点使用该默认SR,通过配置项“sr_matching_filter=default-sr:true”
3、创建host aggregate。aggregate是上层逻辑概念,不对外公开,是管理员的配置对象。aggregate最初就是为了使用xenserver资源池功能而出现,但现在可以通过给aggregate对象添加key-value对,给nova-scheduler提供一种高级调度机制。host和aggregate是多对多的关系。
nova aggregate-create <name-for-pool> <availability-zone>
上述操作只是操作数据表。
4、为配合xenserver的资源池的使用,需要给aggregate提供两个metadata
nova aggregate-set-metadata <aggregate-id> hypervisor_pool=true
nova aggregate-set-metadata <aggregate-id> operational_state=created
上述操作只是操作数据表。
5、将master节点加入aggregate
nova aggregate-add-host <aggregate-id> <name-of-master-compute>
向主机组添加主机的流程如下:
6、加入其它slave节点
nova aggregate-add-host <aggregate-id> <compute-host-name>
slave主机加入资源池后,在每个主机上的nova-compute虚拟机会被关机,待xenserver主机完成加入池的操作后,再把nova-compute虚拟机启动。
上述流程图中的最后一步理解的不是很清楚,不知道为何需要在master节点执行命令。XenServer官方文档中将一个主机加入资源池,是在预加入xenserver主机上执行(而不是在master节点执行):
xe pool-join master-address=<host1> master-username=<administrators_username> master-password=<password>
资源池创建成功后,就可以根据aggregate_metadata创建flavor,使用flavor创建的虚拟机就可以运行在XenServer资源池内的主机上,同时支持手动迁移和热迁移等高级特性。
XenAPIDriver的初始化所有xenserver主机加入资源池后,XenAPIDriver的初始化操作如下:
l 首先,初始化一个XenAPISession对象。在该对象中保存了调用XenAPI的调用接口、连接master主机的session、xenserver主机的标识
l 初始化VolumeOps。包含卷相关的操作。
l 初始化VMOps。包含了虚拟机相关的操作。
l 一个ResourcePool对象。该对象中包含了xenserver主机的名称,地址,标识以及调用nova-compute的RPC代理。
注意:第一步中的session就是后续所有操作的基础。即虚拟机和卷相关的操作都会发送到master节点,在资源池范围内进行处理。