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
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,可手動配置

1.jpg

獲取IP后,指定安裝源

2.jpg

初始化磁盤

3.jpg

設置root密碼

4.jpg

使用全部磁盤

5.jpg

開始安裝

6.jpg

安裝結束,重啟虛擬機

7.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

8.jpg

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

9.jpg

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

Xen實時遷移

實驗拓撲

xen虛擬化平臺實時遷移.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操作

10.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平臺做高可用,當物理機故障可移動檢測并進行實時遷移,保證業務不受影響。以上僅為個人學習整理,如有錯漏,大神勿噴~~~

原創文章,作者:書生,如若轉載,請注明出處:http://www.www58058.com/6315

(0)
書生書生
上一篇 2015-07-19
下一篇 2015-07-19

相關推薦

  • ACL概述

    ACL概述 一、什么是ACL ACL是linux系統中一種被稱為訪問控制列表的權限控制方法,它是一種權限分配之外的普遍范式。在一般情況下,要確認三個權限組:owner、group和other。而使用ACL則可以增加權限給其他用戶或組別,不再僅僅是在“other”中定義權限,可以允許指定的用戶擁有不同于其所屬組的權限。 ACL支持多種Linux文件系統,包括e…

    2017-07-29
  • 馬哥教育網絡班N22期+第4周課程練習

    馬哥教育網絡班N22期+第4周課程練習 1. 復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 cp -rf /etc/skel /home/tuser1  chmod -R go= tuser1/ 2. 編…

    Linux干貨 2016-09-19
  • 加油吧!少年!—至我和我M25期的伙伴

    引用 衣帶漸寬終不悔,為伊消得人憔悴。—王國維《人間詞話》 轉眼已到了27歲的年紀,不知道自己是否還稱得上少年。公交上讓座被小朋友成為叔叔也都是很多年的事了。哪怕再有一顆少年心現在也要肩負起整個家庭的責任。 從畢業已工作了將近六個年頭,無聊的工作平凡的薪水已經使我厭倦。閉上眼睛以后需要贍養四個老人,還要照顧孩子以后這些難題映入腦海。曾經以為遙遠的…

    Linux干貨 2017-07-11
  • linux安全機制與加密工具使用

    一、加密需要和安全機制 1.不加密流量的易受攻擊性 密碼/數據嗅探 數據操作 驗證操作 相當于郵寄明信片 2.不安全的傳統協議 telnet、FTP、POP3等等;不安全密碼http、sendmail、NFS等等;不安全信息Ldap、NIS、rsh等等;不安全驗證 3.NIST定義的安全屬性:美國國家標準與技術研究院 1) 保密性:  &…

    Linux干貨 2016-09-25
  • Linux基礎概念

    一、計算機的組成及其功能。 計算機機系統由五部分組成:運算器、控制器、存儲器、輸入設備、輸出設備,遵從馮.諾依曼體系結構。具體的功能如下 : CPU   :     運算器(處理數據)、控制器(指令控制),另有寄存器、緩存(緩沖數據,內部緩存非  常昂貴); 存儲器:內存即RAM(隨機訪問…

    Linux干貨 2016-10-09
  • ?Web服務器之apache

    Web服務器之apache http協議 telnet的使用 curl命令 httpd的相關配置 welcome.conf — 403 forbidden 修改監聽的端口和地址 保持連接 DSO 定義物理主機站點文檔 資源訪問授權 路徑別名Alias 本地httpd-manual 開啟status 日志設定 虛擬主機 基于用戶的訪問控制 httpd壓力測試 …

    Linux干貨 2016-10-08
欧美性久久久久