Xen虛擬化平臺安裝及實時遷移

前言

Xen是英國劍橋大學計算機實驗室開發的一個虛擬化開源項目,Xen可以在一套物理硬件上安全的執行多個虛擬機,它和操作平臺結合的極爲密切,佔用的資源極少。以高性能、佔用資源少著稱,贏得了IBM、AMD、HP、Redhat和Novell等衆多世界級軟硬件廠商的高度認可和大力支持,已被國內外衆多企事業用戶用來搭建高性能的虛擬化平臺。

Xen虛擬化類型

Xen對虛擬機的虛擬化分爲兩大類,半虛擬化和完全虛擬化。

半虛擬化

半虛擬化(Paravirtualization)有些資料稱爲“超虛擬化”,簡稱爲PV,是Xen主導的虛擬化技術。這種技術允許虛擬機操作系統感知到自己運行在Xen Hypervisor上而不是直接運行在硬件上,同時也可以識別出其他運行在相同環境中的客戶虛擬機。

完全虛擬化

完全虛擬化(Hardware Virtual Machine)又稱“硬件虛擬化”,簡稱HVM,是指運行在虛擬環境上的虛擬機在運行過程中始終感覺自己是直接運行在硬件之上的,並且感知不到在相同硬件環境下運行着其他虛擬機的虛擬技術。

基本組件

 Xen包含三大部分:

Hypervisor:直接運行於硬件之上,是Xen客戶操作系統與硬件資源之間的訪問接口。通過將客戶操作系統與硬件進行分類,Xen管理系統可以允許客戶操作系統安全,獨立的運行在相同硬件環境之上。

Domain 0:運行在Xen管理程序之上,具有直接訪問硬件和管理其他客戶操作系統的特權的客戶操作系統。

DomainU:運行在Xen管理程序之上的普通客戶操作系統或業務操作系統,不能直接訪問硬件資源(如:內存,硬盤等),但可以獨立並行的存在多個。

詳述見:http://my.oschina.net/davehe/blog/94039

Xen及虛擬機安裝

安裝Xen(CentOS6.6)

[root@node2 ~]# cd xen/
[root@node2 xen]# ls
kernel-xen-3.7.4-1.el6xen.x86_64.rpm           xen-hypervisor-4.2.4-30.el6.centos.alt.x86_64.rpm
kernel-xen-firmware-3.7.4-1.el6xen.x86_64.rpm  xen-libs-4.2.4-30.el6.centos.alt.x86_64.rpm
kernel-xen-release-6-4.noarch.rpm              xen-licenses-4.2.4-30.el6.centos.alt.x86_64.rpm
xen-4.2.4-30.el6.centos.alt.x86_64.rpm         xen-runtime-4.2.4-30.el6.centos.alt.x86_64.rpm
[root@node2 xen]# yum install *.rpm -y

修改grub文件

[root@node2 ~]# vim /etc/grub.conf

default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (3.7.4-1.el6xen.x86_64)
        root (hd0,0)
        kernel /xen.gz dom0_mem=512M cpufreq=xen dom0_max_vcpus=2 dom0_vcpus_pin
        module /vmlinuz-3.7.4-1.el6xen.x86_64 ro root=/dev/mapper/vg_firewallserver-lv_
root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 rd_LVM_LV=vg_firewa
llserver/lv_root crashkernel=auto rd_LVM_LV=vg_firewallserver/lv_swap  KEYBOARDTYPE=pc 
KEYTABLE=us rd_NO_DM rhgb quiet
        module /initramfs-3.7.4-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/vg_firewallserver-lv_
root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 rd_LVM_LV=vg_firewa
llserver/lv_root crashkernel=auto rd_LVM_LV=vg_firewallserver/lv_swap  KEYBOARDTYPE=pc KE
YTABLE=us rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-504.el6.x86_64.img

重啓系統,查看內核參數

[root@node2 ~]# uname -r
3.7.4-1.el6xen.x86_64

啓動服務

[root@node2 ~]# service xend start
Starting xend daemon:                                      [  OK  ]
[root@node2 ~]# xm list
WARNING: xend/xm is deprecated.
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0   512     2     r-----    218.7

創建橋設備

由於虛擬機運行在宿主機之上,虛擬機運行的網絡環境需要由宿主機提供,需要先配置好網橋,以便虛擬機與宿主機之間通信

#關閉NetworkManager
[root@node2 ~]# service NetworkManager stop
[root@node2 ~]# chkconfig NetworkManager off
[root@node2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0

DEVICE=br0
TYPE=Bridge
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
IPADDR=172.16.10.124
PREFIX=16
GATEWAY=172.16.0.1
DNS1=172.16.0.1

[root@node2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
BRIDGE=br0

[root@node2 ~]# service network restart
[root@node2 ~]# brctl stp br0 on          #避免環路

準備引導文件

[root@node2 ~]# mount /dev/cdrom1 /media/cdrom/
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@node2 ~]# cp /media/cdrom/isolinux/{vmlinuz,initrd.img} /tmp
[root@node2 ~]# ln -sv /media/cdrom/ /var/www/html/centos6.6
`/var/www/html/centos6.6' -> `/media/cdrom/'
[root@node2 ~]# service httpd start
Starting httpd:                                            [  OK  ]

創建磁盤映像文件

[root@node2 ~]# mkdir -pv /xen/vm1
[root@node2 ~]# dd if=/dev/zero of=/xen/vm1/centos6.6.img oflag=direct bs=1M seek=102399 count=1
[root@node2 ~]# ll /xen/vm1/ -h
total 1.0M
-rw-r--r-- 1 root root 100G Jul 16 17:53 centos6.6.img

定義domain

[root@node2 ~]# vim /etc/xen/centos6.6

kernel = "/tmp/vmlinuz"
ramdisk = "/tmp/initrd.img"
name = "centos6.6"
vcpus = 1
memory = 512
vif = ["bridge=br0"]
disk = ['file:/xen/vm1/centos6.6.img,xvda,w']
on_crash = "destroy"
on_reboot = "destroy"

啓動虛擬機

[root@node2 ~]# xm create -c centos6.6

啓動虛擬機即可進入安裝界面,和VMware安裝類似,簡單截取一下就不詳細記錄了

配置IP,可手動配置

wKioL1WnkD3QbMSRAADQKnDaHU8265.jpg

獲取IP後,指定安裝源

wKiom1WnjsfSHFOEAADebvPfes0961.jpg

初始化磁盤

wKiom1Wnj37CC9v5AAFSg9AtJgM864.jpg

設置root密碼

wKiom1Wnj7WTWJ-wAACz4u0winY121.jpg

使用全部磁盤

wKioL1Wnka3wauDYAAFhclazPls580.jpg

開始安裝

wKiom1Wnj-yAICvDAADBUPinUCY363.jpg

安裝結束,重啓虛擬機

wKioL1WnkfOAXaSkAAEHpI-qE_E102.jpg

以爲定義domain時,我們設定on_reboot = "destroy",所以虛擬機會關機,接下來需要修改domain配置

[root@node2 ~]# vim /etc/xen/centos6.6 

#kernel = "/tmp/vmlinuz"
#ramdisk = "/tmp/initrd.img"
name = "centos6.6"
vcpus = 1
memory = 512
vif = ["bridge=br0"]
disk = ['file:/xen/vm1/centos6.6.img,xvda,w']
on_crash = "destroy"
on_reboot ="restart"
bootloader="/usr/bin/pygrub"

重讀配置文件,啓動虛擬機

[root@node2 ~]# xm create -c centos6.6

wKioL1WnzPvgQfF2AADiIxTsdgQ855.jpg

登陸虛擬機,查看IP(安裝時爲DHCP,登陸後又手動修改了IP)

wKiom1WnlMCgX0CnAAI1BULds8o202.jpg

至此,基於Xen平臺的虛擬機安裝完成,以上過程較繁瑣,主要是爲了理解Xend的工作過程,如果想要簡單安裝,可選擇使用第三方管理工具 virt-manager(類似於VMware圖形界面)

Xen實時遷移

實驗拓撲

wKioL1Wnw57CCCw1AACcq7DQ-b8562.jpg

因爲其中一個Xen平臺已經搭建成功,且已安裝虛擬機,另一個節點只需配置Xen環境即可,無需安裝

安裝Xen

[root@node3 ~]# cd xen/
[root@node3 xen]# yum install *.rpm

修改grub文件

[root@node3 xen]# vim /etc/grub.conf 

title CentOS (3.7.4-1.el6xen.x86_64)
        root (hd0,0)
        kernel /xen.gz dom0_mem=512M cpufreq=xen dom0_max_vcpus=2 dom0_vcpus_pin
        module /vmlinuz-3.7.4-1.el6xen.x86_64 ro root=/dev/mapper/vg_firewallserver-lv_
root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 rd_LVM_LV=vg_firewa
llserver/lv_root crashkernel=auto rd_LVM_LV=vg_firewallserver/lv_swap  KEYBOARDTYPE=pc 
KEYTABLE=us rd_NO_DM rhgb quiet
        module /initramfs-3.7.4-1.el6xen.x86_64.img

創建橋設備

[root@node2 ~]# service NetworkManager stop
[root@node2 ~]# chkconfig NetworkManager off
[root@node3 xen]# vim /etc/sysconfig/network-scripts/ifcfg-br0

DEVICE=br0
TYPE=Bridge
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
IPADDR=172.16.10.125
PREFIX=16
GATEWAY=172.16.0.1
DNS1=172.16.0.1

[root@node3 xen]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
BRIDGE=br0

重啓系統,查看內核參數

[root@node3 ~]# uname -r
3.7.4-1.el6xen.x86_64
[root@node3 ~]# brctl stp br0 on

準備磁盤映像

#只創建目錄即可,待掛載
[root@node3 ~]# mkdir -p /xen/vm1

NFS服務器配置

[root@node4 ~]# vim /etc/exports 

/xen/vm1 172.16.0.0/16(rw,no_root_squash)

[root@node4 ~]# mkdir -p /xen/vm1
[root@node4 ~]# service nfs start
Starting NFS services:                                     [  OK  ]
Starting NFS quotas:                                       [  OK  ]
Starting NFS mountd:                                       [  OK  ]
Starting NFS daemon:                                       [  OK  ]
Starting RPC idmapd:                                       [  OK  ]

源節點操作

同步Xen實例文件至目標節點

[root@node2 xen]# scp /etc/xen/centos6.6 node3:/etc/xen/
root@node3's password: 
centos6.6                                                100%  234     0.2KB/s   00:00

關掉正在運行的虛擬機

[root@node2 ~]# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0   495     2     r-----    942.7
centos6.6                                    3   512     1     -b----     88.4
[root@node2 ~]# xm shutdown centos6.6
root@node2 xen]# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0   495     2     r-----   1075.5

掛載nfs

[root@node2 ~]# cp /xen/vm1/centos6.6.img /tmp
[root@node2 xen]# mount -t nfs 172.16.10.126:/xen/vm1/ /xen/vm1/
[root@node2 xen]# mv /tmp/centos6.6.img /xen/vm1/

配置實時遷移

[root@node2 xen]# grep xend-relocation /etc/xen/xend-config.sxp |grep -v '#'
(xend-relocation-server yes)
(xend-relocation-port 8002)
(xend-relocation-address '')
(xend-relocation-hosts-allow '')

同步至目標節點

[root@node2 xen]# scp /etc/xen/xend-config.sxp node3:/etc/xen
root@node3's password: 
xend-config.sxp                                         100%   11KB  11.1KB/s   00:00

重啓服務

[root@node2 xen]# service xend restart
Stopping xend daemon:                                      [  OK  ]
Starting xend daemon:                                      [  OK  ]

目標節點操作

掛載nfs

[root@node3 ~]# mount -t nfs 172.16.10.126:/xen/vm1/ /xen/vm1/
[root@node3 ~]# ls /xen/vm1/
centos6.6.img

重啓服務

[root@node3 ~]# service xend restart
Stopping xend daemon:                                      [  OK  ]
Starting xend daemon:                                      [  OK  ]

遷移測試

源節點啓動虛擬機

[root@node2 ~]# xm create -c centos6.6
[root@localhost ~]# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:16:3E:45:41:28  
          inet addr:172.16.10.231  Bcast:172.16.255.255  Mask:255.255.0.0
          inet6 addr: fe80::216:3eff:fe45:4128/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:177 errors:0 dropped:0 overruns:0 frame:0
          TX packets:19 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:8595 (8.3 KiB)  TX bytes:1326 (1.2 KiB)
          Interrupt:247

查看各節點狀態

[root@node2 xen]# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0   495     2     r-----   2495.1
centos6.6                                    4   512     1     -b----     52.0
[root@node3 ~]# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0   512     2     r-----    373.5

開始遷移

[root@node2 xen]# xm migrate -l centos6.6 172.16.10.125

遷移過程中一直對虛擬機進行ping操作

wKioL1WnyaaS_KfIAAMOQRrcllE663.jpg

遷移過程中服務中斷過幾秒,可忽略不計

再次查看各節點狀態

[root@node2 xen]# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0   493     2     r-----   2578.2
[root@node3 ~]# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0   496     2     r-----    484.3
centos6.6                                    1   512     1     -b----      1.3

連接虛擬機,驗證是否工作

[root@node3 ~]# xm console centos6.6
[root@localhost ~]# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:16:3E:45:41:28  
          inet addr:172.16.10.231  Bcast:172.16.255.255  Mask:255.255.0.0
          inet6 addr: fe80::216:3eff:fe45:4128/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2480 errors:0 dropped:0 overruns:0 frame:0
          TX packets:149 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:146639 (143.2 KiB)  TX bytes:10466 (10.2 KiB)
          Interrupt:247

至此,Xen實時遷移成功實現

The end

Xen虛擬化平臺安裝及實時遷移就先說到這裏了,部署過程中遇到問題可留言交流。以上只是演示了簡單的實時遷移過程,實際生產環境中可對Xen平臺做高可用,當物理機故障可移動檢測並進行實時遷移,保證業務不受影響。以上僅爲個人學習整理,如有錯漏,大神勿噴~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章