分类: LINUX
2009-10-08 15:27:50
通过Multipath实现Xen虚拟机的动态迁移
Author: Jaylin Zhou
Date: 10/08/2009
环境:四台装有Red Hat Enterprise Linux 5 update 4的机器
Live Migration的用途:
负载均衡。
当一个PV出现故障,可以将应用和服务migrate到另一个PV上。
当应用不忙时,可以把应用和服务集中到某几个PV上,其他的PV就可以关掉了。
动态迁移的三条原则:
1. 同样的共享存储:即虚拟块设备必须对两个节点同时可见。
2. 同样的网络环境:两个节点必须有同样的链接地址。
3. 同样的CPU结构:两个节点必须有同样的CPU结构。
因为虚拟机的image文件是虚拟机的主体,数据会经常改变,所以应该将image文件放到Multipath服务器上。虚拟机的配置文件是不经常改变的,而且很小,所以可以放到两个客户端的/etc/xen目录下。而且要保证VBDs在某一个时刻只能被一个node使用。
需要一台安装树的服务器,这里的IP为192.168.0.254,安装树HTTP根下的rhel54目录下。
需要一台Multipath服务器,和两个客户端。
配置Multipath服务器:
两个网卡,这里配置成192.168.0.172和192.168.0.173。
dd一个6G大的文件test.img,作为target device。
接下来是将test.img配置成target device:
# service tgtd start
# tgtadm --lld=iscsi --op=new --mode=target --tid=48 --targetname=jaylin.server
# tgtadm --lld=iscsi --op=new --mode=logicalunit --tid=48 --lun=1 --backing-store =/iscsidata/test.img
# tgtadm --lld=iscsi --op=bind --mode=target --tid=48 --initiator-address=ALL
# tgtadm --lld=iscsi --op=show --mode=target
这样服务器端的配置就完成了。
客户端配置
在两个客户端分别指定一个服务器的网卡和服务器建立一条Multipath的路径。
在其中一台客户端上的配置命令:
# service iscsid start
# iscsiadm --mode=discovery --type=sendtargets --portal=192.168.0.172
# iscsiadm --mode=node --targetname=jaylin.server --portal=192.168.0.172:3260 --login
另一个台的和上面的相似,只是将IP改为服务器的另一个网卡的IP地址192.168.0.173。
现在两台客户端都多了一个设备sdb(如果之前只有一个磁盘的话),将虚拟机建到这个设备上。
为了让两台客户端可以互相Live Migration,需要在两台客户端上对/etc/xen/xend.config.sxp文件进行配置:
(xend-relocation-server yes)
//默认的是注释掉的,而且为no。
(xend-relocation-address '')
//默认的是注释掉的。
(xend-relocation-hosts-allow '')
//默认是注释掉的。
#(xend-relocation-hosts-allow '^localhost$ ^localhost\\.localdomain$')
//默认是不注释的。
保存后重新启动xend服务。
至此,客户端的配置也完成了。
测试
在其中的一台客户端(记作客户端A)上创建虚拟机test_pv:
# virt-install -p -n test_pv -r 256 -f /dev/sdb -f
执行完上面的命令,在客户端A上就开始安装虚拟机了。
将客户端A(192.168.0.191)上的虚拟机的配置文件传给客户端B(192.168.0.190):
# scp /etc/xen/test_lv 192.168.0.190:/etc/xen
然后将正在客户端A上创建的虚拟机动态迁移到客户端B上:
# xm migrate test_lv 192.168.0.190
这时客户端A上正在创建的虚拟机就不存在了,同时客户端B上出现了一个正在创建的虚拟机,而且这个虚拟机的安装进度和刚才客户端A上的那个虚拟机的安装进度是一致的。