Xen為我們提供了一種強大的功能,它就是動態遷移法。它能讓Domain在運行期間,以最小的服務中斷為代價,將Domain遷移到另外的Xen 服務器上。
使用Xen動態遷移的主要優點列舉如下:
1.Xen的動態遷移隨同諸如heartbeat之類的高可用性解決方案一起使用,能給我們帶來一個“永不拋錨”的系統。最新版本的Enterprise SUSE Linux Server 和Red Hat EnterpriseLinux 也是利用Xen來提供各種高可用性解決方案的。您可以輕而易舉的滿足各種服務的苛刻要求,同時還能保證所有關鍵商業服務不會出現中斷。
2.它使我們能夠以“治未病”方式來維護寄放虛擬機的物理服務器。您可以監視服務器,然后通過轉移系統來即時解決潛在的和可疑的問題。
3.它使得在多個服務器之間實現負載均衡成為可能,使我們能夠更好地利用企業中的所有計算資源,使其利用情況達到最佳狀態。需要注意的是,Xen的開源版本目前還不支持在dom0上感應到故障時自動進行動態遷移的功能。
4.它使得在需要時向系統配置添加計算能力變得更加輕松。
5.您可以根據需要更換硬件,而無需中斷運行在該硬件上的服務。
只知道動態遷移的好處還不夠,現在就實現Xen的動態實時遷移。
實驗介紹:
1.存在一臺iSCSI共享存儲,iSCSI存儲被兩臺Xen虛擬化平臺使用;
2.實驗環境存在兩臺Xen的虛擬化平臺,其中一個虛擬化平臺上存在一個簡單的busybox虛擬機,其映像文件存放在iSCSI共享存儲上;這里我在兩個虛擬化平臺都做了簡單的busybox虛擬機;
3.在Xen虛擬化平臺間實現實時遷移其中一臺busybox虛擬機實例;
實驗架構圖:
實驗實現:
一.構建iSCSI共享存儲
1.iSCSI服務器構建
格式化磁盤: # echo -n -e"n\np\n3\n\n+5G\nt\n3\n8e\nw\n" |fdisk /dev/sda # partx -a /dev/sda # fdisk -l /dev/sda3
Disk /dev/sda3: 5378 MB, 5378310144 bytes 255 heads, 63 sectors/track, 653 cylinders Units = cylinders of 16065 * 512 = 8225280bytes Sector size (logical/physical): 512 bytes /512 bytes I/O size (minimum/optimal): 512 bytes / 512bytes Disk identifier: 0x00000000
安裝iSCSI服務器端軟件:
# yum install -y scsi-target-utils
編輯iSCSI服務器的配置文件:
# vim /etc/tgt/targets.conf #添加如下內容; <target iqn.2015-02.com.stu31:t1> backing-store /dev/sda3 initiator-address 172.16.31.0/24 </target>
配置完成后即可啟動iscsi服務器:
# service tgtd start
查看共享設備:
# tgtadm --lld iscsi -m target -o show Target 1: iqn.2015-02.com.stu31:t1 System information: Driver: iscsi State: ready I_T nexus information: LUN information: LUN: 0 Type: controller SCSI ID: IET 00010000 SCSI SN: beaf10 Size: 0 MB, Block size: 1 Online: Yes Removable media: No Prevent removal: No Readonly: No Backing store type: null Backing store path: None Backing store flags: LUN: 1 Type: disk SCSI ID: IET 00010001 SCSI SN: beaf11 Size: 5378 MB, Block size: 512 Online: Yes Removable media: No Prevent removal: No Readonly: No Backing store type: rdwr Backing store path: /dev/sda3 Backing store flags: Account information: ACL information: 172.16.31.0/24
2.iSCSI客戶端的安裝和配置
兩個Xen虛擬化平臺節點安裝iSCSI客戶端軟件:
#yum install -y iscsi-initiator-utils
啟動iSCSI客戶端:
# service iscsi start # service iscsid start
讓客戶端發現iSCSI服務器共享的存儲:
# iscsiadm -m discovery -t st -p172.16.31.3 172.16.31.3:3260,1 iqn.2015-02.com.stu31:t1
注冊iscsi共享設備,節點登錄,
# iscsiadm -m node -Tiqn.2015-02.com.stu31:t1 -p 172.16.31.3 -l Logging in to [iface: default, target:iqn.2015-02.com.stu31:t1, portal: 172.16.31.3,3260] (multiple) Login to [iface: default, target:iqn.2015-02.com.stu31:t1, portal: 172.16.31.3,3260] successful.
查看iSCSI存儲:
# fdisk -l /dev/sdb
Disk /dev/sdb: 5378 MB, 5378310144 bytes 166 heads, 62 sectors/track, 1020 cylinders Units = cylinders of 10292 * 512 = 5269504bytes Sector size (logical/physical): 512 bytes /512 bytes I/O size (minimum/optimal): 512 bytes / 512bytes Disk identifier: 0x00000000
登錄后就可以格式化磁盤和分區了:
# echo -e "n\np\n1\n\n+2G\nw\n"|fdisk /dev/sdb # partx -a /dev/sdb 查看格式化后的磁盤: # fdisk -l /dev/sdb
Disk /dev/sdb: 5378 MB, 5378310144 bytes 166 heads, 62 sectors/track, 1020 cylinders Units = cylinders of 10292 * 512 = 5269504bytes Sector size (logical/physical): 512 bytes /512 bytes I/O size (minimum/optimal): 512 bytes / 512bytes Disk identifier: 0x8e1d9dd0
Device Boot Start End Blocks Id System /dev/sdb1 1 409 2104683 83 Linux
二.客戶端節點Xen虛擬化環境構建
由于是兩個Xen虛擬化節點,我這里已經有一個現成的ok的Xen虛擬化節點,我們再添加一個虛擬化節點,當作事例提供;
1.配置xen的yum源
# vim /etc/yum.repos.d/xen4.repo [xen4] name=Xen4 For CentOS6 baseurl=ftp://172.16.0.1/pub/Sources/6.x86_64/xen4centos/x86_64/ gpgcheck=0 清空現有yum庫緩存: # yum clean all
2.安裝xen-4.2.5版本的軟件,更新內核版本到3.7.10
# yum install -y xen-4.2.5 xen-libs-4.2.5xen-runtime-4.2.5 kernel-xen
3.配置grub.conf配置文件
# vim /etc/grub.conf default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS (3.7.10-1.el6xen.x86_64) root (hd0,0) kernel /xen.gz dom0_mem=1024M,max:1024M dom0_max_vcpus=1 dom0_vcpus_pin cpufreq=xen module /vmlinuz-3.7.10-1.el6xen.x86_64 ro root=/dev/mapper/vg0-rootrd_NO_LUKS rd_NO_DM.UTF-8 rd_LVM_LV=vg0/swap rd_NO_MDSYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg0/root KEYBOARDTYPE=pc KEYTABLE=us rhgbcrashkernel=auto quiet rhgb quiet module /initramfs-3.7.10-1.el6xen.x86_64.img title CentOS 6 (2.6.32-504.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-504.el6.x86_64 ro root=/dev/mapper/vg0-rootrd_NO_LUKS rd_NO_DM.UTF-8 rd_LVM_LV=vg0/swap rd_NO_MDSYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg0/root KEYBOARDTYPE=pc KEYTABLE=us rhgbcrashkernel=auto quiet rhgb quiet initrd /initramfs-2.6.32-504.el6.x86_64.img
配置完成后重新啟動Linux系統,啟動完成后自動進入了Xen的Dom0環境:
查看內核版本,已經升級到3.7.10:
# uname -r
3.7.10-1.el6xen.x86_64
查看xen的xend服務開機啟動項:
# chkconfig --list xend
xend 0:off 1:off 2:off 3:on 4:on 5:on 6:off
4.啟動xend服務
# service xend start
可以查看一下現在運行的虛擬機:
# xm list Name ID Mem VCPUs State Time(s) Domain-0 0 1024 1 r----- 23.7
查看一下Xen虛擬機的信息:
# xm info host : test2.stu31.com release : 3.7.10-1.el6xen.x86_64 version : #1 SMP Thu Feb 5 12:56:19 CST2015 machine : x86_64 nr_cpus : 1 nr_nodes : 1 cores_per_socket : 1 threads_per_core :1 cpu_mhz : 2272 hw_caps :078bfbff:28100800:00000000:00000140:00000209:00000000:00000001:00000000 virt_caps : total_memory : 2047 free_memory : 998 free_cpus : 0 xen_major : 4 xen_minor : 2 xen_extra : .5-38.el6 xen_caps : xen-3.0-x86_64 xen-3.0-x86_32p xen_scheduler : credit xen_pagesize : 4096 platform_params : virt_start=0xffff800000000000 xen_changeset : unavailable xen_commandline : dom0_mem=1024M,max:1024Mdom0_max_vcpus=1 dom0_vcpus_pin cpufreq=xen cc_compiler : gcc (GCC) 4.4.7 20120313 (Red Hat4.4.7-11) cc_compile_by : mockbuild cc_compile_domain :centos.org cc_compile_date : Tue Jan 6 12:04:11 CST 2015 xend_config_format : 4
iSCSI客戶端配置發現iSCSI服務器的共享存儲依據上面的配置即可(配置略);
三.在Xen虛擬化環境上構建虛擬機busybox
只需要在其中一個節點構建即可;
1.將iSCSI共享存儲作為虛擬機的磁盤存放路徑
格式化共享存儲: # mke2fs -t ext4 /dev/sdb1 創建目錄,將存儲掛載上: # mkdir /scsistore # mount /dev/sdb1 /scsistore/
進入目錄創建虛擬機磁盤設備: # cd /scsistore # dd if=/dev/zero of=./busybox.img bs=1Moflag=direct seek=1023 count=1 查看設備大小,可以發現實際大小才1MB: # ll -h total 1.1M -rw-r--r-- 1 root root 1.0G Feb 6 20:17 busybox.img drwx------ 2 root root 16K Feb 6 20:05 lost+found 格式化虛擬磁盤設備: # mke2fs -t ext4 /scsistore/busybox.img mke2fs 1.41.12 (17-May-2010) /scsistore/busybox.img is not a blockspecial device. Proceed anyway? (y,n) y 信息略...
掛載虛擬磁盤設備,等待后續操作: # mount -o loop /scsistore/busybox.img /mnt
2.編譯安裝busybox
編譯環境需要的開發包組安裝: # yum groupinstall -y Developmenttools # yum install -y ncurses-devel glibc-static
獲取busybox軟件: busybox-1.22.1.tar.bz2
編譯安裝busybox: # tar xf busybox-1.22.1.tar.bz2 # cd busybox-1.22.1 # make menuconfig
配置如下圖所示:
設置完成后進行編譯和安裝:
# make && make install
編譯安裝busybox完成后在這個目錄會生成安裝好的文件_install目錄,我們將_install目錄拷貝到掛載的虛擬磁盤中:
# cp -a _install/* /mnt # cd /mnt # ls bin linuxrc lost+found sbin usr # rm -rf linuxrc # mkdir dev proc sys lib/modules etc/rc.dboot mnt media opt misc -pv
至此,虛擬磁盤就構建完成了。
3.虛擬化平臺節點橋設備構建
兩個節點都需要配置;
1).test1節點:
添加網卡橋設備文件: # cd /etc/sysconfig/network-scripts/ # cp ifcfg-eth0 ifcfg-xenbr0 配置橋接設備: # vim ifcfg-xenbr0 DEVICE="xenbr0" BOOTPROTO="static" NM_CONTROLLED="no" ONBOOT="yes" TYPE="Bridge" IPADDR=172.16.31.1 NETMASK=255.255.0.0 GATEWAY=172.16.0.1
配置網卡設備: # vim ifcfg-eth0 DEVICE="eth0" BOOTPROTO="static" HWADDR="08:00:27:16:D9:AA" NM_CONTROLLED="no" ONBOOT="yes" BRIDGE="xenbr0" TYPE="Ethernet" USERCTL="no"
2).test2節點的配置:
添加網卡橋設備文件: # cd /etc/sysconfig/network-scripts/ # cp ifcfg-eth0 ifcfg-xenbr0 配置橋接設備: # vim ifcfg-xenbr0 DEVICE="xenbr0" BOOTPROTO="static" NM_CONTROLLED="no" ONBOOT="yes" TYPE="Bridge" IPADDR=172.16.31.2 NETMASK=255.255.0.0 GATEWAY=172.16.0.1
配置網卡設備: # vim ifcfg-eth0 DEVICE="eth0" BOOTPROTO="static" HWADDR="08:00:27:6A:9D:57" NM_CONTROLLED="no" ONBOOT="yes" BRIDGE="xenbr0" TYPE="Ethernet" USERCTL="no"
3).配置橋接模式需要將NetworkManager服務關閉:
兩個節點都需要操作 #chkconfig NetworkManager off #service NetworkManager stop
配置完成后重啟網絡服務: #service network restart
4).登錄終端查看橋接狀態:
# ifconfig eth0 Link encap:Ethernet HWaddr08:00:27:16:D9:AA inet6 addr: fe80::a00:27ff:fe16:d9aa/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:37217 errors:0 dropped:7 overruns:0 frame:0 TX packets:4541 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:7641467 (7.2 MiB) TXbytes:773075 (754.9 KiB)
lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:12 errors:0 dropped:0 overruns:0 frame:0 TX packets:12 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1032 (1.0 KiB) TXbytes:1032 (1.0 KiB)
xenbr0 Link encap:Ethernet HWaddr08:00:27:16:D9:AA inet addr:172.16.31.1 Bcast:172.16.255.255 Mask:255.255.0.0 inet6 addr: fe80::a00:27ff:fe16:d9aa/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1211 errors:0 dropped:0 overruns:0 frame:0 TX packets:90 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:116868 (114.1 KiB) TXbytes:15418 (15.0 KiB)
4.構建busybox虛擬機
創建虛擬機配置文件 # vim /etc/xen/busybox kernel ="/boot/vmlinuz-2.6.32-504.el6.x86_64" ramdisk ="/boot/initramfs-2.6.32-504.el6.x86_64.img" name = "busybox" memory = "512" vcpus = 1 disk =['file:/scsistore/busybox.img,xvda,w',] root = "/dev/xvda ro" extra = "selinux=0 init=/bin/sh" vif = ['bridge=xenbr0',] on_crash = "destroy" on_reboot = "destroy" on_shutdown = "destroy"
將配置文件復制一份到節點test2上:
# scp /etc/xen/busybox root@172.16.31.2:/etc/xen/
如果希望busybox這個用戶空間能夠設置網卡,我們還需要加載xen-netfront.ko進入虛擬機磁盤的指定目錄;
我們將Dom0中的xen-netfront.ko模塊復制進虛擬機磁盤的lib/modules/目錄中:
# cd /lib/modules/2.6.32-504.el6.x86_64/kernel/drivers/net/
需要查看模塊依賴關系:
# modinfo xen-netfront.ko filename: xen-netfront.ko alias: xennet alias: xen:vif license: GPL description: Xen virtual network device frontend srcversion: 5C6FC78BC365D9AF8135201 depends: vermagic: 2.6.32-504.el6.x86_64 SMP mod_unloadmodversions
可以發現無依賴關系,我們可以直接使用:
# cp xen-netfront.ko /mnt/lib/modules/
復制完成后卸載虛擬機磁盤:
# umount /mnt
至此,我們的虛擬機busybox就創建完畢!
5.我將卸載scsistore,到另外的Xen虛擬化平臺掛載查看測試:
在test1節點卸載:
[root@test1 xen]# umount /scsistore/
在test2節點上發現iSCSI共享存儲:
[root@test2 ~]# iscsiadm -m discovery -t st-p 172.16.31.3 Starting iscsid: [ OK ] 172.16.31.3:3260,1 iqn.2015-02.com.stu31:t1
注冊iscsi共享設備,節點登錄,
[root@test2 ~]# iscsiadm -m node -Tiqn.2015-02.com.stu31:t1 -p 172.16.31.3 -l [root@test2 ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 5378 MB, 5378310144 bytes 166 heads, 62 sectors/track, 1020 cylinders Units = cylinders of 10292 * 512 = 5269504bytes Sector size (logical/physical): 512 bytes /512 bytes I/O size (minimum/optimal): 512 bytes / 512bytes Disk identifier: 0x8e1d9dd0
Device Boot Start End Blocks Id System /dev/sdb1 1 409 2104683 83 Linux
掛載磁盤后查看磁盤中的內容:
[root@test2 ~]# mkdir /scsistore [root@test2 ~]# mount /dev/sdb1 /scsistore/ [root@test2 ~]# ls /scsistore/ busybox.img lost+found
可以發現文件是共享的,我們的iSCSI共享存儲是正常的。
四.兩個虛擬化平臺的虛擬機實時遷移測試
1.兩個虛擬化節點掛載共享存儲
test1節點: [root@test1 ~]# mount /dev/sdb1 /scsistore/ [root@test1 ~]# ls /scsistore/ busybox.img lost+found test2節點: [root@test2 ~]# mount /dev/sdb1 /scsistore/ [root@test2 ~]# ls /scsistore/ busybox.img lost+found
2.啟動虛擬機busybox
test1節點啟動:
[root@test1 ~]# xm create -c busybox Using config file"/etc/xen/busybox". Started domain busybox (id=13) Initializingcgroup subsys cpuset Initializing cgroup subsys cpu Linux version 2.6.32-504.el6.x86_64(mockbuild@c6b9.bsys.dev.centos.org) (gcc version 4.4.7 20120313 (Red Hat4.4.7-11) (GCC) ) #1 SMP Wed Oct 15 04:27:16 UTC 2014 Command line: root=/dev/xvda ro selinux=0init=/bin/sh #信息略...;加載網卡模塊; / # insmod /lib/modules/xen-netfront.ko Initialising Xen virtual ethernet driver. #設置網卡ip地址; / # ifconfig eth0 172.16.31.4 up / # ifconfig eth0 Link encap:Ethernet HWaddr00:16:3E:49:E8:18 inet addr:172.16.31.4 Bcast:172.16.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:42 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:2942 (2.8 KiB) TXbytes:0 (0.0 B) Interrupt:247
test2節點啟動:
[root@test2 ~]# xm create -c busybox Using config file"/etc/xen/busybox". Started domain busybox (id=2) Initializingcgroup subsys cpuset Initializing cgroup subsys cpu Linux version 2.6.32-504.el6.x86_64(mockbuild@c6b9.bsys.dev.centos.org) (gcc version 4.4.7 20120313 (Red Hat4.4.7-11) (GCC) ) #1 SMP Wed Oct 15 04:27:16 UTC 2014 Command line: root=/dev/xvda ro selinux=0init=/bin/sh #信息略... EXT4-fs (xvda): mounted filesystem withordered data mode. Opts: dracut: Mounted root filesystem /dev/xvda dracut: Switching root /bin/sh: can't access tty; job controlturned off / # ifconfig / # insmod /lib/modules/xen-netfront.ko Initialising Xen virtual ethernet driver. / # ifconfig eth0 172.16.31.5 up / # ifconfig eth0 Link encap:Ethernet HWaddr00:16:3E:41:B0:32 inet addr:172.16.31.5 Bcast:172.16.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:57 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:3412 (3.3 KiB) TXbytes:0 (0.0 B) Interrupt:247
技巧:按CTRL+]退出虛擬機
這里我只是為了測試兩個虛擬化平臺都能運行虛擬機,所以都建立了busybox這個虛擬機,但是我們遷移的時候只需要一臺busybox,我們在test1節點上將busybox遷移到test2節點。
我們先將所有的虛擬機都關閉:
#xm destory busybox
3.配置節點實時遷移
test節點的配置:
[root@test1 ~]# grep xend/etc/xen/xend-config.sxp |grep -v "#" (xend-http-server yes) (xend-unix-server yes) (xend-relocation-server yes) (xend-relocation-port 8002) (xend-relocation-address '172.16.31.1') (xend-relocation-hosts-allow '')
test2節點的配置:
[root@test2 ~]# grep xend/etc/xen/xend-config.sxp |grep -v '#' (xend-http-server yes) (xend-unix-server yes) (xend-relocation-server yes) (xend-relocation-port 8002) (xend-relocation-address '172.16.31.2') (xend-relocation-hosts-allow '')
兩個虛擬化節點重啟xend服務:
# service xend restart Stopping xend daemon: [ OK ] Starting xend daemon: [ OK ]
查看監聽端口:
# ss -tunl |grep 8002 tcp LISTEN 0 5 172.16.31.2:8002 *:*
啟動節點test1的busybox:
#xm create -c busybox #信息略... #設置IP地址,以便一會兒遷移后查看有依據; / # insmod /lib/modules/xen-netfront.ko Initialising Xen virtual ethernet driver. / # ifconfig eth0 172.16.31.4 up / # ifconfig eth0 Link encap:Ethernet HWaddr00:16:3E:28:BB:F6 inet addr:172.16.31.4 Bcast:172.16.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:921 errors:0 dropped:0 overruns:0 frame:0 TX packets:2 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:78367 (76.5 KiB) TXbytes:84 (84.0 B) Interrupt:247
將test1節點的虛擬機遷移到test2節點:
[root@test1 ~]# xm migrate -l busybox 172.16.31.2
遷移完成后查看test1節點的虛擬機列表:
[root@test1 ~]# xm list Name ID Mem VCPUs State Time(s) Domain-0 0 1023 1 r----- 710.1
遷移完成后查看test2節點的虛擬機:
[root@test2 network-scripts]# xm list Name ID Mem VCPUs State Time(s) Domain-0 0 1023 1 r----- 142.8 [root@test2 network-scripts]# xm list Name ID Mem VCPUs State Time(s) Domain-0 0 1023 1 r----- 147.4 busybox 3 512 0 --p--- 0.0
連接上test2的虛擬機查看:
[root@test2 ~]# xm console busybox Using NULL legacy PIC Changing capacity of (202, 0) to 2097152sectors Changing capacity of (202, 0) to 2097152sectors
/ # ifconfig eth0 Link encap:Ethernet HWaddr00:16:3E:1D:38:69 inet addr:172.16.31.4 Bcast:172.16.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:350 errors:0 dropped:0 overruns:0 frame:0 TX packets:2 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:27966 (27.3 KiB) TXbytes:84 (84.0 B) Interrupt:247
可以發現遷移到test2節點上的虛擬機的地址是test1上的;證明我們的遷移完成了。
至此,我們的Xen虛擬化平臺的實時遷移實驗就完成了。
原文鏈接:http://sohudrgon.blog.51cto.com/3088108/1612786