一.xen的簡介
Xen是一個開放源代碼虛擬機監視器,由劍橋大學開發。它打算在單個計算機上運行多達128個有完全功能的操作系統。
在舊(無虛擬硬件)的處理器上執行Xen,操作系統必須進行顯式地修改(“移植”)以在Xen上運行(但是提供對用戶應用的兼容性)。這使得Xen無需特殊硬件支持,就能達到高性能的虛擬化。
Xen的架構如圖:
Xen虛擬機的組成:
Xen Hypervisor:
虛擬化技術通過在現有平臺(機器)上添加一層薄的虛擬機監控程序(Virtual Machine Monitor,簡稱 VMM)軟件而實現對系統的虛擬化,如虛擬處理器,虛擬內存管理器(MMU)和虛擬 I/O 系統等。虛擬機監控程序又被稱之為監管程序(Hypervisor)。
Domain(Dom0,DomU):
特權虛擬機:Dom0;特權域
為Xen提供控制工具的;直接驅動IO硬件設備;
與DomU交互;
Linux-2.6.37內核開始直接運行在Dom0上;
其他普通虛擬機:DomU;非特權域
Linux-2.6.24+內核開始支持
Xen的虛擬化實現方式:
Type-I型:二級虛擬化技術;直接在硬件上安裝hypervisor,直接接管硬件資源,運行在其上的系統都是虛擬機;
管理方面給徹底;必須讓hypervisor驅動硬件,
出現的問題是必須開發驅動程序?
解決方案:Xen只是驅動CPU和內存,不驅動IO設備
當系統啟動時,硬件設備加載后加載hypervisor,hypervisor擁有訪問硬件權限,hypervisor加載完成后啟動一個虛擬機,虛擬機有自己的內核和用戶空間,這個虛擬機是 特權虛擬機,為底層hypervisor提供管理程序,能功能是為hypervisor提供IO設備硬件驅動 程序的;
我們新建的虛擬機調用IO設備硬件時,是通過特權虛擬機驅動程序連接硬件實現;
更加詳細的說明請參考博文:http://www.uml.org.cn/embeded/201303201.asp
xen虛擬化實現在CentOS 6.6上安裝所需要的條件:
1).需要在物理機上安裝CentOS 6.6操作系統
2).安裝Xen軟件包
3).安裝3.7.10的內核,可以使Xen運行在Dom0上
4).配置好grub,然后啟動Xen
5).在用戶空間上安裝虛擬機Guest OS即可;
注意:最新版本的xen在CentOS 6.6平臺上是只有DomU可以使用,Dom0是不能通過CentOS 6.6的原有內核實現,我這里是安裝的xen-4.2.5版本的xen,還有將內核版本更新到了3.7.10;
簡單介紹一些XEN和KVM:
Xen:CentOS4-CentOS5是支持的;后續就是xen了,但是在內核版本Linux 2.6.37將xen收錄進內核,CentOS7收錄進內核;可以實現內核直接運行在Dom0上;
KVM:2006才出現;CentOS5.8開始支持;但是不穩定,紅帽的收購造成了KVM的發展;
CentOS6.6的內核為2.6.32,不直接支持內核運行Xen的Dom0特權域;
可以支持直接運行在DomU
紅帽為了支持KVM這個親兒子的發展,將xen給趕出家門了。 -_-!
后來意識到XEN的使用率還是很高,所以又在后來收錄進內核。
二.xen的安裝及Dom0的配置
1.配置xen的yum源
# vim /etc/yum.repos.d/xen4.repo[xen4]name=Xen4 For CentOS6baseurl=ftp://172.16.0.1/pub/Sources/6.x86_64/xen4centos/x86_64/gpgcheck=0進行清理yum緩存操作# yum clean all
2.安裝xen-4.2.5版本的軟件,更新內核版本到3.7.10
# yum install -y xen-4.2.5 xen-libs-4.2.5 xen-runtime-4.2.5 kernel-xen
3.配置grub.conf配置文件
將xen設置為內核啟動,而將CentOS的內核設置為Xen虛擬化平臺的一個模塊;
# vim /etc/grub.conf default=0timeout=5splashimage=(hd0,0)/grub/splash.xpm.gzhiddenmenutitle CentOS (3.7.10-1.el6xen.x86_64) root (hd0,0) kernel /xen.gz dom0_mem=1024M,max:1024M dom0_max_vcpus=1 dom0_vcpus_pincpufreq=xen module /vmlinuz-3.7.10-1.el6xen.x86_64 ro root=/dev/mapper/vg0-root rd_NO_LUKS rd_NO_DM LANG=en_US.UTF-8 rd_LVM_LV=vg0/swap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg0/root KEYBOARDTYPE=pc KEYTABLE=us rhgb crashkernel=auto quiet rhgb quiet module /initramfs-3.7.10-1.el6xen.x86_64.imgtitle 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/vg0-root rd_NO_LUKS rd_NO_DM LANG=en_US.UTF-8 rd_LVM_LV=vg0/swap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg0/root KEYBOARDTYPE=pc KEYTABLE=us rhgb crashkernel=auto quiet rhgb quiet initrd /initramfs-2.6.32-504.el6.x86_64.img
配置完成后重新啟動Linux系統,啟動完成后自動進入了Xen的Dom0環境:
查看內核版本,已經升級到3.7.10:
查看xen的xend服務開機啟動項:
4.啟動xend服務
可以查看一下現在運行的虛擬機:
三.xen虛擬機的安裝和配置
上面安裝好Dom0D虛擬機后,下面我們就可以在其之上配置安裝DomU虛擬機了。
DomU虛擬機的安裝問題思考:
1).DomU虛擬機的內核文件存放位置。
我們是在Dom0上構建DomU虛擬機,所以我們的內核文件存放在Dom0上;
第二種方式就是我們將內核文件存放在DomU虛擬機的虛擬磁盤中;
2).DomU虛擬機的創建:
內核kernel,ramdisk都由Dom0提供,而DomU只提供用戶空間;
由于Dom0虛擬機有完整的用戶空間,我們可以將其復制進DomU虛擬機上使用;
1.簡單DomU虛擬機構建
內核kernel和ramdisk都由Dom0提供,使用busybox為DomU虛擬機提供簡單的用戶空間;
1).模擬創建虛擬機磁盤設備,構建本地環回文件:
創建虛擬磁盤存放目錄:# mkdir /xen/images -pv進入目錄后創建虛擬機磁盤設備:# cd /xen/images/# dd if=/dev/zero of=./busybox.img bs=1M oflag=direct seek=2047 count=1查看設備大小,可以發現實際大小才1MB:# ll -htotal 1.0M-rw-r--r-- 1 root root 2.0G Feb 6 20:15 busybox.img
2).格式化虛擬磁盤設備
# mke2fs -t ext4 /xen/images/busybox.img mke2fs 1.41.12 (17-May-2010)/xen/images/busybox.img is not a block special device.Proceed anyway? (y,n) y #選擇y信息略...掛載磁盤設備,等待后續操作:# mount -o loop /xen/images/busybox.img /mnt
3).編譯安裝busybox為DomU虛擬機提供用戶空間
編譯環境需要開發包組支持:# yum groupinstall -y Development tools # yum install -y ncurses-devel glibc-static獲取busybox軟件:busybox-1.22.1.tar.bz2編譯安裝busybox:# tar xf busybox-1.22.1.tar.bz2 # cd busybox-1.22.1# make menuconfig
配置如下圖所示:
選擇“Busybox settings”:
選擇“Build options”選項:
以靜態二進制創建busybox,不共享庫文件:
配置完成后點擊exit,退出后點擊yes保存:
設置完成后進行編譯和安裝:
# make && make install
編譯安裝busybox完成后在這個目錄會生成安裝好的文件_install目錄,我們將_install目錄拷貝到掛載的虛擬磁盤中:
# cp -a _install/* /mnt# cd /mnt# lsbin linuxrc lost+found sbin usr# rm -rf linuxrc # mkdir dev proc sys lib/modules etc/rc.d boot mnt media opt misc -pv
至此,虛擬磁盤就構建完成了。
4).構建DomU虛擬機
創建虛擬機配置文件:# cd /etc/xen# vim busyboxkernel = "/boot/vmlinuz-2.6.32-504.el6.x86_64"ramdisk = "/boot/initramfs-2.6.32-504.el6.x86_64.img"name = "busybox"memory = "512"vcpus = 1disk = ['file:/xen/images/busybox.img,xvda,w',]root = "/dev/xvda ro"extra = "selinux=0 init=/bin/sh"
下面進行初始化創建虛擬機:
# xm create -c /etc/xen/busybox Using config file "/etc/xen/busybox".Started domain busybox (id=2) Initializing cgroup subsys cpusetInitializing cgroup subsys cpuLinux version 2.6.32-504.el6.x86_64 (mockbuild@c6b9.bsys.dev.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC) ) #1 SMP Wed Oct 15 04:27:16 UTC 2014Command line: root=/dev/xvda ro selinux=0 init=/bin/sh信息略......device-mapper: ioctl: 4.27.0-ioctl (2013-10-30) initialised: dm-devel@redhat.comudev: starting version 147dracut: Starting plymouth daemonxlblk_init: register_blkdev major: 202 blkfront: xvda: barriers disabled xvda: unknown partition tableEXT4-fs (xvda): mounted filesystem with ordered data mode. Opts: dracut: Mounted root filesystem /dev/xvdadracut: Switching root/bin/sh: can't access tty; job control turned off/ # lsbin dev lib media mnt proc sysboot etc lost+found misc opt sbin usr
5).切換虛擬終端查看虛擬機狀態
# xm listName ID Mem VCPUs State Time(s)Domain-0 0 1024 1 r----- 197.9busybox 2 512 1 -b---- 1.4
其ID號會在關機啟動后自動增長,我們來測試一下:
關閉虛擬機:# xm destroy busybox啟動虛擬機:# xm create -c busybox 然后查看虛擬機列表的信息,可以發現ID號自動增長:# xm listName ID Mem VCPUs State Time(s)Domain-0 0 1024 1 r----- 201.4busybox 3 512 1 -b---- 1.2
其中State狀態信息中的選項詳解:
r:running,虛擬機處于運行態b:blocked,被阻塞,當前虛擬機等待任務完成;p:pause,暫停態,當前虛擬機暫停在內存中;恢復使用unpause:如#xm unpause linuxs:shutdown,正處于關閉過程中,正在關機狀態c:crashed,正處于崩潰過程/崩潰后重啟過程中;d:dying,正處于關機過程中;
Time(s):表示域累計占用的CPU的時長
6).虛擬機加入網卡設備
需要先給Dom0設置橋設備,方便DomU橋接到Dom0上;
添加網卡橋設備文件:# cd /etc/sysconfig/network-scripts/# cp ifcfg-eth0 ifcfg-xenbr0配置橋接設備:# vim ifcfg-xenbr0 DEVICE="xenbr0"BOOTPROTO="static"NM_CONTROLLED="no"ONBOOT="yes"TYPE="Bridge"IPADDR=172.16.31.1NETMASK=255.255.0.0GATEWAY=172.16.0.1配置網卡設備:# vim ifcfg-eth0 DEVICE="eth0"BOOTPROTO="static"HWADDR="08:00:27:16:D9:AA"NM_CONTROLLED="no"ONBOOT="yes"BRIDGE="xenbr0"TYPE="Ethernet"USERCTL="no"配置橋接模式需要將NetworkManager服務關閉:#chkconfig NetworkManager off#service NetworkManager stop配置完成后重啟網絡服務:#service network restart
如圖所示:
登錄終端查看橋接狀態:
# ifconfigeth0 Link encap:Ethernet HWaddr 08:00:27:16:D9:AA inet6 addr: fe80::a00:27ff:fe16:d9aa/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:37217 errors:0 dropped:7 overruns:0 frame:0 TX packets:4541 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:7641467 (7.2 MiB) TX bytes:773075 (754.9 KiB)lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:12 errors:0 dropped:0 overruns:0 frame:0 TX packets:12 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1032 (1.0 KiB) TX bytes:1032 (1.0 KiB)xenbr0 Link encap:Ethernet HWaddr 08:00:27:16:D9:AA inet addr:172.16.31.1 Bcast:172.16.255.255 Mask:255.255.0.0 inet6 addr: fe80::a00:27ff:fe16:d9aa/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1211 errors:0 dropped:0 overruns:0 frame:0 TX packets:90 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:116868 (114.1 KiB) TX bytes:15418 (15.0 KiB)
7).將busybox虛擬機關聯到這個橋接設備上
需要配置虛擬機配置文件沒加入橋設備名稱:# vim /etc/xen/busybox kernel = "/boot/vmlinuz-2.6.32-504.el6.x86_64"ramdisk = "/boot/initramfs-2.6.32-504.el6.x86_64.img"name = "busybox"memory = "512"vcpus = 1disk = ['file:/xen/images/busybox.img,xvda,w',]root = "/dev/xvda ro"extra = "selinux=0 init=/bin/sh"vif = ['bridge=xenbr0',]
如果希望busybox這個用戶空間能夠設置網卡,我們還需要加載xen-netfront.ko進入虛擬機磁盤的指定目錄:
# xm destroy busybox# mount -o loop /xen/images/busybox.img /mnt# ls /mntbin dev lib media mnt proc sysboot etc lost+found misc opt sbin usr我們將Dom0中的xen-netfront.ko模塊復制進虛擬機磁盤的lib/modules/目錄中:# cd /lib/modules/2.6.32-504.el6.x86_64/kernel/drivers/net/需要查看模塊依賴關系:# modinfo xen-netfront.ko filename: xen-netfront.koalias: xennetalias: xen:viflicense: GPLdescription: Xen virtual network device frontendsrcversion: 5C6FC78BC365D9AF8135201depends: vermagic: 2.6.32-504.el6.x86_64 SMP mod_unload modversions 可以發現無依賴關系,我們可以直接使用:# cp xen-netfront.ko /mnt/lib/modules/
復制完成后卸載虛擬機磁盤:
# umount /mnt
啟動busybox這個虛擬機:
# xm create -c busybox信息略....../ # ifconfig -alo Link encap:Local Loopback LOOPBACK MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)#發現只存在lo環回設備,我們還未加載xen-netfront模塊,我們加入網卡模塊;/ # insmod /lib/modules/xen-netfront.koInitialising Xen virtual ethernet driver.#再次查看所有網卡設備,可以發現網卡設備;/ # ifconfig -aeth0 Link encap:Ethernet HWaddr 00:16:3E:72:18:9B BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) Interrupt:247 lo Link encap:Local Loopback LOOPBACK MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)#設置IP地址;/ # ifconfig eth0 172.16.31.100 up/ # ifconfigeth0 Link encap:Ethernet HWaddr 00:16:3E:72:18:9B inet addr:172.16.31.100 Bcast:172.16.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:137 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:10127 (9.8 KiB) TX bytes:0 (0.0 B) Interrupt:247 #我們來進行ping測試;/ # ping 172.16.31.1 -c 2PING 172.16.31.1 (172.16.31.1): 56 data bytes64 bytes from 172.16.31.1: seq=0 ttl=64 time=2.955 ms64 bytes from 172.16.31.1: seq=1 ttl=64 time=0.605 ms--- 172.16.31.1 ping statistics ---2 packets transmitted, 2 packets received, 0% packet lossround-trip min/avg/max = 0.605/1.780/2.955 ms
至此,一個簡單的虛擬機的創建就完成了。
四.實現Xen部署CentOS 6.6系統
1.先關閉我們先前創建的busybox虛擬機
# xm destroy busybox
我們部署安裝CentOS 6.6系統,其內核kernel和ramdisk文件由光盤文件提供,選擇光盤中isolinux目錄下的vmlinuz和initrd.img文件即可;
# ll -htotal 38M-rw-r--r-- 1 root root 34M Oct 24 22:12 initrd.img-rw-r--r-- 1 root root 4.0M Oct 24 22:12 vmlinuz
2.創建虛擬機配置文件
# cd /etc/xen/# cp busybox centos6# vim centos6 kernel = "/tmp/vmlinuz"ramdisk = "/tmp/initrd.img"name = "CentOS6"memory = "512"vcpus = 1disk = ['file:/xen/images/centos6.img,xvda,w',]root = "/dev/xvda ro"vif = ['bridge=xenbr0',]
3.創建虛擬機系統的磁盤IO設備文件
# cd /xen/images/# qemu-img-xen create -f qcow2 -o preallocation=metadata centos6.img 120GFormatting 'centos6.img', fmt=qcow2 size=128849018880 encryption=off cluster_size=65536 preallocation='metadata' # ll -htotal 119M-rw-r--r-- 1 root root 2.0G Feb 6 16:01 busybox.img-rw-r--r-- 1 root root 121G Feb 6 16:34 centos6.img
4.由于我是在虛擬機上構建Xen虛擬化,需要提供一個能夠能夠安裝CentOS系統的環境,我選擇的是http服務提供系統ISO存放,在安裝系統時通過URL安裝;
掛載CentOS6.6系統的光盤:# mkdir /var/www/html/centos# mount -t iso9660 /dev/sr0 /var/www/html/centos啟動默認的httpd服務:# service httpd start
訪問測試如圖:
5.啟動虛擬機進入安裝過程
#xm create –c busybox
選擇語言:
我們通過URL安裝:
配置靜態的IP地址:
設置的IP地址如下:
配置我們設置的網絡鏡像路徑:
開始準備:
顯示歡迎界面:
出現了我們設置的磁盤文件,我們需要進行初始化:
選擇時區:
設置root用戶的密碼:
使用全部磁盤空間:
進入安裝過程:
安裝完成后重啟:
重啟后會自動退出安裝,而重啟在后臺已經執行了,我們需要將虛擬機destroy掉:
6.虛擬機啟動配置
我們需要在其他虛擬終端上關閉虛擬機;
# xm listName ID Mem VCPUs State Time(s)CentOS6 6 512 1 -b---- 11.6Domain-0 0 1024 1 r----- 287.9# xm destroy CentOS6
然后修改虛擬機配置文件,使用bootloader調用pygrub來啟動我們安裝的虛擬機,需要注釋掉我們使用的kernel和ramdisk防止其再次進行系統安裝,還需要加入我們重啟和崩潰后的虛擬機自動的操作:
# vim /etc/xen/centos6 #kernel = "/tmp/vmlinuz"#ramdisk = "/tmp/initrd.img"bootloader = "/usr/bin/pygrub"name = "CentOS6"memory = "512"vcpus = 1disk = ['file:xen/images/centos6.img,xvda,w',]vif = ['bridge=xenbr0',]on_reboot = "restart"on_crash = "destroy"
配置完成后我們就可以啟動虛擬機了:
# xm create -c /etc/xen/centos6
啟動完成后如圖:
查看完成后關閉虛擬機
至此,我們就實現了Xen部署CentOS 6.6系統。
五.通過VNC Server連接進入busybox這個虛擬機
1.安裝和配置VNC Server
# yum install vnc-server
安裝完成后設置vncpasswd,輸入密碼即可;
#vncpasswd
啟動vncserver服務器:
#vncserver &
2.配置busybox虛擬機的配置文件:
# vim /etc/xen/busybox #略...,在下面添加如下內容:vfb = [ 'sdl=1' ]
3.通過windows客戶端的vncviewer連接到Dom0服務器:
輸入密碼訪問:
登錄Xen的Dom0服務器:
然后通過圖形化終端啟動busybox這個簡單的虛擬機:
這是通過sdl軟件連接虛擬機的操作;
4.下面我們通過vnc來連接虛擬機:
#配置busybox的虛擬機配置文件:# vim /etc/xen/busybox #略...,在下面添加如下內容,將原有的sdl更改為vnc:vfb = [ 'vnc=1,vncpasswd=oracle' ]
5.我們在vncserver上安裝vncviewer
# yum install -y tigervnc
6.通過windows的vncviewer連接到服務器的圖形界面操作
#先啟動busybox
#xm create -c busybox
#查看監聽端口5900是否打開
#通過vncviewer連接到busybox
#vncviewer 127.0.0.1:5900
輸入密碼即可進入busybox的虛擬機:
注意:上述兩種圖形化界面服務都是由宿主機的qemu-dm提供;
至此,通過圖形化界面連接到虛擬機的操作就實驗完畢。
新聞熱點
疑難解答
圖片精選