虚拟化
 
概念:
 宿主机器(真实机器)
 客户机器(虚拟机,guest os)

优势:
 节约资源:空间,电力。
 方便测试环境的搭建。
 方便服务在线迁移。

虚拟化技术:
 
 半虚拟化:
  客户机器操作系统必须是修改过的,才能使用半虚拟化。
  不需要cpu支持硬件虚拟化技术。

  典型代表: Xen


 全虚拟化:
  必须cpu支持硬件虚拟化。
  客户机器不需要修改内核,原则上可以安装任何的操作系统。
   Intel # cat /proc/cpuinfo | grep vmx
   AMD :  svm

  典型代表: kvm , VMware ESXi


==========================================

使用Xen

# yum install xen kernel-xen -y
# yum install libvirt libvirt-python python-virtinst virt-manager virt-viewer -y

重启,选择进入kernel-xen内核


还需要启动:xend ,libvirtd 服务

概念:
 客户机的名字(domain),与客户机上跑的操作系统里的主机名是两回事。domain名字是用于管理与区别客户机器用的。
  肯定会存在第一个客户机,它是保留的,其实它代表宿主机器,不能对他进行任何管理操作,习惯称为Dom0.
  其他手工建立的客户机,称为DomU

 

例子1:使用图形界面安装客户机

# virt-manager


安装源
nfs:10.1.1.22:/soft/rhel5_source

File: 磁盘镜像的存放路径
 默认:/var/lib/xen/images/node1.img
 可以自己修改一个路径:
  /vmware/xen/images/node1.img

 

例子2:基于命令行安装客户机器

# virt-install -n node2 -r 512 --vcpus=1 -p -l nfs:10.1.1.22:/soft/rhel5_source -x "ks=nfs:10.1.1.22:/soft/rhel5_source/xen-ks.cfg" -f /vmware/xen/images/node2.img -s 15 -b xenbr0

安装过程中,可以把客户机窗口关闭,之后可以通过:
# virt-viewer node2  《--再次查看

 

xen的相关配置文件
 xen主配置目录:/etc/xen/
主配置文件 
# vim /etc/xen/xend-config.sxp

(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


查看桥接网络信息:
# brctl show
bridge name     bridge id               STP enabled   interfaces
virbr0          8000.000000000000       yes
xenbr0          8000.feffffffffff       no            peth0 <--peth0说明桥接到eth0
                                                      vif0.0

 备注: virtbr0 相当于vmware的host only  ,该网络只允许客户机之间通讯,客户机与宿主机通信
  xenbr0 相当于vmware的桥接,允许客户机和宿主机器以外的机器通讯。


删除桥接网络
# ifconfig virbr0 down
# brctl delbr virbr0

# brctl help


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的客户机

  ID为4的客户机 绑定的IP 10.1.1.28

 

命令行管理客户机:

 # 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


直接关客户机
# xm destroy "domain name"
shutdown
reboot

启动客户机:
# xm create node1
或者
# xm create node1 -c  把客户机的画面输出到终端

如果把终端输出结束
 logout
 ctrl + ]

把已经启动的客户机的画面输出到终端,前提:客户机必须是3级别模式启动
# xm console node1


每个客户机都有对应配置文件,存放在/etc/xen/
如: /etc/xen/node1

name = "node1"
uuid = "dda031a3-9bb6-7af9-dff1-bd49ca0a9e2d"
maxmem = 512
memory = 512
vcpus = 1
bootloader = "/usr/bin/pygrub"
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"
vfb = [ "type=vnc,vncunused=1,keymap=en-us" ]
disk = [ "tap:aio:/vmware/xen/images/node1.img,xvda,w" ]
vif = [ "mac=00:16:36:71:fc:f4,bridge=xenbr0,script=vif-bridge" ]

思考:如何手工克隆客户机
 关闭被克隆的客户机
 1、拷贝并且重命名配置文件
 2、修改name和uuid
 3、拷贝镜像文件并且重命名,修改配置文件指定正确的路径
 4、修改网卡的MAC地址
 建议:一般修改了配置文件或者新增了配置,建议重启xend,或者关闭vm管理器图形界面


=================================================
ACTION=="add", SUBSYSTEM=="net",SYSFS{address}=="00:d0:b7:d3:10:a2",KERNEL=="eth*",NAME="eth0"

==================================================================

 

客户机迁移:
  
 迁移:就是把客户机器移动到另外一个宿主机器上运行。 
 
 必须满足以下条件:
  1、原宿主机器和新宿主机器要有相同的体系结构:cpu
  2、必须是同一个子网
  3、所桥接的网络必须一样。例如:被迁移客户机是使用xenbr0,那么新的宿主机器必须也有相同类型xenbr0设备,名字必须一样。
  4、足够的磁盘空间 ,并且磁盘镜像文件的路径必须保持一致。

/vmware/xen/images/


 静态迁移:
  客户机在关闭的情况下进行的。导致服务出现短期的暂停。也能够在迁移之后保持迁移之前的运行状态。暂停所需要的时间依赖于磁盘镜像远程拷贝的时间。原理是什么?存储还原法。
  
  1、保存当前处于运行状态客户机的内存数据到文件
# xm save node4 /vmware/xen/images/node4_mem.save
  2、关闭客户机器 <---在保存内存数据的时候被自动关闭

  3、移动相关配置文件和镜像文件到新的宿主机器上。
# rsync -alvR /etc/xen/node4 10.1.1.100:/
# rsync  -alvR /vmware/xen/images/node4.img 10.1.1.100:/
# rsync -alvR /vmware/xen/images/node4_mem.save 10.1.1.100:/
  4、进行还原内存数据
  在新的宿主机器上进行还原:
# xm restore  /vmware/xen/images/node4_mem.save
  


 动态迁移(在线迁移)
  客户机在保持运行的状态下进行,不会导致或者只会导致非常短期的暂时,察觉不到。
 
  除了上面的基本条件之外,还必须保证被迁移客户机的磁盘镜像必须是存放在共享存储。

 Dom0   Dom0
 |
 DomU  ---在线迁移---->   DomU
 |   |
 --------------------------
  共享存储:磁盘镜像文件 《---独立存储设备

  理由:不需要在迁移过程中,拷贝镜像文件。


  共享存储: iscsi,gnbd,nfs,nas,san

  测试环境:使用nfs作为共享存储。

由于实验环境中的所有客户机当初并没有考虑到在线迁移,都是安装本地存储。所以为了做在线迁移实验,只能模拟共享存储环境。
 把原本的镜像文件通过nfs导出。
/vmware/xen/images *(rw,sync,no_root_squash)

 内存数据是如何同步?

1、需要修改原宿主机器和新宿主机器的配置文件,让起支持在线迁移
# vim /etc/xen/xend-config.sxp
(xend-unix-server yes)
(xend-relocation-server yes)
(xend-relocation-port 8002)
(xend-relocation-address '')
(xend-relocation-hosts-allow '')
#(xend-relocation-hosts-allow '^localhost$ ^localhost\\.localdomain$')

重启xend
# service xend restart

2、需要手工把配置文件迁移过去
# rsync -alvR /etc/xen/node2 10.1.1.100:/

3、在线迁移内存数据。
# xm migrate -l node2 10.1.1.100
 把本机的node2客户机进行在线迁移到10.1.1.100