订阅
纠错
加入自媒体

技术栈 | 如何高效运用Xapi解决问题?

2019-02-01 10:01
启迪云计算
关注

概述

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的主机集群环境。

技术栈 | 如何高效运用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操作请求的权限。

技术栈 | 如何高效运用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正处于版本迭代期间则不一定是完全相同的软件版本。

技术栈 | 如何高效运用Xapi解决问题?

工具集包含有一组协作守护程序,它们构建在所有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节点资源消耗。

作者:启迪云-高级开发工程师 卢柳

技术栈 | 如何高效运用Xapi解决问题?


声明: 本文由入驻维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。

发表评论

0条评论,0人参与

请输入评论内容...

请输入评论/评论长度6~500个字

您提交的评论过于频繁,请输入验证码继续

暂无评论

暂无评论

文章纠错
x
*文字标题:
*纠错内容:
联系邮箱:
*验 证 码:

粤公网安备 44030502002758号