Xen的入门到放弃
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
Xen 是一个开放源代码虚拟机监视器(VMM),由剑桥大学的"Ina Pratt"和"Keir Fraser"的2个研究员在“Xenoserver”项目中共同开发。 它的虚拟化实现方式是:Type-I型。也就是说 一个主机不需要安装操作系统,只需要在这个硬件安装一个“Xen hypervisor”,然后可以在这个“Xen hypervisor”上安装安装多个硬件。
一.Xen Hypervisor简介
Xen本身的主要目的是致力于在单个物理机器上可以跑起来多大128个甚至是更多的虚拟机。在单个的物理节点上,Xen早些年的实现是基于半虚拟化的技术(当时并没有出现硬件辅助虚拟化技术。),相比当时完全虚拟化的方式而言,大致只是损失整个硬件平台的5%左右的性能,而典型情况下只有2%的损失,最多不会超过8%。
Xen本身只负责管理CPU和内存。也就是说所有的I/O设备Xen既不负责驱动,也不负责管理。他的各种I/O功能都是由Dom0来实现的。
1.Dom0(用于I/O控制平台,console.)
简单的讲,Xen在虚拟化环境中,用域来描述各个虚拟机,每个域(Domain)都有其ID等属性,所以所Domain0只是虚拟机的一个编号,表示第一个虚拟机。通常我们习惯简写成Dom0。Dom0是运行在Xen Hypervisor上独特的一个虚拟机,也被称之特权域,其(Dom0)内核是经过特殊修改的Linux内核,其能够直接访问硬件的I/O资源,但是不能访问CPU。Dom0的I/O资源还可以为其他的非特权域中的虚拟机(即Dom1m,Dom2,....统称为DomU)实例提供交互的。所以,其他域(DomU)都没有直接访问硬件I/O的权限。但Dom0具备了。并且DomU中的各个虚拟机之间的I/O设备彼此访问时高度隔离的。所以我们可以说DomU中的虚拟机调用CPU,内存,中断都是通过Xen Hypervisor来实现的。调用I/O设备都是通过Dom0来实现的。
二.Xen的工作模式
1..Para Virt:半虚拟化,主要是指对CPU,,I/O设备的半虚拟化。()
![Xen的入门到放弃_第1张图片](http://img.e-com-net.com/image/info8/cdbf9d19e80145f19d3145a7fb3f033b.jpg)
2.Full Virt:完全虚拟化,依赖于CPU支持HVM(硬件辅助虚拟化)[引入QEMU模拟软件。]
通过模拟的方式提供I/O硬件设备的,因此所有的DomU看到的硬件驱动都是通过QEMU模拟出来的,它不是真实存在的。
3.PV on HVM :CPU完全虚拟化,但I/O采用半虚拟化。
有别于完全虚拟化,I/O设备并没有通过QEMU模拟实现,I/O部分仍然采用半虚拟化。只不过半虚拟化有一个要求,因在半虚拟化在各个DOMU当中不是常见的普通硬件,而是Xen虚拟出来硬件,要想使用这些硬件,需要我们自己安装驱动程序,其实Linux操作系统已经将部分驱动整合到内核之中,但是Windwos并没有。所以我们在xen虚拟化场景中安装的是Windows的话。需要安装专门的驱动程序。
三,xen的使用方式
1.xen hypervisor(工具栈:xm/xend)
硬件:——>安装linux发行版 --> 安装xen -->修改grub,配置其内核为xen,而不再使用源linux的内核(linux的内核和initramfs文件被当作xen的模块)-->从新编译linux内核,使得其能够运行于Dom0 --> 重启系统
DomU:在Dom0使用工具(xm/xl)创建虚拟机-->启动虚拟机-->安装操作系统
2.xenserver(工具栈:xl)
一个提供了完备的自我独立管理工具和界面的发行版本。Xen后来被citrix收购了,其被当成一个商业化产品,但后来发现没有竞争力,于是将其开源啦。但是其和VMware 还是没有较好的竞争优势。xenserver部署起来更为简便
3.xcp:xen云平台(xen cloud platform,工具栈:xapi/xe)
找一堆物理机,在这些物理上装一个统一的软件层,让他们可以互相通信,在这个统一的软件层上提供一个管理工具,基于这个管理工具就可以创建虚拟机了这就是所谓的云。
扩展小知识:
以上的三种方式在运维起有些繁琐,红帽又推出了:libvirt:virsh/libvirtd,virtmanager(图形界面)几款管理工具。
关于Xen详情请参考: 连接一:https://zh.wikipedia.org/wiki/Xen
连接二:https://www.xenproject.org/
四.xen云平台工作机制
1.虚拟机的运行
在一堆物理服务器上安装软件使得这些硬件可以互相通信,通过这个软件层提供一个管理工具让用户可以创建,删除虚拟机,以及在虚拟机做任何的配置操作等等。至于创建之后运行在具体哪台服务器上是动态分配的(尤其平台自行调度),那个服务器空闲就在那个服务器上运行。
每一个虚拟机实例,它运行操作系统其实就是依赖一个磁盘映像文件,当一个服务正在运行在一个物理节点的服务,当这个服务宕机之后,这个虚拟机不用关机,实时迁移到另外的一个物理机器上去,并不会中断虚拟机。
2.虚拟机的存储
找一个服务器,里面存放着各种操作系统的映像文件模板(映像文件是分布式存储),当我们创业一个虚拟机的时候,它就会去这个服务器找相应的模板到物理机(node)上去运行。只要你的贷款足够大,可能只要5s就能将文件镜像下载下来。当虚拟机关闭时,临时的虚拟机文件在物理节点会被删除,当下一次启动虚拟机时,还是去存储映像的服务器找相应的文件启动即可。
![Xen的入门到放弃_第3张图片](http://img.e-com-net.com/image/info8/8d32bbfdd658416dbee24fbf33d4e1b3.jpg)
如上图,当我们启动一个虚拟机的时候,我们需要在映像服务器上照当相应的虚拟机文件,将其调度到Xen平台上,读取虚拟机的配置文件后在node2上运行,并在node2上生成一个临时虚拟机文件,当虚拟机被关闭时,node2会删除这个临时文件,当下一次在要启动这个虚拟机的时候,发现这些node(物理机)上并没有相应的虚拟机,这个是还是重复之前的流程,重新选取心的node运行虚拟机。
当虚拟机关闭后,虚拟机的临时文件会被删除,这个时候大家可能会关心数据存放在哪里呢?嘿嘿~莫慌,其实有一个专门的存储卷,也可能是一个专门的存储服务器(我们公司用的是爱数的存储)。
3.虚拟机的迁移
要想实时迁移就得用到共享存储,也就是说映像文件存放在共享存储里面,这样才能实现试试迁移,当然也得用到分布式存储,这个分布式存储的依然是存放映像文件,只不过这个分布式存储存放的是运行中的映像文件,之前的那个是存放映像模板的。
4.Xen的入门到放弃
在redhat在5.x版本把Xen整合的Linux内核中,经过多次测试发现没有问题,从那是开始Linux发型版本就开始提供了2个linux版本内核,一个是正常版本的,一个是用在Xen上的。但是好景不长,2008年,REDHAT公司收购了一家以色列的一家公司,这家公司主要负责开发KVM虚拟机,在redhat5.6版本开始引入KVM,直到5.8版本开始有了KVM和Xen的并驾齐驱。到readhat6.x以后,Xen开始讲Xen淘汰掉,只保留了KVM。