虚拟化
概念:
宿主机器(真实机器)
客户机器(虚拟机,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/p_w_picpaths/node1.img
可以自己修改一个路径:
/vmware/xen/p_w_picpaths/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/p_w_picpaths/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/p_w_picpaths/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/p_w_picpaths/
静态迁移:
客户机在关闭的情况下进行的。导致服务出现短期的暂停。也能够在迁移之后保持迁移之前的运行状态。暂停所需要的时间依赖于磁盘镜像远程拷贝的时间。原理是什么?存储还原法。
1、保存当前处于运行状态客户机的内存数据到文件
# xm save node4 /vmware/xen/p_w_picpaths/node4_mem.save
2、关闭客户机器 <---在保存内存数据的时候被自动关闭
3、移动相关配置文件和镜像文件到新的宿主机器上。
# rsync -alvR /etc/xen/node4 10.1.1.100:/
# rsync -alvR /vmware/xen/p_w_picpaths/node4.img 10.1.1.100:/
# rsync -alvR /vmware/xen/p_w_picpaths/node4_mem.save 10.1.1.100:/
4、进行还原内存数据
在新的宿主机器上进行还原:
# xm restore /vmware/xen/p_w_picpaths/node4_mem.save
动态迁移(在线迁移)
客户机在保持运行的状态下进行,不会导致或者只会导致非常短期的暂时,察觉不到。
除了上面的基本条件之外,还必须保证被迁移客户机的磁盘镜像必须是存放在共享存储。
Dom0 Dom0
|
DomU ---在线迁移----> DomU
| |
--------------------------
共享存储:磁盘镜像文件 《---独立存储设备
理由:不需要在迁移过程中,拷贝镜像文件。
共享存储: iscsi,gnbd,nfs,nas,san
测试环境:使用nfs作为共享存储。
由于实验环境中的所有客户机当初并没有考虑到在线迁移,都是安装本地存储。所以为了做在线迁移实验,只能模拟共享存储环境。
把原本的镜像文件通过nfs导出。
/vmware/xen/p_w_picpaths *(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