前言
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管理程式之上的普通客戶作業系統或業務作業系統,不能直接通路硬體資源(如:記憶體,硬碟等),但可以獨立并行的存在多個。
Xen及虛拟機安裝
安裝Xen(CentOS6.6)
1
2
3
4
5
6
7
<code>[root@node2 ~]</code><code># cd xen/</code>
<code>[root@node2 xen]</code><code># ls</code>
<code>kernel-xen-3.7.4-1.el6xen.x86_64.rpm xen-hypervisor-4.2.4-30.el6.centos.alt.x86_64.rpm</code>
<code>kernel-xen-firmware-3.7.4-1.el6xen.x86_64.rpm xen-libs-4.2.4-30.el6.centos.alt.x86_64.rpm</code>
<code>kernel-xen-release-6-4.noarch.rpm xen-licenses-4.2.4-30.el6.centos.alt.x86_64.rpm</code>
<code>xen-4.2.4-30.el6.centos.alt.x86_64.rpm xen-runtime-4.2.4-30.el6.centos.alt.x86_64.rpm</code>
<code>[root@node2 xen]</code><code># yum install *.rpm -y</code>
修改grub檔案
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<code>[root@node2 ~]</code><code># vim /etc/grub.conf</code>
<code>default=0</code>
<code>timeout=5</code>
<code>splashimage=(hd0,0)</code><code>/grub/splash</code><code>.xpm.gz</code>
<code>hiddenmenu</code>
<code>title CentOS (3.7.4-1.el6xen.x86_64)</code>
<code> </code><code>root (hd0,0)</code>
<code> </code><code>kernel </code><code>/xen</code><code>.gz dom0_mem=512M cpufreq=xen dom0_max_vcpus=2 dom0_vcpus_pin</code>
<code> </code><code>module </code><code>/vmlinuz-3</code><code>.7.4-1.el6xen.x86_64 ro root=</code><code>/dev/mapper/vg_firewallserver-lv_</code>
<code>root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 rd_LVM_LV=vg_firewa</code>
<code>llserver</code><code>/lv_root</code> <code>crashkernel=auto rd_LVM_LV=vg_firewallserver</code><code>/lv_swap</code> <code>KEYBOARDTYPE=pc </code>
<code>KEYTABLE=us rd_NO_DM rhgb quiet</code>
<code> </code><code>module </code><code>/initramfs-3</code><code>.7.4-1.el6xen.x86_64.img</code>
<code>title CentOS 6 (2.6.32-504.el6.x86_64)</code>
<code> </code><code>kernel </code><code>/vmlinuz-2</code><code>.6.32-504.el6.x86_64 ro root=</code><code>/dev/mapper/vg_firewallserver-lv_</code>
<code>llserver</code><code>/lv_root</code> <code>crashkernel=auto rd_LVM_LV=vg_firewallserver</code><code>/lv_swap</code> <code>KEYBOARDTYPE=pc KE</code>
<code>YTABLE=us rd_NO_DM rhgb quiet</code>
<code> </code><code>initrd </code><code>/initramfs-2</code><code>.6.32-504.el6.x86_64.img</code>
重新開機系統,檢視核心參數
<code>[root@node2 ~]</code><code># uname -r</code>
<code>3.7.4-1.el6xen.x86_64</code>
啟動服務
<code>[root@node2 ~]</code><code># service xend start</code>
<code>Starting xend daemon: [ OK ]</code>
<code>[root@node2 ~]</code><code># xm list</code>
<code>WARNING: xend</code><code>/xm</code> <code>is deprecated.</code>
<code>Name ID Mem VCPUs State Time(s)</code>
<code>Domain-0 0 512 2 r----- 218.7</code>
建立橋裝置
由于虛拟機運作在主控端之上,虛拟機運作的網絡環境需要由主控端提供,需要先配置好網橋,以便虛拟機與主控端之間通信
22
23
24
25
26
<code>#關閉NetworkManager</code>
<code>[root@node2 ~]</code><code># service NetworkManager stop</code>
<code>[root@node2 ~]</code><code># chkconfig NetworkManager off</code>
<code>[root@node2 ~]</code><code># vim /etc/sysconfig/network-scripts/ifcfg-br0</code>
<code>DEVICE=br0</code>
<code>TYPE=Bridge</code>
<code>ONBOOT=</code><code>yes</code>
<code>NM_CONTROLLED=no</code>
<code>BOOTPROTO=none</code>
<code>IPADDR=172.16.10.124</code>
<code>PREFIX=16</code>
<code>GATEWAY=172.16.0.1</code>
<code>DNS1=172.16.0.1</code>
<code>[root@node2 ~]</code><code># vim /etc/sysconfig/network-scripts/ifcfg-eth0 </code>
<code>DEVICE=eth0</code>
<code>TYPE=Ethernet</code>
<code>BRIDGE=br0</code>
<code>[root@node2 ~]</code><code># service network restart</code>
<code>[root@node2 ~]</code><code># brctl stp br0 on #避免環路</code>
準備引導檔案
<code>[root@node2 ~]</code><code># mount /dev/cdrom1 /media/cdrom/</code>
<code>mount</code><code>: block device </code><code>/dev/sr0</code> <code>is write-protected, mounting </code><code>read</code><code>-only</code>
<code>[root@node2 ~]</code><code># cp /media/cdrom/isolinux/{vmlinuz,initrd.img} /tmp</code>
<code>[root@node2 ~]</code><code># ln -sv /media/cdrom/ /var/www/html/centos6.6</code>
<code>`</code><code>/var/www/html/centos6</code><code>.6</code><code>' -> `/media/cdrom/'</code>
<code>[root@node2 ~]</code><code># service httpd start</code>
<code>Starting httpd: [ OK ]</code>
建立磁盤映像檔案
<code>[root@node2 ~]</code><code># mkdir -pv /xen/vm1</code>
<code>[root@node2 ~]</code><code># dd if=/dev/zero of=/xen/vm1/centos6.6.img oflag=direct bs=1M seek=102399 count=1</code>
<code>[root@node2 ~]</code><code># ll /xen/vm1/ -h</code>
<code>total 1.0M</code>
<code>-rw-r--r-- 1 root root 100G Jul 16 17:53 centos6.6.img</code>
定義domain
<code>[root@node2 ~]</code><code># vim /etc/xen/centos6.6</code>
<code>kernel = </code><code>"/tmp/vmlinuz"</code>
<code>ramdisk = </code><code>"/tmp/initrd.img"</code>
<code>name = </code><code>"centos6.6"</code>
<code>vcpus = 1</code>
<code>memory = 512</code>
<code>vif = [</code><code>"bridge=br0"</code><code>]</code>
<code>disk = [</code><code>'file:/xen/vm1/centos6.6.img,xvda,w'</code><code>]</code>
<code>on_crash = </code><code>"destroy"</code>
<code>on_reboot = </code><code>"destroy"</code>
啟動虛拟機
<code>[root@node2 ~]</code><code># xm create -c centos6.6</code>
啟動虛拟機即可進入安裝界面,和VMware安裝類似,簡單截取一下就不詳細記錄了
配置IP,可手動配置
<a href="http://s3.51cto.com/wyfs02/M02/6F/C2/wKioL1WnkD3QbMSRAADQKnDaHU8265.jpg" target="_blank"></a>
擷取IP後,指定安裝源
<a href="http://s3.51cto.com/wyfs02/M00/6F/C5/wKiom1WnjsfSHFOEAADebvPfes0961.jpg" target="_blank"></a>
初始化磁盤
設定root密碼
<a href="http://s3.51cto.com/wyfs02/M02/6F/C5/wKiom1Wnj7WTWJ-wAACz4u0winY121.jpg" target="_blank"></a>
使用全部磁盤
<a href="http://s3.51cto.com/wyfs02/M00/6F/C2/wKioL1Wnka3wauDYAAFhclazPls580.jpg" target="_blank"></a>
開始安裝
<a href="http://s3.51cto.com/wyfs02/M00/6F/C5/wKiom1Wnj-yAICvDAADBUPinUCY363.jpg" target="_blank"></a>
安裝結束,重新開機虛拟機
<a href="http://s3.51cto.com/wyfs02/M01/6F/C2/wKioL1WnkfOAXaSkAAEHpI-qE_E102.jpg" target="_blank"></a>
以為定義domain時,我們設定on_reboot = "destroy",是以虛拟機會關機,接下來需要修改domain配置
<code>[root@node2 ~]</code><code># vim /etc/xen/centos6.6 </code>
<code>#kernel = "/tmp/vmlinuz"</code>
<code>#ramdisk = "/tmp/initrd.img"</code>
<code>on_reboot =</code><code>"restart"</code>
<code>bootloader=</code><code>"/usr/bin/pygrub"</code>
重讀配置檔案,啟動虛拟機
<a href="http://s3.51cto.com/wyfs02/M00/6F/C3/wKioL1WnzPvgQfF2AADiIxTsdgQ855.jpg" target="_blank"></a>
登陸虛拟機,檢視IP(安裝時為DHCP,登陸後又手動修改了IP)
<a href="http://s3.51cto.com/wyfs02/M00/6F/C5/wKiom1WnlMCgX0CnAAI1BULds8o202.jpg" target="_blank"></a>
至此,基于Xen平台的虛拟機安裝完成,以上過程較繁瑣,主要是為了了解Xend的工作過程,如果想要簡單安裝,可選擇使用第三方管理工具 virt-manager(類似于VMware圖形界面)
Xen實時遷移
實驗拓撲
因為其中一個Xen平台已經搭建成功,且已安裝虛拟機,另一個節點隻需配置Xen環境即可,無需安裝
安裝Xen
<code>[root@node3 ~]</code><code># cd xen/</code>
<code>[root@node3 xen]</code><code># yum install *.rpm</code>
<code>[root@node3 xen]</code><code># vim /etc/grub.conf </code>
<code>[root@node3 xen]</code><code># vim /etc/sysconfig/network-scripts/ifcfg-br0</code>
<code>IPADDR=172.16.10.125</code>
<code>[root@node3 xen]</code><code># vim /etc/sysconfig/network-scripts/ifcfg-eth0 </code>
<code>[root@node3 ~]</code><code># uname -r</code>
<code>[root@node3 ~]</code><code># brctl stp br0 on</code>
準備磁盤映像
<code>#隻建立目錄即可,待挂載</code>
<code>[root@node3 ~]</code><code># mkdir -p /xen/vm1</code>
NFS伺服器配置
<code>[root@node4 ~]</code><code># vim /etc/exports </code>
<code>/xen/vm1</code> <code>172.16.0.0</code><code>/16</code><code>(rw,no_root_squash)</code>
<code>[root@node4 ~]</code><code># mkdir -p /xen/vm1</code>
<code>[root@node4 ~]</code><code># service nfs start</code>
<code>Starting NFS services: [ OK ]</code>
<code>Starting NFS quotas: [ OK ]</code>
<code>Starting NFS mountd: [ OK ]</code>
<code>Starting NFS daemon: [ OK ]</code>
<code>Starting RPC idmapd: [ OK ]</code>
源節點操作
同步Xen執行個體檔案至目标節點
<code>[root@node2 xen]</code><code># scp /etc/xen/centos6.6 node3:/etc/xen/</code>
<code>root@node3's password: </code>
<code>centos6.6 100% 234 0.2KB</code><code>/s</code> <code>00:00</code>
關掉正在運作的虛拟機
<code>Domain-0 0 495 2 r----- 942.7</code>
<code>centos6.6 3 512 1 -b---- 88.4</code>
<code>[root@node2 ~]</code><code># xm shutdown centos6.6</code>
<code>root@node2 xen]</code><code># xm list</code>
<code>Domain-0 0 495 2 r----- 1075.5</code>
挂載nfs
<code>[root@node2 ~]</code><code># cp /xen/vm1/centos6.6.img /tmp</code>
<code>[root@node2 xen]</code><code># mount -t nfs 172.16.10.126:/xen/vm1/ /xen/vm1/</code>
<code>[root@node2 xen]</code><code># mv /tmp/centos6.6.img /xen/vm1/</code>
配置實時遷移
<code>[root@node2 xen]</code><code># grep xend-relocation /etc/xen/xend-config.sxp |grep -v '#'</code>
<code>(xend-relocation-server </code><code>yes</code><code>)</code>
<code>(xend-relocation-port 8002)</code>
<code>(xend-relocation-address </code><code>''</code><code>)</code>
<code>(xend-relocation-hosts-allow </code><code>''</code><code>)</code>
同步至目标節點
<code>[root@node2 xen]</code><code># scp /etc/xen/xend-config.sxp node3:/etc/xen</code>
<code>xend-config.sxp 100% 11KB 11.1KB</code><code>/s</code> <code>00:00</code>
重新開機服務
<code>[root@node2 xen]</code><code># service xend restart</code>
<code>Stopping xend daemon: [ OK ]</code>
目标節點操作
<code>[root@node3 ~]</code><code># mount -t nfs 172.16.10.126:/xen/vm1/ /xen/vm1/</code>
<code>[root@node3 ~]</code><code># ls /xen/vm1/</code>
<code>centos6.6.img</code>
<code>[root@node3 ~]</code><code># service xend restart</code>
遷移測試
源節點啟動虛拟機
<code>[root@localhost ~]</code><code># ifconfig eth0</code>
<code>eth0 Link encap:Ethernet HWaddr 00:16:3E:45:41:28 </code>
<code> </code><code>inet addr:172.16.10.231 Bcast:172.16.255.255 Mask:255.255.0.0</code>
<code> </code><code>inet6 addr: fe80::216:3eff:fe45:4128</code><code>/64</code> <code>Scope:Link</code>
<code> </code><code>UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1</code>
<code> </code><code>RX packets:177 errors:0 dropped:0 overruns:0 frame:0</code>
<code> </code><code>TX packets:19 errors:0 dropped:0 overruns:0 carrier:0</code>
<code> </code><code>collisions:0 txqueuelen:1000 </code>
<code> </code><code>RX bytes:8595 (8.3 KiB) TX bytes:1326 (1.2 KiB)</code>
<code> </code><code>Interrupt:247</code>
檢視各節點狀态
<code>[root@node2 xen]</code><code># xm list</code>
<code>Domain-0 0 495 2 r----- 2495.1</code>
<code>centos6.6 4 512 1 -b---- 52.0</code>
<code>[root@node3 ~]</code><code># xm list</code>
<code>Domain-0 0 512 2 r----- 373.5</code>
開始遷移
<code>[root@node2 xen]</code><code># xm migrate -l centos6.6 172.16.10.125</code>
遷移過程中一直對虛拟機進行ping操作
<a href="http://s3.51cto.com/wyfs02/M01/6F/C3/wKioL1WnyaaS_KfIAAMOQRrcllE663.jpg" target="_blank"></a>
遷移過程中服務中斷過幾秒,可忽略不計
再次檢視各節點狀态
<code>Domain-0 0 493 2 r----- 2578.2</code>
<code>Domain-0 0 496 2 r----- 484.3</code>
<code>centos6.6 1 512 1 -b---- 1.3</code>
連接配接虛拟機,驗證是否工作
<code>[root@node3 ~]</code><code># xm console centos6.6</code>
<code> </code><code>RX packets:2480 errors:0 dropped:0 overruns:0 frame:0</code>
<code> </code><code>TX packets:149 errors:0 dropped:0 overruns:0 carrier:0</code>
<code> </code><code>RX bytes:146639 (143.2 KiB) TX bytes:10466 (10.2 KiB)</code>
至此,Xen實時遷移成功實作
The end
Xen虛拟化平台安裝及實時遷移就先說到這裡了,部署過程中遇到問題可留言交流。以上隻是示範了簡單的實時遷移過程,實際生産環境中可對Xen平台做高可用,當實體機故障可移動檢測并進行實時遷移,保證業務不受影響。以上僅為個人學習整理,如有錯漏,大神勿噴~~~
本文轉自 北城書生 51CTO部落格,原文連結:http://blog.51cto.com/scholar/1675485