前言
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 KEYTABLE=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,可手動配置
獲取IP后,指定安裝源
初始化磁盤
設置root密碼
使用全部磁盤
開始安裝
安裝結束,重啟虛擬機
以為定義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
登陸虛擬機,查看IP(安裝時為DHCP,登陸后又手動修改了IP)
至此,基于Xen平臺的虛擬機安裝完成,以上過程較繁瑣,主要是為了理解Xend的工作過程,如果想要簡單安裝,可選擇使用第三方管理工具 virt-manager(類似于VMware圖形界面)
Xen實時遷移
實驗拓撲
因為其中一個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操作
遷移過程中服務中斷過幾秒,可忽略不計
再次查看各節點狀態
[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平臺做高可用,當物理機故障可移動檢測并進行實時遷移,保證業務不受影響。以上僅為個人學習整理,如有錯漏,大神勿噴~~~
原創文章,作者:書生,如若轉載,請注明出處:http://www.www58058.com/6315