1,模拟:Emulationhtml
Qemu,PearPC,Bochspython
2,彻底虚拟化:Full Virtualization,Native Virtualizationlinux
HVM:hardware virtualization machinec++
vmware workstation,virtualBox,Parallels desktop(mac),KVM,xendocker
3,半虚拟化:pava-virtualizationshell
必须修改guestOS的内核,让它知道本身不是容许在物理机器删上,而是容许在虚拟环境中。centos
使用hypercall调用物理机的cpuapi
xen,UML(user-mode Linux)微信
4,容器虚拟化网络
docker,openvz,LXC(linux container),libcontainer,virtuozzo,linux V Server
5,库级别虚拟化
wine
剑桥大学开发的开源vmm(virtual machine monitor),虚拟机监视器。
xen是安装在物理机器上的。
xen只控制物理机器的cpu和内存,I/O控制,交给了在它上面安装的第一个虚拟内核(叫dom0)。处理dom0的虚拟机叫:domU,在domU上的I/O操做,都是直接发给dom0,dom0再去操做硬件控制器。domU上的I/O接口叫frontend,dom0上的I/O叫backend。
xen hypervisor
分配cpu,memory,interrupt
dom0:
特权域,I/O分配
网络设备
net-front(guestOS),net-backend(dom0)
块设备
block-front(guestOS),block-backend(dom0)
linux kernel:
2.6.37开始支持容许dom0
3.0对关键特性进行了优化
提供管理domu的工具:
实现对虚拟机的添加,启动,快照,中止,删除等相似在,virtualBox上的操做。
domU:非特权域,根据虚拟化方式,有多种类型
PV:半虚拟化
HVM:硬件提供虚拟化支持,有的cpu提供虚拟化支持
PV ON HVM
不依赖于CPU的HVM特性,但要求guestOS的内核要作出修改,以达到知晓本身不是容许在物理机上。
运行于domu上的os:linux(2.6.24+),Netbsd,Freebsd,openSolaris
依赖于Intel VT或AMD的AMD-V,还有依赖Qemu来模拟I/O设备
运行于domu上的os:几乎全部支持x86平台的
cpu为HVM模式运行,I/O设备为PV模式运行。
运行于domu上的os:只要OS能驱动PV接口类型的IO设备(net-front,block-front)
下图是xm和xl的对比:
xe/xapi:提供了多xen管理的api,所以多用于cloud环境。
上面的cloud环境:
xenstore:为各个domainU提供的共享信息存储空间,有层级结构的名称空间,位于Dom0
背景:虚拟化技术有xen,kvm,qemu等,每一个虚拟化铲平都有本身的管理工具,学习这么多的管理工具太费劲了,全部就出现了一个救世主,virsh。它能够管理下面的3个虚拟化产品,只用一套命令便可。
virsh/libvirt:用python开发的图像化管理工具,相似VMware的图形界面,对应用户很友好。可是它必须启动libvirtd守护进程,也挺消耗资源。
RHCL 5.7:默认的虚拟化技术是xen
RHCL 6+:仅支持kvm(红帽收购了以色列的kvm公司)
Dom0上没法安装centos6+
DomU上能够安装centos6+
1,编译3.0以上版本的内核,启动对Dom0的支持
2,编译xen程序
可使用制做好的程序包项目:
1,去清华的yum源上找到xen的rpm下载网址,本身作一个repo文件(文件名为xen4.repo),指向那个地址便可
xen4.repo内容:注意url不要写错。
[xen4centos] name=xen4 for centos 6 baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/6.10/virt/x86_64/xen-410/ gpgcheck=0
2,yum install xen
因为要更新内核,因此有点慢。成功后,/boot目录下多了下面的文件。
# ls /boot/xen* /boot/xen-4.10.4.36.g6cb1cb9c63-1.el6.config /boot/xen-4.10.4.36.g6cb1cb9c63-1.el6.gz /boot/xen.gz
3,修改/etc/grub.conf文件
修改前:
kernel /vmlinuz-4.9.206-36.el6.x86_64 ro root=/dev/mapper/vg_c610-lv_root rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us LANG=\ en_US.UTF-8 rd_NO_MD rd_LVM_LV=vg_c610/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg_c610/lv_root rd_NO_DM rh\ gb quiet initrd /initramfs-4.9.206-36.el6.x86_64.img
修改后:
kernel /xen.gz dom0_mem=1024M cpufrep=xen dom0_max_vcpus=2 dom0_vcpus_pin module /vmlinuz-4.9.206-36.el6.x86_64 ro root=/dev/mapper/vg_c610-lv_root rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us LANG=\ en_US.UTF-8 rd_NO_MD rd_LVM_LV=vg_c610/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg_c610/lv_root rd_NO_DM rh\ gb quiet module /initramfs-4.9.206-36.el6.x86_64.img
修改内容:
加了一行:kernel /xen.gz dom0_mem=1024M cpufrep=xen dom0_max_vcpus=2 dom0_vcpus_pin
宣告说kernel已经不是centos了,而是我xen了,原来的kernel降级成module了。
xen的命令行参数说明的官方文档
把原来的2行,其中的第一行的kernel替换成module;第二行的initrd替换成module。
修改后的/etc/grub.conf文件
# grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/mapper/vg_c610-lv_root # initrd /initrd-[generic-]version.img #boot=/dev/sda default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS (4.9.206-36.el6.x86_64) root (hd0,0) kernel /xen.gz dom0_mem=1024M cpufrep=xen dom0_max_vcpus=2 dom0_vcpus_pin module /vmlinuz-4.9.206-36.el6.x86_64 ro root=/dev/mapper/vg_c610-lv_root rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us LANG=\ en_US.UTF-8 rd_NO_MD rd_LVM_LV=vg_c610/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg_c610/lv_root rd_NO_DM rh\ gb quiet module /initramfs-4.9.206-36.el6.x86_64.img title CentOS 6 (2.6.32-754.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-754.el6.x86_64 ro root=/dev/mapper/vg_c610-lv_root rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us LANG=\ en_US.UTF-8 rd_NO_MD rd_LVM_LV=vg_c610/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg_c610/lv_root rd_NO_DM rh\ gb quiet initrd /initramfs-2.6.32-754.el6.x86_64.img
4,重启系统
5,确认结果
# uname -r 4.9.206-36.el6.x86_64 # xl list Name ID Mem VCPUs State Time(s) Domain-0 0 1024 2 r----- 28.2
发现内核升级了,而且在dom0上安装了centos,分配的内存是1024M,分配的cpu是2个。
正确的作法是在物理机器上安装xen,而后在xen上安装dom0和其余domu。