Xen基於ISCSI共享實現Nginx實時遷移

實時遷移簡介
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

發佈了88 篇原創文章 · 獲贊 17 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章