linux虚拟化之xen
--
--参考官档
# ls /share/soft/pdf/redhat_5_zh/Red_Hat_Enterprise_Linux-5-Virtualization-zh-CN.pdf
xen kvm vmare esx openVZ Oracle VM VirtualBox
vsphere
企业级应用:非本地的
分两部分:一,host虚拟机
二,management端
最早的虚拟化: 分时操作系统 CPU 同一时间点只能一个任务 运行多个进程或线程就是一种虚拟化
cpu运行一个进程,中断,再运行另一个,因为CPU运行速度快,所以用户感觉不到这种切换,这种切换叫上下文切换
常见的虚拟化场景: 游戏模拟器:如使用X86的CPU模拟PSP或街机的CPU,使用X86的硬件模拟PSP或街机的硬件
vmware workstation的虚拟结构图:
OS1OS2
vmware workstation
OS
硬件:CPU,mem,hd等
--上面的结构:OS1和OS2的操作,需要通过vmware来转化为进程对OS的请求,再由OS转化为对硬件的请求;
如果这里OS里跑的其它程序如果占用和资源多,那么必然会造成vmware的资源占用少,性能就会不太好,因为vmware的进程和其它进程是同级的
--如何把性能提高:跳过OS这一层
或者虚拟化和os同级
或者硬件本身支持虚拟化
所以就发展成下面这几种虚拟情况:
半虚拟化:
硬件完全虚拟化:
软件完全虚拟化:
半虚拟化:
客户机器操作系统必须是修改过的,才能使用半虚拟化。
不需要cpu支持硬件虚拟化技术。
典型代表: Xen
citrix: xen
xen半虚拟化结构图:
domain0 domain1 domain2 ...
xen
硬件:CPU,MEM,HD等
--上面的结构: xend取代了OS,domain0是用来控制xen的一个控制器(跑hypervisor),domain1,domain2...就是虚拟的操作系统;这样转化的效率就会高很多
但要注意的是:上层的domain1,domain2等的内核接口必须要与xen对应才可以;
xen要使用支持xen的专有内核才可以,原有的内核不行,原有的内核是直接与硬件进行通讯的;
开源的linux,freebsd都可以修改,但windows却不行;
xen已经加入到linux内核里去了,从2.6.18之后的内核就有xen
citrix把xen买下来了,所以redhat不再继续开发xen,就买了另一家kvm;并且citrix是微软的白金级合作伙伴,它可以要求MS去修改源代码支持xen,所以只有citrix的xen支持windows
Hypervisor——一种运行在基础物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件。也可叫做VMM( virtual machine monitor ),即虚拟机监视器。
Hypervisors是一种在虚拟环境中的“元”操作系统。他们可以访问服务器上包括磁盘和内存在内的所有物理设备。
Hypervisors不但协调着这些硬件资源的访问,也同时在各个虚拟机之间施加防护。
当服务器启动并执行Hypervisor时,它会加载所有虚拟机客户端的操作系统同时会分配给每一台虚拟机适量的内存,CPU,网络和磁盘。
全虚拟化:
必须cpu支持硬件虚拟化。
客户机器不需要修改内核,原则上可以安装任何的操作系统。
Intel # cat /proc/cpuinfo | grep vmx
AMD : svm
典型代表: kvm , VMware ESXi
vmware 完全虚拟化结构图:
OS1OS2
vmware os
硬件:CPU,MEM,HD等
要求操作系统厂商按照它的虚拟化标准和规则编写
======================================
安装支持包
rhel5.4版本使用yum groupinstall "Virtualization" -y
rhel5.5版本使用yum groupinstall "xen" -y
yum install xen-devel -y
或者
yum install xen xen-devel kernel-xen virt-manager libvirt libvirt-python python-virtinst virt-view -y
安装完后,在/boot/grub/grub.conf里会有xen的引导启动项
# reboot --重启系统选择xen内核进入系统
# uname -r
2.6.18-164.el5xen--重启后内核有xen标志
1,建立安装源
# vim /etc/exports
/share/yum *(ro)--我的rhel5.4的光盘路径
# /etc/init.d/nfs restart
# /etc/init.d/portmap restart
# showmount -e 192.168.1.35
Export list for 192.168.1.35:
/share/yum *
2,使用图形来安装xen虚拟机
# /etc/init.d/xend start
# /etc/init.d/libvirtd start--网络服务
ifconfig 查看
会有
eth0
peth0
vif0.0
virbr0
xenbr0
1,使用图形的安装方式来安装一个xen的linux虚拟机
点左上角的applicaions--system tools--virtual machine manager
或者使用# virt-manager 命令去调用这个图形配置界面
看到一个localhost下有一个domain0,是默认的域
右键点localhost--new--
名字:xen1--随便
虚拟化类型:半虚拟化--如果支持vmx或svm的话,这里都可以选,不支持的话只能选择半虚拟化
安装方式:网络安装
安装源:nfs:192.168.1.35:/share/yum
存储:file(disk image) 路径为默认的:/var/lib/xen/images/xen1.img
大小我这里为:10000M
网络:选择共享物理设备(peth0)
内存:内存大小512M,CPU2个(真实机双核,那么这里最大为2)
安装过程中,可以把客户机窗口关闭,之后可以通过:
# virt-viewer xen1 《--再次查看
2,
# virt-install --prompt
--使用问答模式去安装
# virt-install --prompt
Would you like a fully virtualized guest (yes or no)? This will allow you to run unmodified operating systems. no
What is the name of your virtual machine? xen2
How much RAM should be allocated (in megabytes)? 512
What would you like to use as the disk (file path)? /var/lib/xen/images/xen2.img
How large would you like the disk (/var/lib/xen/images/xen2.img) to be (in gigabytes)? 12
what is the install URL ? nfs:192.168.1.35:/share/yum
3,在ssh文本模式下,非问答模式,直接定义好参数
# virt-install -p -n "xen3" -f /var/lib/xen/images/xen3.img -s 10 -r 800 --vcpus=2 -l nfs:192.168.1.35:/share/yum -x "ks=nfs:192.168.1.35:/share/yum/ks/ks.cfg" --os-type="linux" --os-variant=‘rhel5‘
客户机的名字(domain),与客户机上跑的操作系统里的主机名是两回事。domain名字是用于管理与区别客户机器用的。
肯定会存在第一个客户机,它是保留的,其实它代表宿主机器,不能对他进行任何管理操作,习惯称为Dom0.
其他手工建立的客户机,称为DomU
命令行管理客户机:
# xm --help
# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 1500 2 r----- 3843.0
node1 4 511 1 -b---- 23.5
^客户机domain
# xm list -l
# /etc/init.d/xendomains stop--会保存当前运行的虚拟机,SAVE内存数据到硬盘上。
# ls /var/lib/xen/save--大小和内存大小一致
# /etc/init.d/xendomains start
这里保存只是当前的一个状态,不算是快照
xen如果要做快照,可以用两种方法:
1,对保存的这个状态文件,用dd命令进行拷贝
2,用lvm快照功能对这个状态文件进行快照
直接关客户机
# xm destroy "domain name"
# xm shutdown xen1
# xm reboot xen1
启动客户机:
# xm create xen1
或者
# xm create xen1 -c 把客户机的画面输出到终端
如果把终端输出结束
logout
ctrl + ] --安全性考虑,退出后要登出终端,因为以前登录输过密码,再登录的话不需要密码。
把已经启动的客户机的画面输出到终端,前提:客户机必须是3级别模式启动
# xm console xen1
用exit只是退到虚拟机的登录界面
用ctrl+] 是退到真实机的shell环境
再用xm console xen1,会卡在那 直接回车就可以了
如果你是在虚拟机输入密码登录的情况ctrl+]退出的话,则再用xm console xen1加回车就不需要密码了
如果你在虚拟机登录界面(还没输密码登录)的情况ctrl+]退出的话,则再用xm console xen1加回车也只会到虚拟机的登录界面
查看桥接网络信息:
# brctl show
bridge name bridge id STP enabled interfaces
virbr0 8000.000000000000 yes
xenbr0 8000.feffffffffff no peth0 <--peth0说明桥接到eth0
vif0.0
备注: virbr0 相当于vmware的host only ,该网络只允许客户机之间通讯,客户机与宿主机通信
xenbr0 相当于vmware的桥接,允许客户机和宿主机器以外的机器通讯。
xen网卡设备的说明:
假设原有的物理网卡是eth0,当启用了xend和libvirtd之后:
原有物理网卡eth0被改名为peth0
新建立一个虚拟网卡设备叫eth0
virbr0 ,默认的虚拟网络,相当于host only,由libvirtd服务生成
配置文件/etc/libvirt/qemu/networks/default.xml
xenbr0 ,由xend和libvirtd功能生成的真正意义的桥接网络,默认是桥接物理网卡eth0
vif0.0,vif0.1 分别对应运行时候客户机的ID号,是客户机里的网卡在宿主主机器上的抽象。例如vif4.0 代表运行ID为4的客户机的第一块网卡
xen的相关配置文件
xen主配置目录:/etc/xen/
主配置文件
# vim /etc/xen/xend-config.sxp
91 (network-script ‘network-bridge netdev=eth0‘) 《--xenbr0是桥接到物理网卡eth0
注意‘‘号
修改了之后:
# service libvirtd restart
# service network restart
如果还不行:
/etc/xen/scripts/network-bridge stop
/etc/xen/scripts/network-bridge netdev=eth0 start
每个客户机都有对应的配置文件,在/etc/xen/下
# vim /etc/xen/xen3
name = "xen3"
uuid = "79db1255-2d42-a140-4cdb-db854472c9eb"
maxmem = 512
memory = 512
vcpus = 2
bootloader = "/usr/bin/pygrub"
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"
vfb = [ "type=vnc,vncunused=1,keymap=en-us" ]
disk = [ "tap:aio:/var/lib/xen/images/xen3.img,xvda,w" ]
vif = [ "mac=00:16:36:14:59:f9,bridge=virbr1,script=vif-bridge" ]
如何手工克隆客户机?
关闭被克隆的客户机xm shutdown xen3 想看shutdown的状态 xm console xen3
1、拷贝磁盘镜像文件并且重命名cp /var/lib/xen/images/xen3.img /var/lib/xen/images/xen4.img
2、拷贝并且重命名配置文件cp /etc/xen/xen3 /etc/xen/xen4
3、修改name和uuid,新的磁盘地址
4、修改网卡的MAC地址,前三位不要乱改,可能会造成启不来
建议:一般修改了配置文件或者新增了配置,建议重启xend,或者关闭vm管理器图形界面
5,xm create xen4 -c
如何对虚拟机增加设备?
1,需要关闭虚拟机,reboot不行(reboot不会重读配置文件)
2,dd if=/dev/zero of=/var/lib/xen/images/xen4-1.img bs=512k count=1 seek=4000000--2T的文件,但现在只占用512k,ext3最大只能支持2T大小的文件
# ll -h /var/lib/xen/images/
-rwxr-xr-x 1 root root 10G Jan 13 15:52 xen3.img
-rw-r--r-- 1 root root 2.0T Jan 13 16:14 xen4-1.img
-rwxr-xr-x 1 root root 10G Jan 13 16:11 xen4.img
# du -sh *
3.3G xen3.img
528K xen4-1.img
3.1G xen4.img
3,vim /etc/xen/node2
disk = [ "tap:aio:/vmware/xen/images/xen4.img,xvda,w","tap:aio:/vmware/xen/images/xen4-1.img,xvdb,w" ]--加后面一半(这里有个BUG,如果你加的xvdb1,也可以行。但没有xvdb,就有xvdb1理论上不对.它把它不是当分区,而是当磁盘了)
vif = [ "mac=00:16:36:71:fc:f4,bridge=xenbr0,script=vif-bridge","mac=00:16:36:71:33:22,bridge=xenbr0,script=vif-bridge" ]--加后面一半,MAC地址随便改下,不改前三位
4,xm create xen4 -c
如何自己建立虚拟网络?
/etc/libvirt/qemu/networks/default.xml
1,cp /etc/libvirt/qemu/networks/default.xml /etc/libvirt/qemu/networks/virbr1.xml
2,vim /etc/libvirt/qemu/networks/virbr1.xml
改name,uuid,网络IP
3,cd /etc/libvirt/qemu/networks/autostart/
ln -s ../virbr1.xml--做一个本地链接,自动启动
4, service libvirtd restart
5, ifconfig 查看
xen 克隆
1,关闭xen4 xm shutdown xen4
2,
virt-clone -o xen4 -n xen5 -f /var/lib/xen/images/xen5.img -d
克隆vm1命名为vm5,新生成的vm5的磁盘像文件是/var/lib/xen/images/xen5.img,-d显示过程
如果xen4在上面加了一个盘的话,需要两个-f参数
# virt-clone -o xen4 -n xen5 -f /var/lib/xen/images/xen5.img -f /var/lib/xen/images/xen5-1.img -d
客户机迁移:
迁移:就是把客户机器移动到另外一个宿主机器上运行。
必须满足以下条件:
1、原宿主机器和新宿主机器要有相同的体系结构:cpu
2、必须是同一个子网
3、所桥接的网络必须一样。例如:被迁移客户机是使用xenbr0,那么新的宿主机器必须也有相同类型xenbr0设备,名字必须一样。
4、足够的磁盘空间 ,并且磁盘镜像文件的路径必须保持一致。
冷迁移
1、保存当前处于运行状态客户机的内存数据到文件
# xm save xen3 /var/lib/xen/save/xen3_mem.save
--这一步与上面的/etc/init.d/xendomains stop类似,但停xendomains服务是把所有的运行的虚拟机状态保存,如果只迁移一个,则使用xm save ...
2、关闭客户机器 --在保存内存数据的时候,也就是执行上一步的时候会被自动关闭
3、拷贝或同步相关配置文件和镜像文件到新的宿主机器上。
# rsync -alvR /etc/xen/xen3 192.168.1.99:/
# rsync -alvR /var/lib/xen/images/xen3.img 192.168.1.99:/
# rsync -alvR /var/lib/xen/save/xen3_mem.save 192.168.1.99:/
4、在新的宿主机器上进行还原:
# xm restore /var/lib/xen/save/xen3_mem.save
热迁移(在线迁移)
客户机在保持运行的状态下进行,不会导致或者只会导致非常短期的暂时,察觉不到。
除了上面的基本条件之外,还必须保证被迁移客户机的磁盘镜像必须是存放在共享存储。
Dom0Dom0
|
DomU ---在线迁移----> DomU
||
--------------------------
共享存储:磁盘镜像文件 《---独立存储设备
理由:不需要在迁移过程中,拷贝镜像文件。
共享存储: iscsi,gnbd,nfs,nas,san
测试环境:使用nfs作为共享存储。
由于实验环境中的所有客户机当初并没有考虑到在线迁移,都是安装本地存储。所以为了做在线迁移实验,只能模拟共享存储环境。
把原本的镜像文件通过nfs导出。
/var/lib/xen/images/ *(rw,sync,no_root_squash)
1、需要修改原宿主机器和新宿主机器的配置文件,让它支持在线迁移
# vim /etc/xen/xend-config.sxp
18 (xend-unix-server yes)
21 (xend-relocation-server yes)
33 (xend-relocation-port 8002)
45 (xend-relocation-address ‘‘)
58 (xend-relocation-hosts-allow ‘‘)
59 #(xend-relocation-hosts-allow ‘^localhost$ ^localhost\\.localdomain$‘)
--上面59行是注释,其它是打开
重启xend
# service xend restart
2、需要手工把配置文件迁移过去
# rsync -alvR /etc/xen/xen3 192.168.1.178:/
3,在客户端178挂载NFS
# mount 192.168.1.35:/var/lib/xen/images/ /var/lib/xen/images/
4,在客户端178启动xen3
xm create xen3
5、在线迁移内存数据。
# xm migrate -l xen3 192.168.1.178
把本机的xen3客户机进行在线迁移到192.168.1.178
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。