启迪云-高级开发工程师 卢柳
概述
Xapi是Xen Server中的一组管理接口的统称,是Xen Server管理的核心,由一系列的toolstack组成。
Xapi主要提供各客户端以及Pool中各主机通信的接口。 客户端可以通过Xapi来读取Xen Server的配置、管理、License的管理、数据库的维护等等,同时也包括如存储、虚机、虚拟网卡、HA等资源的功能管理及控制。Xapi接口必须保持向后兼容,允许较老版本的客户端可以正常工作。
其具有代表性的客户端有XenCenter、Xen Orchestra、Openstack 和CloudStack 等。
基础概念
在Xen中最基础的概念是资源池(Pool)--整体集群作为单个实体进行管理。即使单个Xen Host的非集群环境,Xapi对资源对象的管理也是通过Pool 来完成的。Xapi运行在主机集群中,他们共享着部分存储集群。这部分共享存储也是建立高可用集群(HA)的前提保证。下图展示的是运行着Xapi的主机集群环境。
在任何时候,最多只有一个主机可以被称为Pool Mater,它用来负责协调和锁定资源池的资源。首次创建Pool时,需要指定一台机器为Pool Master,这台机器则称为Master Host(主节点),其他节点我们可以称之为Slave Host(从节点)。Pool Master角色也并非一成不变的。我们可以通过XenCenter等客户端手动调整Master Host节点;也可配置HA的集群通过Xen自身的HA机制在Master Host宕机时,自动选举新的节点为Master Host。
所有主机都会提供两种协议的接口,一个是使用80端口的HTTP和XML/RPC协议接口以及使用443端口的TLS/SSL协议接口。虽然存在着这两种接口协议,但并不是所有主机都能够通过Xapi来下发操作请求的,在集群中仅Master Host具有着接受Xapi操作请求的权限。
如若尝试将控制操作的请求发送到另一台Slave Host的机器,将导致XenAPI重定向返回一个错误消息,该错误消息包含有这台机器所处集群的Master Host的地址,以及详细错误提示。
作为Pool Master除了上文提及配置HA后的自动迁移还会以有序的方式处理或转发用户请求(xe pool-designate-new-master)以及处理或转发在紧急情况下的用户请求(xe pool-emergency-transition-to-master)。
Slave Host节点并不是完全不能接受任何操作。为了提高效率,在Slave Host上允许进行以下操作:
查询性能计数器(及其历史记录)
连接到VNC控制台
导入/导出(特别是当磁盘在本地存储上时)
由于Master Host充当协调器和锁定管理器的角色,因此其他主机通常会与Master Host通信。Slave Host也会相互通信(通过相同的HTTP和XMLRPC通道)来完成以下功能
传输VM内存映像(VM迁移)
镜像磁盘(存储迁移)
要注意的是,某些类型的共享存储(特别是所有使用vhd的存储)需要协调磁盘GC和合并。这种协调目前由Xapi完成,因此不可能在资源池之间共享这种存储。
工具集/toolstack
Xapi工具集需要主机在x86或ARM上运行Xen 4.4或更高版本。Xen管理程序将主机划分为多个域(Domain),其中一些域可以具有特权硬件访问权限,其余部分是非特权客户机(DomainU)。xapi工具堆栈通常在特权初始域Domain 0中运行其所有组件,也称为“控制域”。然而,有一些实验代码支持“驱动域(driver domains)”,允许存储和网络驱动程序在其各自的域中隔离。
下图显示了在单主机上运行Xen Server的情况。在一个集群环境中所有主机都运行相同版本的Xen Server,除非Xen Server正处于版本迭代期间则不一定是完全相同的软件版本。
工具集包含有一组协作守护程序,它们构建在所有Xen主机通用的基本集之上。他们主要包含有:
Xapi:管理主机群集,协调对共享存储和网络的访问。
Xenopsd:一个低级“域管理器”,负责通过libxc和libxl与Xen交互来创建、挂起、恢复、迁移、重新引导域。
Xcp-rrdd:一个性能计数器监视守护程序,它聚合通过插件API定义的“数据源”并记录每个守护程序的历史记录。
Xcp-networkd:主机网络管理器,负责配置接口,网桥和OpenVSwitch实例
SM:Storage Manager插件,用于将Xapi的内部存储接口连接到外部存储系统的控制API。
perfmon:监视性能计数器的守护程序,如果值超过某个预定义的阈值,则发送“警报”。
mpathalert:监视“存储路径”的守护程序,如果路径出现故障并需要修复则发送“警报”。
snapwatchd:一个守护进程,它响应通过guest 虚拟机VSS代理(对于Windows)发送的快照请求。
stunnel:一个守护程序,它解码TLS / SSL并将流量转发到Xapi。
xenconsoled:允许访问客户机控制台。这对所有Xen主机都是通用的。
xenstored:用于连接VM磁盘和网络接口的键值对配置数据库。这对所有主机也很常见。
工作机制
Xapi分为以下类别:
master-only:这些是当前主要的API请求类型。客户端API请求Master节点,Master节点转发请求到相应的机器并锁定相应资源。
normal-local:这些是对性能有着特殊要求的情况,允许从节点去调用的API。例如磁盘导入/导出和控制台连接等,它们直接发送到对数据到相关主机,不必经过Master节点的转发。
emergency:是处理Master Host离线这种紧急情况下使用的API请求类型。
主机在接受到API请求后,先判断本机可以接受该类型的请求,如果可以执行,API调用就会进入“消息转发”层。消息转发层将会:
锁定资源(通过current_operations机制实现)
选择需要执行请求的主机
如果请求应在本地运行,则使用直接函数调用; 否则,消息转发代码会对特定的Slave Host进行同步API调用。需注意的是Xapi目前使用“thread per request”(一个线程处理一个请求)模型,该模型会为每个请求创建一个完整的POSIX线程。即使仅转发请求,这个线程仍然会被创建,并会一直阻塞直至相关Slave Host返回结果。
如果XenAPI请求内容是VM生命周期相关的操作,它将转换为Xenopsd API调用并通过Unix域套接字进行转发。Xapi和Xenopsd都有类似的task的概念,当前的Xapi task(所有操作在task的上下文中运行)会被绑定到Xenopsd task上,之后Xapi还会用来传递取消操作和更新task进度。
如果XenAPI请求内容为存储操作,则将消息转发至“存储访问”层。存储访问层需:
验证存储对象是否处于正确状态(验证SR挂载状态;VDI挂载、激活 以及VDI是否具有读写权限)
调用Storage Manager API(SMAPI)v2接口中的相关操作
使用SMAPIv2到SMAPIv1转换器生成必要的命令行来与SMAPIv1插件(EXT,NFS,LVM等)通信并执行
将存储对象的状态(包括VDI.attach调用的结果)持久化
在内部,smapiv1插件通过对xapi数据库的特权访问来直接设置字段(例如VDI.virtual_size),这些字段将被视为对其他客户端是只读的。SMAPIv1插件也依赖于Xapi
了解可能访问存储的所有主机
锁定资源池中的磁盘
通过“Xapi插件”机制在其他主机上安全地执行代码
Xapi数据库包含主机和VM的元数据,并共享给整个Pool。Master Host会在内存中缓存一份副本,所有其他节点在使用时会查询Master Host中缓存的数据。数据库将每个对象都会有一个事件计数器,生成计数器用于实现XenAPI中event.next和event.from的相关操作。如果启用了“redo-log”, 那么所有数据库写入操作都会以增量的形式同步写入共享块设备。如果不使用redo-log”在刷新之前取消Xapi则可能会丢失最近的更新。
总结
Xapi为程序开发者提供一个灵活,稳定,方便,快捷的Xen Server管理接口,使得用户可以根据自身需求进行量身定制。但是由于使用“thread per request”模式会给Master Host带来较大的资源开销,使用时可尽量合并请求操作,减少并发数量,来降低Xapi对Master节点资源消耗。
互动区
* 你对以上内容有什么看法?你最关注云计算哪个趋势?如果你还有想了解的技术话题,欢迎留言分享。
*「启迪云技术栈」每周️由启迪云研发部提供技术干货,敬请期待。如需转载请联系小编。
-热门阅读-
启迪云计算有限公司 | 依托于清华启迪控股集团雄厚的资本和强大的科技创新及产业服务能力| 国际领先的私有云及行业云解决方案提供商 | 企业数字化转型首选平台
领取专属 10元无门槛券
私享最新 技术干货