⽬录:
1. Xen的简介
1.1 Xen的⼤体结构1.2 Xen对VM的称呼
1.3 Xen对CPU和内存的虚拟化过程1.4 Xen对IO设备的虚拟化过程1.5 Linux Kernel对Xen的⽀持1.6 Xen版本发布简史1.7 Xen的⼯具栈1.8 XenStore
1.9 虚拟化中的四种⽹络模型1.10 Xen的安全问题导读2. Xen的安装及配置⽂件说明
2.1.1 在CentOS6.6上运⾏Xen的条件2.1.2 Xen的配置
2.2.1 Xen 启动DomU的配置⽂件说明
2.2.1.1 如何创建⼀个Xen PV模式的VM 【注:HVM模式的VM创建参见试验部分】3. 使⽤libvirt实现Xen虚拟机的图形管理
4. PV DomU的根⽂件系统可以以多种不同的⽅式安置提⽰:
Xen仅建议学习其原理,不建议花时间学习具体使⽤.
若希望了解具体使⽤参考: https://pan.baidu.com/s/1A77aJdoBK7CPIF7FVngudQ 查看此⽂件需要使⽤Cherrytree⽂档编辑器查看
1. Xen的简介
Xen是⼀个开源的可直接运⾏于硬件层之上的虚拟化软件,它可在传统虚拟技术极度不友好的X86架构上也有上佳的表现它是英国剑桥⼤学开发的开源虚拟化软件,它的初衷是在⼀台物理机上运⾏上百台虚拟机;
Xen的设计⼗分精巧,它属于虚拟化type-I ,因为Xen实际是⼀个简化版的Hypervisor层;相对于Type-II类型的基于Host的虚拟化(如:VMwareWorkstattion),其性能相对会较好;Xen仅对CPU和Memory直接接管,⽽其它IO硬件驱动则由其上运⾏的第⼀个虚拟机来提供⽀持.这样做的原因是: Xen⽆法为众多IO设备开发驱动,⽽硬件设备的开发商也不会专为Xen提供驱动,因此Xen采⽤了这样⼀种特别的设计⽅式。
Xen默认认为⾃⼰是直接运⾏于硬件层之上的虚拟化软件,并且可以直接驱动CPU和内存,需注意CPU和内存是所有想要运⾏的操作系统必须能直接⽀持的,但Xen为保证⾃⾝的⼩巧,它并没有提供虚拟机的管理接⼝,因此它采⽤了⼀种独特的⽅式,先运⾏⼀台特权虚拟机,且这台VM必须⽀持Kernel的修改,因此选择开源的Linux做为特权VM是最合适的,这样也可⽅便采⽤Linux所⽀持的⽅式来开发虚拟机管理接⼝,实现与Xen Hypervisor层直接交互来完成为VM分配CPU和内存资源 及 创建、删除、停⽌、启动VM的管理接⼝;通常这台特权虚拟机⼀定会采⽤当前⽐较流⾏的Linux发⾏版,因为它能⽀持更多IO硬件设备,如:⽹卡,磁盘,显卡,声卡等; 到⽬前为⽌,NetBSD, GNU/Linux, FreeBSD和Plan9,OpenSolaris等系统已经⽀持已半虚拟化⽅式运⾏在Xen的DomU中;⽬前Xen已经⽀持x86,x86_64和ARM等平台,并正在向IA64、PPC移植。移植到其他平台从技术上是可⾏的,未来有可能会实现。
Xen虚拟机⽀持在不停⽌的情况下在多个物理主机之间实时迁移。在操作过程中,虚拟机在没有停⽌⼯作的情况下内存被反复的复制到⽬标机器。虚拟机在最终⽬的地开始执⾏之前,会有⼀次60-300毫秒的⾮常短暂的暂停以执⾏最终的同步化,给⼈⽆缝迁移的感觉。类似的技术被⽤来暂停⼀台正在运⾏的虚拟机到磁盘,并切换到另外⼀台,第⼀台虚拟机在以后可以恢复。
1.1 Xen的⼤体结构:
Xen的组成分为三部分:
(1) 硬件层之上的Xen Hypervisor层:负责直接驱动CPU和Memory这些基础硬件,
为其它所有虚拟机提供CPU、内存、Interrupt(中断)管理,并且还提供了HyperCall的调⽤。
(2) 第⼀个虚拟机: 此虚拟机在Xen中称为特权虚拟机: 它有整个虚拟化环境的访问权,并负责创建⽤户级虚拟机, 并为其分配I/O设备资源.它的Kernel是经过特别修改的VM,它可以直接访问IO硬件也可访问其它⽤户VM。 (3) 其它众多虚拟机: 这些虚拟就是⽤户级虚拟机: 它们是实际提供给⽤户使⽤的虚拟机,也是相关隔离的VM。 需要注意:Xen⽀持三种虚拟化,当然此处的虚拟化特指CPU的半虚拟化或完成虚拟化. <1> Para-Virtualization(半虚拟化): 在这种虚拟化中,CPU不要求⽀持HVM特性,
但GuestOS的Kernel必须允许被修改.否则将⽆法⽀持该GuestOS运⾏在DomU中。
这是因为必须让GuestOS知道⾃⼰是运⾏在虚拟化环境中,这样它在进⾏特权指令操作硬件时, 会直接发起HyperCall向Xen Hypervisor发起请求来完成所谓的硬件操作。 在PV技术下,能够运⾏在DomU上的OS包括: Linux, NetBSD, FreeBSD, OpenSolaris
<2> HVM(基于硬件的完全虚拟化): 此种虚拟化需要借助于Intel的VT-x 或 AMD的AMD-v 的HVM技术 及Qemu的IO硬件模拟,才能⽀持GuestOS的kernel不修改,就可直接被DomU⽀持。
这是因为Xen Hypervisor是运⾏在CPU的环-1上的,GuestOS的kernel是运⾏在CPU的环0上,GuestOS
向环0上发起的所有假特权指令调⽤都由CPU直接捕获,并交由环-1上的Xen Hypervisor处理,最后由Xen代其执⾏
这样DomU若发起关机指令时,Xen仅会切断该GuestOS的电源,⽽不会影响其它GuestOS。 在HVM技术下,能够运⾏在DomU上的OS包括: 所有⽀持X86架构的OS.
<3> PV on HVM: I/O设备半虚拟化运⾏,CPU运⾏于HVM模式
此中⽅式是为了解决HVM⽅式中IO设备也必须完全模拟⽽带来的性能低下问题;通过让CPU进⾏ 完全虚拟化,⽽I/O设备则采⽤在GuestOS中安装相应的IO驱动实现IO的半虚拟化的⽅式来提⾼效率。 在PV on HVM的技术下,能够运⾏在DomU上的OS包括: 只要OS能驱动PV接⼝类型的IO设备,即可.1.2 Xen对VM的称呼:
Xen对VM统称为Domain.
第⼀台特权VM,在Xen中通常称为: Domain0,简称为Dom0, 别名: Privileged Domain.
其它后续⽤户级VM,在Xen中称为: Domain1,Domain2,...., 它们有⼀个统称为DomU,别名:Unprivileged Domain.
1.3 Xen对CPU和内存的虚拟化过程:
Xen在给VM提供CPU的虚拟化时,它采⽤的也是在Xen hypervisor层启动⼀个线程,并将这些线程映射到某个物理核⼼上,当然通过DomU的配置⽂件中的cpus可以指定将这些模拟CPU的线程绑定到某⼏个物理核⼼上;⽽内存的虚拟化则是内存页的映射,将物理内存上多个连续或不连续的内存页映射给VM,让VM看来这就是⼀个完整的连续的内存空间.
1.4 Xen对IO设备的虚拟化过程:
当启动⼀个⽤户VM(DomU)时, 该VM所需的CPU和内存都有Xen Hypervisor提供,⽽它若需要使⽤IO设备时,则向特权VM发起请求,特权VM(Dom0)会为该⽤户VM创建⼀个模拟的硬件设备线程,并运⾏于特权VM的⽤户空间,当⽤户VM向该IO硬件发起调⽤时,特权VM上相应的模拟设备接收请求并将其转化为特权VM对IO硬件的操作,交给特权VM的内核来代为完成其操作。这⾥需注意这些虚拟IO硬件需要由Qemu来模拟,Xen本⾝并没有提供相应的模拟功能。(注:特权VM的CPU和内存也是有Xen Hypervisor提供.)
Qemu模拟IO设备(完全虚拟化⽅式): 假如⽤户VM向特权VM请求磁盘,特权VM可以将⼀个分区、⽂件等,通过Qemu将其模拟成⼀个磁盘设备,就拿⽂件来说,特权VM先创建⼀个映像⽂件,再通过Qemu为该⽂件模拟⼀个磁盘控制器芯⽚,然后,将其映射到⽤户VM上,当然模拟的这个磁盘控制器芯⽚⼀定是⼀个最常见的,⽤户VM的Kernel⼀定⽀持的,但需注意: 模拟的磁盘可能会与实际的物理磁盘不同,因为要尽可能兼容。这样⼀来⽤户VM假如要写数据到磁盘的过程如下:
⽤户VM-APP--->⽤户VM-Kernel调⽤虚拟磁盘的驱动进⾏写数据前的准备(如:数据写⼊到磁盘中的扇区位置/数据编码等)---> ⽤户VM-Kernel将编码后的信息发给特权VM的模拟磁盘进程---> 特权VM的模拟磁盘进程再将编号信息还原后发给特权VM-kernel--->
特权VM-kernel调⽤真实物理磁盘的驱动对数据进⾏写前准备--->最后磁盘驱动调度磁盘完成写⼊.摘录补充:()
Xen向Domain提供了⼀个抽象层,其中包含了管理和虚拟硬件的API。Domain 0内部包含了真实的设备驱动(原⽣设备驱动),可直接访问物理硬件,Xen 提供的管理 API 可与其交互,并通过⽤户模式下的管理⼯具(如:xm/xend、xl等)来管理 Xen 的虚拟机环境。
半虚拟化的IO设备:它与模拟最⼤不同是DomU知道⾃⼰是运⾏在虚拟化环境中的,并且知道这个磁盘不是真正的磁盘它只是Xen模拟的⼀个磁盘前端驱动(Disk Frontend),它要写数据时,直接将数据交给Disk Frontend,⽽不再去调⽤磁盘驱动进⾏数据编码,当特权VM端的Disk backend收到来⾃DomU的数据时,也是直接转给特权VM-Kernel,由其直接调⽤物理磁盘驱动来对这些原始数据进⾏处理并写⼊磁盘。摘录补充:
Xen2.0之后,引⼊了分离设备驱动模式。该模式在每个⽤户域中建⽴前端(front end)设备,在特权域(Dom0)中建⽴后端(back end)设备。所有的⽤户域操作系统像使⽤普通设备⼀样向前端设备发送请求,⽽前端设备通过IO请求描述符(IO descripror ring)和设备通道(devicechannel)将这些请求以及⽤户域的⾝份信息发送到处于特权域中的后端设备。这种体系将控制信息传递和数据传递分开处理。
半虚拟化客户机(Domain U PV)的PV Block Driver接收到要向本地磁盘写⼊数据的请求,然后通过Xen Hypervisor将⾃⼰与Domain
0共享的本地内存中的数据写⼊到本地磁盘中。在Domain 0 和半虚拟化Domain U之间存在事件通道(我的理解:Device Channel包含EventChannel),这个通道允许它们之间通过存在于Xen Hypervisor内的异步中断来进⾏通信。Domain 0将会接收到⼀个来⾃于Xen Hypervisor的系统中断,并触发Domain 0中的Block Backend驱动程序去访问本地系统内容,并从⾃⼰与半虚拟化客户机的共享内存中读取适合的数据块后,随即被写⼊到本地磁盘的指定位置中。
但⽆论采⽤模拟或半虚拟化最终都是对物理磁盘的操作,假如当前只有⼀个物理磁盘,众多⽤户VM都在进⾏⼤量的读写请求,此时,为了避免⽤户VM⽆限制的向特权VM发起请求,特权VM中采⽤⼀个环状缓存区,每到⼀个IO请求,就先将其塞⼊这个环状缓冲区的槽位中,若缓冲区满了,就会告诉⽤户VM IO设备繁忙。当然其它各种IO设备⼤致都采⽤这种机制来控制。
1.5 Linux Kernel对Xen的⽀持:
》Linux2.6.37 : kernel开始对Xen进⾏⽀持,并加其加⼊到Kernel中。 》Linux3.0 :Kernel开始对Xen的关键部分进⾏优化. RHEL对Xen的⽀持概况:
Redhat系列对Xen的⽀持情况:
RHEL5.7 ~ 及以前版本: 默认的企业虚拟化技术为Xen. 但Redhat提供了两种内核:
kernel-... :这是仅允许RHEL系统的内核,不能运⾏在DomU中。 kernel-xen.. :这是需要部署XenServer时,使⽤的Kernel版本.
RHEL6 ~ 及以后版本: 默认⽀持KVM(收购⾃以⾊列的⼀款虚拟化⼯具),并且不在对Xen做任何⽀持,但允许⾃⼰运⾏在DomU中.1.6 Xen版本发布简史:
10年4⽉Xen4.0.0发布,改进后Xen的DomU最⼤可⽀持虚拟CPU 64颗,Xen主机可⽀持1TB内存和128颗物理CPU,磁盘可⽀持快照和克隆; HVM客户机⽀持虚拟内存页共享;
11年4⽉发布的Xen4.1版后,xm/xend开始被提⽰废弃,xl这个更轻量级的Xen VM管理⼯具逐渐成为主流. 15年为⽌已经发布Xen4.5版本.⽬前yum源可⽤的最新版Xen是4.6.1版的(
1.7 Xen的⼯具栈:
xend : 这是Xen Hypervisor的Dom0上运⾏的服务,此服务⽤来监控xm命令发来的指令,并完成相应的动作。 xm : Xen Management,⽤来管理VM的创建、删除、启动、快照、删除、停⽌等的管理⼯具。
xl : 这是⼀个基于libxenlight库的⼀个轻量级VM管理⼯具,它从Xen4.1开始出现,从4.3以后,它被作为主要的VM管理⼯具,⽽xm这个重量级管理⼯具开始被提⽰废弃.以下为xm、xl的对⽐图:
xl 和 xm都需要调⽤libxenlight,但xl不需要运⾏任何服务,它可直接调⽤libxenlight完成相关操作。 xe/XAPI,是xend的⼀个API管理接⼝,通常⽤于Xen Cloud环境中:Xen Server, XCP virsh/ libvirt : 这是Redhat发起开发的⼀套⽤于管理众多不同类别的VM的管理⼯具。 virsh : 这是⼀个命令⾏⼯具
libvirt: 则是⼀个lib库, libvirtd守护进程⽤于监听virsh命令操作,并调⽤lbvirt完成相关操作.
1.8 XenStore:
为各Domain之间提供共享信息存储的空间,同时它也是⼀个有着层级结构的名称空间数据库;它运⾏于Dom0上,由Dom0直接管理,它⽀持事务和原⼦操作。XenStore通常⽤来控制DomU中设备的机制,并通过多种⽅式对其进⾏访问。 摘录补充():
XenStore是Xen提供的⼀个域间共享的存储系统,它以字符串形式存放了管理程序和前、后端驱动程序的配置信息。Dom0管理所有的数据,⽽DomU通过共享内存,向Dom0请求与⾃⼰相关的键值,以此实现域间通信。Xen提供了多种接⼝⽤来操作XenStore:命令⾏的xenstore-*命令、⽤户空间的xs_系列函数、内核的XenBus接⼝,都可以⽤来⽅便地操作XenStore的数据。
1.9 虚拟化中的四种⽹络模型
在虚拟化环境中虚拟⽹络是⼗分重要但⼜⽐较难,需要特别注意;
在Linux中实现虚拟⽹络的⽅法中⽐较常⽤的⼯具有两个:bridge-utils 和 openvswitch,它们创建的虚拟⽹络设备是不能相互使⽤的,⽐如:bridge-utils创建的桥设备,openvswitch是⽆法识别的。 ⽤下图来做简单说明
1.10 Xen的安全问题导读 补充见附件:
2. Xen的安装及配置⽂件说明
2.1.1 在CentOS6.6上运⾏Xen的条件: ⽅式⼀:
(1) 编译3.0以上版本的内核,启动对Dom0的⽀持. (2) 编译xen程序 ⽅式⼆:
使⽤相关Xen运⾏环境快速部署的项⽬:
(1) xen4contos : 这是Xen官⽅提供的开源项⽬。 xen环境部署的RPM包镜像站: (2) xen made easy
2.1.2 Xen的配置: (1) 修改grub.conf
# Xen是直接运⾏于硬件层之上的,因此必须修改grub.conf,⼿动添加以下参数:
title Xen Server Linux 3.7.4 root (hd0,0)
kernel /xen.gz dom0_mem=1024M cpufreq=xen dom0_max_vcpus=2 dom0_vcpus_pin
module /vmlinuz-3.7.4-1.el6xen.x86_64 ro root=/dev/mapper/vg0-root rd_NO_LUNKS LANG=en_US.UTF-8 rd_LVM_LV=vg0/swap rd_NO_MDSYSFONT=latarcyrheb-sun16 crashkernel=auto rd_NO_DM KEYBOARDTYPE=pc KEYTABLE=us rd_LVM_LV=vg0/root rhgb quiet module /initramfs-3.7.4-1.el6xen.x86_64.img
注: kernel 必须指定xen*.gz为启动的内核, dom0_mem:设定Dom0启动后可以使⽤的内存⼤⼩, cpufreq: 设定由Xen来管理CPU, dom0_max_vcpus: 设定Dom0可以使⽤多少颗CPU,
dom0_vcpus_pin: 将Dom0固定在系统启动后,分配给它的CPU上,以避免它去抢占其它物理CPU核⼼,这样其它物理核⼼就可以分配给DomU来使⽤了。 详细参数查看:
2.2.1 Xen 启动DomU的配置⽂件说明 xl list : #⾸先需要了解的第⼀个命令. xen VM的常见状态: r : running b: block(阻塞)
p: pause(暂停): 类似与睡眠. s: stop
c: crash(崩溃)
d: dying, 正在关闭的过程中.
2.2.1.1 如何创建⼀个Xen PV模式的VM:
1. Kernel 和 initrd或initramfs :这些LinuxKernel⽂件必须要有,但可以不在DomU上,它们可以在Dom0上. 2. DomU内核模块(即:/lib/modules/`uname -r`): 这些就需要在DomU根⽂件系统中存储了。 3. 根⽂件系统
4. swap设备: 若条件充⾜也可以提供.
以上四步的内容必须定义在DomU的配置⽂件中.
注: xl 和 xm启动DomU的配置⽂件是存在⼀些不同的. 对于xl命令创建VM所需的配置⽂件说明可查看: man xl.cfg
# 注: man xl.conf #这是对xl命令所使⽤的配置⽂件.
xl.cfg的配置⽂件参数说明: name : 域的唯⼀名.
builder: 指明VM的类型,generic:创建PV类型的VM; HVM:创建HVM类型的VM vcpus: 指定CPU个数.
maxvcpus:指定最⼤可使⽤CPU的个数,这些CPU可在需要是⼿动启动。 cpus: 指定VM的vcpu线程可以运⾏在哪些物理核⼼列表上.
#如:cpus=\"0-3,5,^1\" 这表⽰:VCPU可运⾏在0,2,3,5上,但不能运⾏在1上.
#建议将vCPU绑定到固定的物理核⼼上,这样可减少vCPU线程在多个物理核⼼上切换. memory: 指定DomU启动时预分配的内存⼤⼩[单位:M] maxmem: 指定最⼤给DomU分配的内存⼤⼩. [单位:M] on_poweroff: 指定DomU关机时,实际采⽤的动作. destroy: 直接将DomU断电关机. restart: 重启
rename-restart: 改名后重启
preserve: 将这个DomU保存,以便下次再启动。
coredump-destroy: 将DomU的运⾏中的内核数据备份出来后,再关机。 coredump-restart: 先备份内核数据,再重启. on_reboot: 重启DomU时实际采⽤的动作。 on_crash: 当DomU崩溃后,实际采⽤的动作。 uuid: DomU的UUID,⾮必须. disk:指定DomU的磁盘列表
如: disk=[ \"/img/disk/DomU1.img\" , \"/dev/sda3\" , ...] vif : 指定DomU的⽹卡列表
如: vif=[ \"NET_SPEC_STRING\" , \"NET_SPEC_STRING\" , ...] vfb: 指定DomU的显⽰器, vfb:virtual frame buffer(虚拟帧缓冲)
如: vfb=[ \"VFB_SPEC_STRING\" , \"VFB_SPEC_STRING\" ,...] pci :指定DomU的PCI设备列表.
如:pci=[ \"PCI_SPEC_STRING\" , \"PCI_SPEC_STRING\" ,...] PV模型的专⽤指令:
kernel : 指定内核⽂件路径,此路径为Dom0的路径.
ramdisk: 指定initrd或initramfs⽂件的路径.
root: 指定根⽂件系统. 此参数仅与kernel和ramdisk⼀起使⽤,因为,kernel和ramdisk都是在 Dom0上的,并没有grub.conf来告诉kernel根⽂件系统在哪⾥,因此这⾥需要指定。 extra: 与root参数类似,它是指定kernel启动时的其它参数的.
# 以上4个参数⽤于kernel⽂件在Dom0上, 下⾯固定格式⽤于DomU有⾃⾝的Kernel⽂件.
bootloader=\"pygrub\": 若DomU使⽤⾃⼰的kernel和ramdisk,则此时需要⼀个Dom0中的
应⽤程序来实现其bootloader功能。这个不⽤指定root,因为,DomU的启动所需的 所有⽂件都在⾃⼰的镜像⽂件中,它可以从grub.conf中指定根⽂件系统的位置. 注:
# 让DomU通过⽹络之间安装操作系统,需要注意:
# kernel 和 ramdisk所需要的⽂件必须是:安装光盘⽬录下/isolinux/{vmlinuz,initrd.img} kernel=\"/images/kernel/vmlinuz\" ramdisk=\"/images/kernel/initrd.img\"
extra=\"ks=http://1.1.1.1/centos6.6_x86_64.ks\" #注:给内核传递的ks⽂件。 另注:
cloud-init*.rpm⼯具包可以将安装的OS中的特有信息(如:MAC, 磁盘信息等)删除,并且可以在下次启动时, ⾃动⽣成这些信息.是制作云模板OS镜像的⼯具。
磁盘参数的指定⽅式:
xl⽅式创建VM时,磁盘指定格式: http://xenbits.xen.org/docs/unstable/misc/xl-disk-configuration.txt [ target: 表⽰磁盘映像⽂件或设备⽂件路径: 如: /images/xen/linux.img /dev/vg-xen/lv-linux format: 表⽰磁盘的格式: 如: raw、qcow2..等,具体格式可查看: qemu-img --help |grep 'Supported formats' vdev: 指定添加的虚拟磁盘被DomU识别为何种类型的磁盘; ⽀持:hd, sd, xvd(xen-vritual-disk) 注: 指定是需要写成: sda 或 sdb等,即要指定这是第⼏块磁盘. access: 访问权限,除CDROM为'r'只读外,其它都为'rw' ⽰例: disk=[\"/images/xen/linux.img,qcow2,xvda,rw\ # 使⽤Dom0中物理磁盘分区做为DomU的存储空间 disk=['/dev/vg-data/lv-bbox,raw,xvda,rw'] 创建虚拟磁盘⽂件: #注qemu-img创建的磁盘映像⽂件是采⽤稀疏磁盘格式创建的.因此⽤:du -sh linux.img 可看到其⼤⼩为0. qemu-img create -f raw -o size=2G /images/xen/linux.img 创建虚拟⽹络接⼝: #虚拟⽹卡的创建直接在配置⽂件中使⽤vif指定即可。 #格式: vif=[ \"NET_SPEC_STRING\" , \"NET_SPEC_STRING\" , ...] NET_SPEC_STRING:的格式如下: key=value #key包含以下⼏个: 》mac :指定⽹卡的MAC地址,注:MAC地址必须以:00:16:3e 开头,这是IANA分配给Xen的MAC⼚商前缀. 》bridge: 指定此⽹卡要桥接到Dom0上的那个桥设备上. 》model: 指定模拟⽹卡的芯⽚类型:[rtl8139 |e1000] 》vifname:指定在Dom0中显⽰的接⼝名, 注: 在DomU中显⽰还是eth0... 》script: DomU在创建⽹络接⼝时,预先执⾏的脚本.注: 此脚本的路径也是Dom0上的路径. 》ip:指定要注⼊DomU中的IP地址。 》rate: 指定⽹卡的设备速率. 如: rate=10Mb/s rate=1MB/s@20ms #20毫秒内只能传输1M/0.02s=20000字节/20ms 图形窗⼝的启⽤: 可直接修改DomU的启动配置⽂件,并在其中添加: (1) vfb=['sdl=1'] #这是直接在本地启动⼀个VNC窗⼝来输出DomU的图形桌⾯,且只能本地连接. (2)Dom0上启动⼀个VNC进程,并监听在5900端⼝上,可通过密码连接. vfb=['vnc=1,vnclisten=0.0.0.0,vncpasswd=123456,vncunused=1,vncdisplay=:1'] #注: vncunused: 为⾮0值,则表⽰vncserver监听在⼤于5900的第⼀个没被占⽤的端⼝上. # vncdisplay: VNC显⽰号,默认为当前域的ID,当前域的VNC服务器将监听在5900+此显⽰号的端⼝上. vfb=[ 'sdl=1,xauthority=/home/bozo/.Xauthority,display=:1' ] #注:xauthority:表⽰认证密码⽂件。 # display: 3. 使⽤libvirt实现Xen虚拟机的图形管理 #需要安装的包 yum install libvirt libvirt-deamon-xen virt-manager python-virtinst libvirt-client 注: virt-manager: 是图形管理VM的接⼝界⾯,类似与VMware,可创建、启动、停⽌等 python-virtinst: 此⼯具提供了virt-install命令⾏管理VM的接⼝. libvirt-client: 提供了⼀个virsh命令来管理VM。 service libvirtd start #要使⽤libvirt⼯具集,此服务必须⾸先启动. virsh dumpxml busybox #将busybox的信息输出为virsh的可⽤的xml配置⽂件,可修改此⽂件做模板来创建新VM实例. 4. PV DomU的根⽂件系统可以以多种不同的⽅式安置: (1) 虚拟磁盘映像⽂件 (a)⽅便制作成通⽤模板 当⽤qemu-img创建好⼀个虚拟磁盘映像⽂件,并向其中安装好OS后,可以使⽤cloud-init这种⼯具对其进⾏修改,去除其中OS的唯⼀性的数据信息(如:MAC地址等),需要注意的是,磁盘映像⽂件实际上是由标准格式的并且在其上创建完⽂件系统后,就可以通过FS的API接⼝在不挂载的情况下对其中的⽂件进⾏修改. (b)⽅便实现实时迁移 1. 将模板映像⽂件放置于FTP/NFS/Samba等共享存储上,且有多台Xen Hypervisor: 场景⼀: 需要快速创建⼀台VM. 假如当前业务中MySQL的从库读压⼒过⼤,需要扩容,此时就可以直接通过⾃⾏开发的脚本⼯具来判断 当前那个Xen Hypervisor更空闲,然后,直接下载从共享存储上下载⼀个模板磁盘映像,直接就可以启动起来. 并且这是配置好的从库模板,启动后它可以直接连接到主库等等. 场景⼆: 快速迁移 假如当前某台Xen Hypervisor的CPU、Memory或其他资源突然升⾼,此时,可直接将该Xen Hypervisor上 某些VM的内存数据导出到共享存储上,然后直接在另⼀台⽐较宽裕的Xen Hypervisor上,下载模板映像⽂ 件并直接将该共享存储上导出的内存数据与模板映像⽂件关联,就可恢复到此Xen Hypervisor上实现快速迁移。 2.分布式⽂件系统上存储磁盘映像⽂件,且有多台Xen Hypervisor: 场景⼀: 故障快速恢复 假如当前Xen Hypervisor上运⾏了多台VM,但Xen Hypervisor所在物理机突然故障,这时,我们完全可以直接 将分布式存储系统上的磁盘映像⽂件直接让正常的Xen Hypervisor接管,已实现快速迁移. 场景⼆:快速迁移 如上⾯场景⼆类似,但此处我们⽆需在下模板磁盘映像⽂件,直接dump出运⾏中VM的内存数据到共享存储上 就可以直接在另⼀台Xen Hypervisor上启动起来。 (2) 使⽤Dom0上空闲的物理磁盘分区 (3) 使⽤Dom0上空闲的逻辑卷 (4) 使⽤iSCSI设备提供的块级别⽹络⽂件系统 或 分布式⽂件系统。 (5) ⽹络⽂件系统,如: NFS, Samba 因篇幅问题不能全部显示,请点此查看更多更全内容