Xen基于ISCSI共享实现Nginx实时迁移
实时迁移简介Xen提供了一种强大的功能,它就是动态迁移法。它能让Domain U在运行期间,以最小的服务中断为代价,迁移到另外的 Xen服务器上。使用Xen动态迁移的主要优点列举如下:1.Xen的动态迁移随同诸如 heartbeat 之类的高可用性解决方案一起使用,可以保证所有关键商业服务不会出现中断。2. 它使我们能够以“治未病”方式来维护寄放虚拟机的物理服务器;可以监视服务器,然
实时迁移简介
Xen提供了一种强大的功能,它就是动态迁移法。它能让Domain U在运行期间,以最小的服务中断为代价,迁移到另外的 Xen服务器上。
使用Xen动态迁移的主要优点列举如下:
- Xen的动态迁移随同诸如 heartbeat 之类的高可用性解决方案一起使用,可以保证所有关键商业服务不会出现中断。
- 它使我们能够以“治未病”方式来维护寄放虚拟机的物理服务器;可以监视服务器,然后通过转移系统来即时解决潜在的和可疑的问题。
- 它使得在多个服务器之间实现负载均衡成为可能,能够更好地利用企业中的所有计算资源,使其利用情况达到最佳状态。需要注意的是, Xen的开源版本目前还不支持在 dom0上感应到故障时自动进行动态迁移的功能。
- 它使得在需要时向系统配置添加计算能力变得更加轻松;可以根据需要更换硬件,而无需中断运行在该硬件上的服务。
实验架构
说明:配置一台服务器作为iSCSI共享存储,输出逻辑卷给两台Xen虚拟化平台使用;实验环境在中两台Xen的Domain 0都是基于VMware中的CentOS6.4_X86_64虚拟机构建,构建成功后,用两种方法实现Domain U上vm1这个微型linux启动,一种是基于Domain 0上的内核,另一种是在Domain U的vm1上微型linux创建GRUB,并复制Domain 0上的内核和虚拟文件系统镜像到vm1的/boot目录下。文中涉及到的每个模块详细配置说明可见此前博文,使用的bincp.sh脚本在上一篇博文中已经给出,这里不再赘述http://blog.csdn.net/celeste7777/article/details/49668713
实现过程
一、同步各节点时间
[root@DQ ~]# ansible xen -m shell -a 'ntpdate 10.33.1.129'
二、构建 iSCSI 共享存储
iSCSI 服务器构建步骤可参见http://blog.csdn.net/celeste7777/article/details/48783385
这里已经安装好软件包,添加一块新硬盘(也可使用有剩余空间的硬盘),在硬盘上创建一个10G的分区,而做一个容量为5G逻辑卷方便以后使用,卷大小可根据实际情况做相应调整
编辑iSCSI的配置文件,这里只做简单设置,省去了用户认证相关步骤,配置完成后即可启动服务
三、客户端节点 Xen 虚拟化环境构建
添加一个虚拟化节点,从Xen4CentO6这个源中下载xen,而后需要修改grub.conf配置文件;配置完成后重新启动系统
[root@DQ ~]# ansible dom0 -m yum -a "name=centos-release-xen"
[root@DQ ~]# ansible dom0 -m yum -a "name=xen"
[root@xen1 ~]#vim /boot/grub/grub.conf
module /initramfs-3.18.21-16.el6.x86_64.img ##在module /vmlinuz-3.18下面添加这行
[root@xen1 ~]# scp /boot/grub/grub.conf 10.33.100.13:/boot/grub/grub.conf
[root@DQ ~]# ansible dom0 -m shell -a "reboot"
重启后验证两个节点已经进入了Xen的 Dom0 环境:
四、iSCSI 客户端的安装和配置
确保两个节点已安装 iSCSI 客户端软件:
在管理机上启动两个xen虚拟化平台的iSCSI客户端;发现target端共享的存储,注册 iscsi 共享设备并登录
[root@DQ ~]# ansible dom0 -m service -a 'name=iscsid state=started'
[root@DQ ~]# ansible dom0 -m shell -a 'iscsiadm -m discovery -t st -p 10.33.100.99'
[root@DQ ~]# ansible dom0 -m shell -a 'iscsiadm -m node -T iqn.2015-11.com.DQ:xen.vm1 -p 10.33.100.99 -l'
查看target端输出的存储:
五、基于Dom0(CentOS6.4 x86_64)制作一个运行于Domain U的微型Linux系统
以下步骤只需要在其中一个节点构建即可;在xen1上对target输出的卷进行分区,sdb1,sdb2,sdb3分别作为稍后要创建的Domain U的/boot分区,/分区和/swap分区
格式化分区并挂载
[root@xen1 ~]# mkfs.ext4 /dev/sdb1
[root@xen1 ~]# mkfs.ext4 /dev/sdb2
[root@xen1 ~]# mkswap /dev/sdb3
[root@xen1 ~]# mkdir /mnt/{boot,sysroot}
[root@xen1 ~]# mount /dev/sdb1 /mnt/boot
[root@xen1 ~]# mount /dev/sdb2 /mnt/sysroot
接下来执行脚本bincp.sh,拷贝需要的二进制程序所依赖的库文件到根目录下,而后在根目录下创建需要的目录,并复制xen-netfront模块文件到Domain U的lib目录
创建/sbin/init运行需要的简单配置文件rcS.conf,以及rcS.conf依赖的执行脚本/etc/rc.d/rc.sysinit
六、构建桥设备
确保两个虚拟化平台节点已安装libvirt包
在管理机上使用命令创建桥设备并验证
[root@DQ ~]# ansible dom0 -m service -a 'name=libvirtd state=started'
[root@DQ ~]# ansible dom0 -m shell -a 'virsh iface-bridge eth0 br0'
七、编辑Domain U启动配置文件
启动xend服务后启动Domain U
成功启动虚拟机,网卡驱动也正常
按 CTRL+] 退出虚拟机,并destroy vm1
八、下面为Domain U添加属于其自身的内核,使用pygrub来引导启动
首先在/dev/sdb上安装GRUB,而后将内核和虚拟文件系统镜像拷贝到/boot,同步后卸载分区
修改Domain U启动配置文件并启动
测试网卡驱动一切正常后按 CTRL+] 退出虚拟机,并destroy vm1
九、测试两个虚拟化平台虚拟机的实时迁移
编辑配置文件使节点支持实时迁移,而后重启xend服务
[root@xen1 ~]# vim /etc/xen/xend-config.sxp
(xend-relocation-server yes)
(xend-relocation-port 8002)
(xend-address '0.0.0.0')
(xend-relocation-address '0.0.0.0')
(xend-relocation-hosts-allow '')
[root@xen1 ~]# scp /etc/xen/xend-config.sxp 10.33.100.13:/etc/xen/xend-config.sxp
xend-config.sxp 100% 11KB 11.1KB/s 00:00
[root@DQ ~]# ansible dom0 -m service -a 'name=xend state=restarted'
启动节点xen1的vm1,执行ping命令以便查看迁移后的效果,而后将其迁移到xen2
连接上xen2的虚拟机查看,可以发现ping命令在持续执行,证明成功迁移,两个xm list分别在迁移之前和之后执行
十、将nginx服务移植到Domain U上做实时迁移测试
用strace命令追踪一下nginx命令执行过程,查看其进行的系统调用和打开的文件,为其创建依赖的运行环境
[root@xen1 ~]# strace nginx
execve("/usr/sbin/nginx", ["nginx"], [/* 34 vars */]) = 0
open("/etc/ld.so.cache", O_RDONLY) = 3
open("/lib64/libcrypt.so.1", O_RDONLY) = 3
open("/lib64/libpcre.so.0", O_RDONLY) = 3
open("/usr/lib64/libssl.so.10", O_RDONLY) = 3
open("/usr/lib64/libcrypto.so.10", O_RDONLY) = 3
##此处省去许多库文件
open("/var/log/nginx/error.log", O_WRONLY|O_CREAT|O_APPEND, 0644) = 3
open("/etc/nginx/nginx.conf", O_RDONLY) = 4
open("/etc/nginx/mime.types", O_RDONLY) = 5
open("/etc/nsswitch.conf", O_RDONLY) = 4
open("/etc/ld.so.cache", O_RDONLY) = 4
open("/lib64/libnss_files.so.2", O_RDONLY) = 4
挂载分区到对应目录,在根目录下创建nginx运行时依赖的目录
执行bincp.sh脚本,将nginx命令执行所需的库文件拷贝到对应目录
在strace nginx命令执行结果中可知nginx启动会许多open,read等读写操,因此需要在系统启动重新挂载/为读写,添加/etc/fstab并修改/etc/rc.d/rc.sysinit添加mount一行;配置完成后卸载分区,启动vm1
成功登陆后启动nginx服务,查看端口监听,访问测试,而后重复上述迁移步骤测试,不间断刷新网页,web服务一直可正常访问,则说明迁移成功
主要参考
http://www.tuicool.com/articles/7NzmEjB
更多推荐
所有评论(0)