XenServer是一套已在云计算环境中经过验证的企业级开放式服务器虚拟化解决方案,可以将静态、复杂的IT环境转变为更加动态、易于管理的虚拟数据中心,从而大大降低数据中心成本。同时,它可以提供先进的管理功能,实现虚拟数据中心的集成和自动化,而成本远远低于其它解决方案。
XenServer易用简单,只要优化部署做得好,运行是非常稳定的。对于中小企业来说,采用XenServer来部署虚拟化系统,性价比是十分不错的选择。XenServer基于Xen开发,现在已经全部开源了全部源代码。
在XenServer没有开发全部源代码之前,XenServer的源代码结构组成是这样的:
这部分是Citrix自己开发的拥有所有权的闭源源代码;
这部分是开放源码,使用的是公共开发的源代码;
这部分是利用开放源码,Citrix在此基础之上开发修改的源代码。
XenServer全部开源就是将红色部分的源代码和紫色部分的源代码进行开源公布。其代码结构如下:
可能行业内的工程师都知道,在Citrix还没有完全开源XenServer之前,XenServer是有一个社区版本的,名字简称为XCP。在XenServer开源之后,将会有以下的改变:
XCP将会和XenServer进行合并;
XAPI开发将由Linux基金会的Xen项目来主持;
使用XCP的用户可以免费升级到XenServer;
可能延迟对XCP项目的更新直至XCP项目关闭。
在今天,我们的XenServer已经开源了,那么对于他的定位的是什么?在服务器虚拟化领域,XenServer已经远远的落后于Vmware和Hyper-v了。根据XenServer.Org社区及Citrix的定义:
XenServer继续根植于服务器虚拟化领域,为人们提供开源、廉价、性能稳定的服务器虚拟化产品;
承载Citrix公司重量级产品XenApp及XenDesktop的主要底层托管hypervisor平台,紧密集成一些关键特性和最佳实践;
为Citrix公司的应用交付产品NetScalerSDX提供底层的hypervisor平台;
为云计算平台CloudStack、OpenStack和SoftLayer’s CloudLayer提供底层hypervisor平台。
如果说我们要给XenServer的体系结构做一个等级归类的话,XenServer 4.x和5.x版本算是第一代架构,XenServer6.0到6.2之前的版本算是第二代架构,XenServer 6.5算是第三代架构。
之所以有这样的划分是因为XenServer在积极的改变自身的架构和性能,为了自身更好的进行模块化的耦合,也解决之前架构的一些问题。
XenServer 6.2版本之前,其主要存在以下问题:
过于单一,难以维持简单的语义和单元测试;
Domain 0的可伸缩性和性能存在瓶颈限制;
缺乏故障控制功能
属于SMP架构优化和开发,对于NUMA架构优化和支持不好;
Domain 0对安全的侧重点不够,安全事件频繁;
对于第三方的扩展支持有限。
XenServer 6.5基于这些问题进行了架构的改变和解决:
内部API和模块化:这可以更好的系统设计架构;更容易进行单元测试,同时提高XenServer的可靠性,维护性,保障性和可调试性。
将Domain 0的一些服务解体拆分到其他Domain服务:这可以提高单个XenServer主机上的可扩展性,消除Domain0之前架构存在的性能瓶颈,同时更多基于安全角度设计架构,保障多租户环境的隔离安全,同时提高可用性和服务质量。
可扩展性和灵活性:提升对第三方服务的支持力度。
以下对XenServer的体系架构解读基于XenServer6.2及以下的版本。
如上图所示,XenServer包含以下几部分:
Xen Hypervisor:直接运行于硬件之上是Xen客户操作系统与硬件资源之间的访问接口。通过将硬件进行抽象,将相应的硬件CPU、内存的资源调度给上层的客户机使用。目前Xen Hypervisor并不直接操作IO硬件,不负责处理诸如网络、外部存储设备、视频或其他通用的I/O处理。
Domain 0:运行在Xen管理程序之上,具有直接访问硬件和管理其他客户操作系统的特权的客户操作系统。Domain 0 在Xen中担任管理员的角色,它负责管理其他虚拟客户机。Domain 0上运行XAPI接口,是XenServer管理的核心,由一系列的toolstack组成,并提供给XenCenter进行使用。如上图,Domain 0中还运行了VNC软件,VNC是一款远程访问的图形显示软件,将虚拟机的界面在XenCenter的控制台中进行显示,同时对于虚拟机的一些VNC显示所需的后端设备使用QEMU软件进行模拟,所以我们才能够在XenCenter中看见虚拟机的状态,其和我们使用的硬件KVM进行显示类似。同时,在上图中我们还看到,在Domain 0中包含两个驱动程序,用于支持其他客户虚拟机对于网络和硬盘的访问请求。这两个驱动分别是Network Backend Driver和Block Backend Driver。Network Backend Driver直接与本地的网络硬件进行通信,用于处理来自Domain U客户机的所有关于网络的虚拟机请求。根据Domain U发出的请求,Block Backend Driver直接与本地的存储设备进行通信然后,将数据读写到存储设备上。
DomainU:运行在Xen管理程序之上的普通客户操作系统或业务操作系统,不能直接访问硬件资源(如:内存,硬盘等)。在上图我们可以看到,2台Domain U是不同的。在 XenServer 中,VM 可在以下两种模式之一中运行:半虚拟化 (PV) - 虚拟机内核使用特定代码,此代码在虚拟机管理程序上运行,以管理设备和内存。全虚拟化 (HVM) - 使用特定处理器功能“捕获”虚拟机执行的特权指令,以便可以使用未经修改的操作系统。为了访问网络和存储,会为虚拟机提供仿真设备,或者也可以出于性能和可靠性原因,使用 PV 驱动程序。无论是半虚拟化Domain U还是完全虚拟化Domain U,作为客户虚拟机系统,Domain U在Xen Hypervisor上运行并行的存在多个,他们之间相互独立,每个Domain U都拥有自己所能操作的虚拟资源(如:内存,磁盘等)。而且允许单独一个Domain U进行重启和关机操作而不影响其他Domain U。
管理接口:XenServer中的管理接口的和linux类似,都有GUI和CLI接口,GUI接口使用XenCenter进行实现,XenCenter通过https协议走443端口,和XPAI进行安全通信,并取得state.db里面的配置信息并在图形界面上显示出来,对于虚拟机的图形状态显示通过VNC软件进行控制台显示输出。CLI接口使用XE Shell命令实现。在使用CLI控制台是,在本地晕车CLI的Shell控制台,通过SSH的22端口连接到Domain 0的SSHD进行,其运行模式和我们使用putty登陆Linux系统进行运维管理并无区别。
通过以下两种方法管理 XenServer:XenCenter 和 XenServer 命令行接口 (CLI)。
GUI:XenCenter
XenServer 主机系统安装完成后,系统会自带一个图形化管理工具:XenCenter。通过XenCenter 可以完成所有的配置操作,我们在实施中大部分配置操作都会通过该管理工具实现。XenServer主机使用HTTPS协议通过端口443与XenCenter进行通信(使用 XenAPI 进行命令和响应的双向连接),并通过端口 5900 与半虚拟化的 Linux VM 进行图形 VNC 连接。在Linux环境下,XenCenter还有一给开源的版本可以安装在Linux上对XenServer进行管理。
获取XenCenter的途径有3个,第一种是通过网页的方式访问XenServer 主机系统的IP地址,即可下载到该工具。第二种就是在安装光盘或者ISO文件中进行提取,一般路径为:.\client_install\XenCenter.msi。第三种是通过Citrix 官网Download(下载)页面下载,可选择下载中文版本。
同时,思杰还通过该接口提供了一个基于虚拟机的Web管理控制台。需要导入一台OVF的虚拟机WebSelf Service,Web Self Service 是一个轻型门户,允许每位用户操作自己的虚拟机,而无需具有 XenServer 主机的管理员凭据。不过该虚拟机控制台在6.2及以后的版本中已经弃用。
命令行接口 (CLI)
使用XenServer 命令行接口 (CLI) 的方式管理XenServer,需要使用SSH通过22端口登陆XenServer系统进行操作。该方式以命令行的方式对XenServer进行连接管理,除了常规的Linux的命令之外,思杰还给我们提供了一个专门的管理命令:xe,通过该命令可以完成和XenCenter相同的功能。由于命令行操作不方便,涉及的参数繁多,这里我们就不加以介绍了,如果有需要请参考XenServer 的《XenServer 管理员指南》文档。
对XenServer的管理需要依靠一个服务:XenAPI(或者XAPI)。 XenAPI是XenServer中的一组管理接口的统称,是XenServer管理的核心,由一系列的toolstack组成。
XenAPI提供了一个基于 XML-RPC 的 API,该API除了提供给XenCenter以及pool中各主机通信使用外,还可以从远程系统调用 XML-RPC 编写使用 XenServer 管理 API 的应用程序。
XenServer XAPI中提供的这些Toolstack,其运行与Domain 0中,主要功能如下:
提供Xen的API
存储元数据的cfg配置文件。
管理/连接VM存储
管理主机网络CFG配置文件。
管理VM /主机控制台访问
管理资源池
高可用性(HA)
监控和统计
虚拟机生命周期管理(即启动,停止,暂停等)
XenCenter就是通过XAPI来读取XenServer的配置、管理、License的管理、数据库的维护等等,同时也包括如存储(SR)、虚机、虚拟网卡、HA等等所有的功能控制。而Pool中的所有XenServer的操作请求也是通过XAPI传递给Dom0,同时在池中的所有主机中间通信,例如:Pool中数据库(配置数据库,由XenServer维护的一个小型数据库)会通过XAPI在所有的主机之间同步,以便在Master服务器宕机以后,其他机器能够正确而迅速的取代Master,并维持Pool的功能和服务。
在XenServer的总体架构图中,我们还看见了在XPAI和Plugins下面还存放一个State.db的文件,该文件就是存储一些配置信息的一个简易数据库。XAPI会将一些配置信息写入到该数据库,同时在需要时还会去调用这个数据库里面的培配置信息。那么这个数据库中存放了那些配置信息呢?我们可以通过如下命令进行查看:./dbtool �Ca �Cv /var/xapi/state.db > /root/dbtool_output.txt
打开之后我们看见里面存储了一些对象与对象之间的对应关系信息,其主要信息就是VM与HOSt以及存储VDI之间的对于关系。我们在XenCenter的图形界面看到的虚拟机在那台Host上,连接的那个磁盘,这些真正的对应关系都是在这里面存储着的,XenCenter会通过XAPI调取里面的配置信息并通过自己以图形界面的形式展现出来。所以这个数据库不但和XAPI本身的服务相关,还和XenCenter显示的界面有一定的关系。
下图显示了里面存储的对应关系图:
VNC(Virtual Network Computing)是一种借助RFB协议实现远程共享和远程操作的软件,它借助网络传送鼠标、键盘动作和画面更新数据。由于VNC使用最底层的绘图信息(指向显卡显存的屏幕像素数据)来进行协议封包和传送,所以其传输数据量大,网络带宽要求很高、效率也相对较低;另外,VNC缺乏统一规范的安全机制。但也正是因为它传输的是平台无关的底层像素信息,这些信息在其他任何平台都可以进行重绘,所以在XenServer和VMWare等服务器虚拟化平台才会采用VNC来支持服务器虚拟化客户端管理软件对虚拟机终端的跨平台操作显示。
VNC在这里不在详细介绍,其运作原理是在Domain 0中安装VNC的服务器端,在XenCenter中集成VNC的客户端。当用户点击其中一台虚拟机的图形控制台窗口的时候,DXenCenter中集成的VNC客户端就会启动和Domain 0中的VNC服务器端进行连接,其VNC连接的身份验证了XAPI里面集成的身份验证信息。在主机上执行的 XML-RPC API 服务器接受客户端的安全套接字连接。这样,所有 API 调用都在登录会话上下文中执行,登录会话是通过在服务器端进行用户名和密码验证生成的。这样,将可以对 XenServer 安装进行安全的、经过身份验证的访问。其他比如VNC的访问都调用其身份验证的信息。这时Domain 0会将该台虚拟机的屏幕操作变化信息进行抓取,并通过VNC协议传输到客户端,在XenCenter的控制台进行显示。同时客户端的VNC通过网络传送鼠标、键盘动作信息给到Domain 0的服务器端,Domain 0的服务器端在将这些鼠标和键盘的操作命令通过XAPI给到Domain中的虚拟机,该台虚拟机在执行了这些操作后,Domain 0抓取这些变化的图像画面传送到XenCenter的VNC进行显示。
在Xen的全虚拟化架构中,Xen对硬件三类资源的管理和调度是这样运作的:对于CPU的管理和调度,加入了对Intel VT 技术和AMD Pacifica 技术的支持,因此可以使得虚拟机可以直接访问物理CPU资源;对于内存来说,硬件虚拟化技术IOMMU等等也简化了内存地址之间虚拟与真实的转换开销。但是对于IO设备来说,由于前后端驱动是基于半虚拟化环境开发的,因此,在最初的Xen完全虚拟化技术中,使用Qemu来仿真PC硬件,包括BIOS、IDE硬盘控制器、VGA图形适配器(显卡)、USB控制器、网络适配器(网卡)等。
在最新的XenServer版本中,比如XenServer 6.5以及 Xen4.4版本中,换成了一个被称作PVH的新的虚拟化种类,就是在PV的模式下增加对硬件辅助虚拟化的支持,但目前对xen和kernel的版本有要求。就是相比较以上的全虚拟化而言,PVH融合得更加的彻底。它是一个使用了针对启动和I/O的半虚拟化驱动的半虚拟化模式。与HVM全虚拟化不同的是,它使用了硬件虚拟化扩展,是不需要进行仿真的。因此去掉了QEMU对一些IO设备的模拟和仿真。
因此QEMU和XenServer的关系是,QEMU模拟和仿真Xen虚拟机的虚拟硬件,包括BIOS、IDE硬盘控制器、VGA图形适配器(显卡)、USB控制器、网络适配器(虚拟网卡)等等,同时结合VNC,模拟虚拟机的启动与执行命令后的动作,VNC将其画面抓取之后向前端输送这些画面信息。
XenServer的虚拟机安装tools是为了使VM具有完全支持的配置,并且能够使用XenServer管理工具(通过XE CLI或XenCenter中)进行管理。
一个Windows VM不按照XenTools也可以工作,没有XenTools,性能会显著下降。
Xentools是Citrix 半虚拟化网络和 SCSI 驱动程序 (XenServer Tools) ,可为虚拟机提供高性能的 I/O 服务,并且不会产生传统设备仿真所需的系统开销。这些驱动程序可替代仿真设备,在 Windows 和 XenServer 产品系列软件之间提供高速传输。在安装 Windows 操作系统期间,XenServer 使用传统的设备仿真为 VM 提供标准 IDE 控制器和标准网卡。通过这种方式,Windows 使用内置驱动程序完成安装,但由于控制器驱动程序仿真存在固有的系统开销,因而导致性能降低。
如果没有安装XenTools,你不能:
彻底关闭 VM
彻底重新启动 VM
挂起 VM
迁移正在运行的 VM(XenMotion)
使用检查点和回退功能
动态调整分配给正在运行的Linux VM 的 vCPU 数量 - Windows VM 需要重新启动才能使这种更改生效
如果正在处理的 VM 上未安装XenServer Tools,则属性窗格中的常规选项卡上将显示未安装 Tools红色文本消息。如果 XenServer 已经更新,而 VM 上安装有早期版本的XenServer Tools,此处也会显示一则消息。在这种情况下,显示的消息为Tools 已过期(已安装 x.y 版本)。对于 Windows VM,双击此文本可切换到 VM 控制台、加载 ToolsISO 并启动 Tools 安装向导;对于 Linux VM,双击此文本可切换到 VM 控制台并加载 ToolsISO(但是,必须装载 ISO 并手动运行安装)。