一、XAPI对资源池的管理

作为XenServer的管理工具集,XAPI管理XenServer的主机,网络和存储。不管是OpenStack还是CloudStack,如果使用XenServer作为虚拟化底层,其对XenServer的调用必然使用XAPI。真正意义上的XAPI在XenServer中主要提供XenCenter以及资源池中各个XenServer主机的通信的接口。

首先,资源池中的所有XenServer主机的操作请求都是通过XAPI传递给Dom0的,同时在池中的所有XenServer主机间的通信也是通过XPAI进行传递。例如:资源池中数据库(XenServer配置数据库)会通过XAPI在所有的XenServer主机之间进行同步,以便在资源池Master宕机之后,其他XenServer主机能够正确而迅速的取代Master,并维持资源池的功能和服务。其简要示意图如下所示:

如上图所示,在创建XenServer资源池的时候,默认会选定一台XenServer主机作为Master,即所谓的资源池主。Master的作用是协调和锁定资源池内的各种资源。默认情况下在创建资源池的时候,加入资源池的第一台XenServer主机被默认推选为Master。当资源池的Master主机出现故障不在可用时,Master是可以进行角色转移的。其转移的情况有两种:一是进行手动转移,二是在开启资源池高可用的情况下进行自动转移。

在一个资源池中虽然所所有的XenServer主机都有XAPI,并在XML / RPC接口上运行了HTTP 80端口和TLS / SSL的443端口,但控制操作只会在Master主机上进行处理。如果将一个控制操作指令发送给资源池的Slave主机,Slave主机上的XAPI将会将该控制指令重定向到Master主机,并且Slave主机上的XAPI将会产生一个XAPI重定向的错误消息并将其存储在日志中。为了提高效率以下操作被允许在Slave主机进行:

  • 查询性能计数器(以及主机的历史)

  • 连接到VNC控制台

  • 导入/导出(特别是本地存储上的磁盘时)

由于Master主机充当协调和锁管理器,其他主机在需要调用资源的时候就会经常和Master产生大量的交互。当然Slave主机之间也会进行彼此的交互,比如说:

  • 转移VM的内存映像(虚拟机迁移)

  • 镜像磁盘(存储迁移)

其次,XenCenter通过XAPI来读取XenServer主机的配置、管理、License信息、数据库信息等,同时XAPI也通过和上篇文章我们所讲述的XenServer核心运行的toolstack系列工具,包括如Xenopsd、Xcp-rrdd、Xcp-networkd、SM、perfmon、mpathalert、snapwatchd、stunnel、xenconsoled和xenstored等所有的组件进行交互,这些组件通过和XAPI进行通信并监控XAPI的命令接口,根据XAPI发送过来的命令执行相应的功能控制。

下图显示了一台XenServer主机上运行的软件。所有的主机上运行相同的软件。我们可以看到XAPI和其他的Toolstack所处的一个关系。

二、XAPI架构及运行机制解析

下面的关系图显示了xapi内部运行关系及架构:

图的顶部显示连接XenAPI客户端:XenCenter、XenOrchestra、OpenStack以及CloudStack。这些客户端都是通过XenAPI(XenAPI的XMLRPC通过HTTP POST)和HTTP GET/PUT在端口80和443与XAPI建立通讯。并且双方之间建立互信是通过使用PAM认证(默认情况下使用本地passwd和group文件)或通过Active Directory进行认证。

其中XAPI中的Xen API又细分为三类:

* master-only:这是最重要的API也是最常用的API类型,顾名思义,这种类型的API只有Master能够接受并进行执行。

* normally-local:这些API是为了提高性能的前提下,允许Slave主机执行的特殊API,其往往和主机以及虚拟机的性能相关。如磁盘输入/输出和虚拟机控制台连接这些接口控制的API,这些API直接有Slave主机在本地就进行控制执行,不需要再有Master记下来转发,提高了访问速度和性能。

* emergency:这些API归类为紧急情况下的API处理方案,例如当Master主机脱机的情况下,对资源池的紧急修复等。

对于API的执行,在资源池正常的情况下,XAPI会首先判断API的类型。如果用户在XenCenter中对Slave的操作是需要通过Master来执行的API,那么Slave主机的XAPI就会将该API重定向到Master主机,交由Master主机进行执行控制。在确认了API类型之后,即通过了初步检查,API调用就会进入“消息转发”层—控制、锁定资源(通过current_operations机制) - 决定哪些主机应该执行该请求。如果请求是在本地执行,主机直接调用函数或者进程使用功能即可;否则消息转发层就会将该请求同步给其他需要一同执行的主机上。

注:XAPI目前使用“每个请求一个独立线程”的模式,导致将为每个请求创建一个完整的POSIX线程。甚至当这个请求在这台主机上创建后被转发给其他的主机,这个创建的线程仍然存在在第一次被创建的主机上,毫无疑问,这种模式的弊端必然是在请求数量较多时,导致XenServer主机的处理阻塞,影响虚拟机的性能。

接下来API具体如何执行调用呢?如果XenAPI的调用是关于VM生命周期操作,那么它将会通过JSON-RPC(类似Unix域套接字)转换成具体的负责VM生命周期管理的组件Xenopsd 的API调用。XAPI和Xenopsd组件之间,对于每一个调用采用类似异步消息队列的概念,XAPI的每一个调用不需要Xenopsd立即返回执行结果。所以目前XAPI将每一个任务(所有操作在任务的上下文中运行)都绑定到Xenopsd任务上,XAPI在接受到调用时将其所对应的任务扔给对应绑定的Xenopsd之后就不在过问了。具体有无执行成功需要等待Xenopsd给它的反馈,所以我们在XenCenter中执行一个命令之后看见任务的进度条在走,但是什么时候走完进度条需要底层的执行组件给XAPI反聩,XAPI再其状态更新在状态数据库中,XenCenter会与XAPI进行不断的通讯以收取状态更新。如果Xenopsd组件执行命令出错,会返回相应的错误信息并存储在日志中。

如果XenAPI的调用是存储操作,那么“存储访问”层 -- 验证存储对象处于正确的状态(SR连接/分离;VDI连接/活动状态、只读/读写),然后调用存储管理API(SMAPI)V2接口中的相关操作;同时其中还存在着一个SMAPIv2到SMAPIv1转换器,可以生成必要的命令去跟SMAPIv1插件(EXT,NFS,LVM等)并执行它这些插件支持的存储类型。

在对存储进行API调用的时候,其都是属于Master类型的API调用,其Slave主机是没有权限对磁盘进行执行操作的。因此在内部,SMAPIv1插件使用特权访问XAPI的数据库,会将被视为只读权限的客户端直接设置只读字段属性(例如VDI.virtual_size)。同时由于共享的存储同时在资源池内被多个主机进行访问,为了保证数据的安全性,只能允许同一时刻只有一台主机对其进行对其进行访问。因此该SMAPIv1插件还协同XAPI对存储的访问进行控制,其采用共享存储常用的锁机制来对多台访问共享存储的主机进行控制。

XAPI的数据库包含主机和虚拟机元数据和资源池信息。该数据库被资源池的Master主机将其副本加载到内存中,与资源池的其他所有Slave进行共享,其他Slave主机通过远程的方式访问该数据库,同时将其同步到本地主机。数据库将每个API对象所实现的event.next和event.from的存储在数据库中。在接收到数据后是以XML格式并且是异步刷新的方式存储到磁盘中的。如果“重做日志”被启用,那么所有数据库的写入数据会被同步以增量的方式存储到给出的共享的块设备中。如果没有启用重做日志,那么XAPI在重启之后,就可能会丢失最近的更新。

同时XAPI还在资源池内实现主机的高可用。高可用性是在资源池内当其中的一台主机发生故障时,还能保证资源池内的正常运行意以外,还保证出现故障的主机上运行的虚拟机在其他主机上重启。 XAPI和名为xhad的组件进行紧密集成,实现XenServer资源池的高可用。Xhad是一个主机活跃度监视器。当xhad确认主机发生故障时(其通过监视超时时间和主机与存储等该设备的连接状态来判断),那么XAPI将重新启动出现故障并且已被HA标记为 “受保护”的虚拟机。 XAPI还可以限制资源利用,以防止资源池变得过于超载,以应对有多个主机故障时没有资源运行HA。

最后XAPI还承载了实现XE CLI的任务,其XE执行效率和XAPI直接关联。XE程序远程控制访问XAPI命令行,XAPI则根据返回一Shell界面,显示系列简单的命令(提示输入;打印屏幕;取文件;退出等等)。

本文出自 “我拿流年乱了浮生” 博客,请务必保留此出处http://tasnrh.blog.51cto.com/4141731/1786861

【转】XenServer架构之XAPI的更多相关文章

  1. 【转】XenServer架构之XAPI的调用流程

    XAPI 调用是使用XML-RPC协议通过网络发送到安装有XenServer 的主机上.XAPI对象的引用不保证对象的永久标识符,引用不允许对象进行相等比较.对同一物体的两个引用,不保证是文本相同的. ...

  2. XenServer安全重启xapi的方法

    XenServer安全重启xapi的方法 2012-11-29 12:58:07|  分类: 虚拟化-XenServer|字号 订阅 平常我们很常用到重启xapi命令,在这介绍下xapi: XAPI( ...

  3. 【转】 XenServer架构之HA概述

    一.XenServer HA概述 XenServer HA是一套全自动功能设计,规划,安全地恢复出现问题的XenServe 主机上的虚拟机的功能组件. 启用 HA 后,XenServer 将持续监视池 ...

  4. 【转】Xen与XenServer的区别

    说到XenServer,总是离不开Xen,所以我要说他们的区别,得首先从Xen开始说起! Xen体系架构 Xen hypervisor体系架构 Xen 的 VMM ( Xen Hypervisor ) ...

  5. Deploying Cloud Foundry on OpenStack Juno and XenServer (Part I)

    link http://rabbitstack.github.io/deploying-cloud-foundry-on-openstack-juno-and-xenserver-part-i/ Cl ...

  6. 【转】 XenServer的架构

    一.Dom0或者控制域 XenServer从安装上看起来像是一个Linux,所以有些同学认为XenServer就是Linux或者是Linux修改的.真实的XenServer和Linux的关系是这样的: ...

  7. 【转】XenServer的架构之Xenopsd组件架构与运行机制

    一.Xenopsd概述 Xenopsd是XenServer的虚拟机管理器. Xenopsd负责:启动,停止,暂停,恢复,迁移虚拟机:热插拔虚拟磁盘(VBD):热插拔虚拟网卡(VIF):热插拔虚拟PCI ...

  8. 【转】XenServer体系架构解析

    XenServer是一套已在云计算环境中经过验证的企业级开放式服务器虚拟化解决方案,可以将静态.复杂的IT环境转变为更加动态.易于管理的虚拟数据中心,从而大大降低数据中心成本.同时,它可以提供先进的管 ...

  9. xenserver+starwind架构布署

    主机 CPU 和主板均需支持 INTER-VT/ AMD-VT ,主板默认可能没开  进BISO开启  下载最新的 xenserver ,授权注册一下 轻松得到授权文件 (鄙视一下VMWARE,看人家 ...

随机推荐

  1. [.Net] 手把手带你将自己打造的类库丢到 NuGet 上

    手把手带你将自己打造的类库丢到 NuGet 上 序 我们习惯了对项目右键点击“引用”,选择“管理NuGet 程序包”来下载第三方的类库,可曾想过有一天将自己的打造的类库放到 NuGet 上,让第三者下 ...

  2. 【原创】记一次Project插件开发

    一.开发背景 最近在使用微软的Office Project 2010 进行项目管理,看到排的满满的计划任务,一个个地被执行完毕,还是很有成就感的.其实,不光是在工作中可以使用Project进行项目进度 ...

  3. 修改版: 小伙,多线程(GCD)看我就够了,骗你没好处!

    多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术.具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能.具有这种能力的系 ...

  4. Eclipse 安装 SVN 的在线插件

    这是继上次svn 客户端与服务器安装后的如何在Eclipse 环境下在线安装 SVN插件,我的Eclipse版本是4.50 SVN的在线安装 下面为大家提供SVN 的在线安装教程.下面是安装的 详细过 ...

  5. 4.JAVA之GUI编程事件监听机制

    事件监听机制的特点: 1.事件源 2.事件 3.监听器 4.事件处理 事件源:就是awt包或者swing包中的那些图形用户界面组件.(如:按钮) 事件:每一个事件源都有自己特点有的对应事件和共性事件. ...

  6. ASP.NET Core 中文文档 第三章 原理(14)服务器

    原文:Servers 作者:Steve Smith 翻译:谢炀(Kiler) 校对:许登洋(Seay).姚阿勇(Dr.Yao) ASP.NET Core 已完全从承载应用程序的 Web 服务器环境中分 ...

  7. JS瀑布流布局

    好久没有更新博客喽,今天来说一个瀑布流布局. 瀑布流在很多网站已有很多,现在只说一下简单的实现原理吧, 1.计算一行可以排放几个元素 2.建立一个数组用于存放第一行的每个元素的高度. 3.得到数组中的 ...

  8. Node学习笔记(三):基于socket.io web版你画我猜(二)

    上一篇基础实现的功能是客户端canvas作图,导出dataURL从而实现图片信息推送,下面具体讲下服务端的配置及客户端的配置同步 首先先画一个流程图,讲下大概思路 <canvas id=&quo ...

  9. php在没有登录的情况下自动跳转到登录页

    <?php namespace Home\Controller; use Think\Controller; class BaseController extends Controller{ / ...

  10. Android ORM -- Litepal(1)

    ORM,即Object Relation Mapping,对象关系映射,实现了程序里面的类和数据库里面的数据之间的对应关系,对数据库的操作可以通过对类的操作去实现,不用再写SQL语句,从而提高了开发效 ...