资讯专栏INFORMATION COLUMN

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

lscho / 3264人阅读

摘要:节点并不是完全不能接受任何操作。这种协调目前由完成,因此不可能在资源池之间共享这种存储。工具堆栈通常在特权初始域中运行其所有组件,也称为控制域。如果不使用在刷新之前取消则可能会丢失最近的更新。

概述

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节点资源消耗。

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


文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/5367.html

相关文章

  • 关于XenServer的高可用,这篇都说清楚了

    摘要:旨在发生单点故障后,消除单点故障的影像,尽可能在剩余资源池上运行业务。首先需要找出属于最大全连接组以下简称的,用选择一个,重启丢失连接的。是通过在每个主机中进行配置,高可用集群中,每个主机上该配置文件都必须保持一致,如果不一致将导致不可用。概述随着云计算市场的快速发展,用户对服务的实时性需求越来越高,系统的稳定性和可用性显得尤为重要。高可用性HA(High Availability)可以做到...

    thekingisalwaysluc 评论0 收藏0
  • LRS+XAPI教育学习记录(安装lrs,以及用xapi传输数据到lrs)

    摘要:关于跟国内基本用的少,质料基本都是英文的,中文的也就只有繁体的一些少少的资料。安装其实很简单,就是一些小东西麻烦而已,还有一点就是页面是英文的不要怕英语考五分的渣现在在狂补英文。准备工作,安装数据库。 此LRS團隊出了最新版的LRS,是node寫的。運行速度是本文寫的這個版本的無數倍,待我整理好再發出來。关于lrs跟xapi国内基本用的少,质料基本都是英文的,中文的也就只有繁体的一些少...

    airborne007 评论0 收藏0
  • LRS+XAPI教育学习记录(安装lrs,以及用xapi传输数据到lrs)

    摘要:关于跟国内基本用的少,质料基本都是英文的,中文的也就只有繁体的一些少少的资料。安装其实很简单,就是一些小东西麻烦而已,还有一点就是页面是英文的不要怕英语考五分的渣现在在狂补英文。准备工作,安装数据库。 此LRS團隊出了最新版的LRS,是node寫的。運行速度是本文寫的這個版本的無數倍,待我整理好再發出來。关于lrs跟xapi国内基本用的少,质料基本都是英文的,中文的也就只有繁体的一些少...

    刘东 评论0 收藏0
  • 还记得三大虚拟化技术之一的XenServer吗?

    摘要:的首次公开发行是在年。年,得到了广泛的采用,和都将添加进他们的虚拟化解决方案。收购之后将其产品整合,统一更名为。奠定了在服务器虚拟化市场的地位。年月日,项目被宣布作为一个合作项目移至基金会下。前言XenServer是一个由Citrix发起和管理的开源项目和社区。该项目开发的开源软件实现了虚拟化的多种功能,允许在硬件设备上安全地运行多个操作系统和应用程序,完成硬件整合和自动化;将静态、复杂的I...

    Jochen 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<