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






linux虚拟化之xen,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。