1、Xen簡介
linux
Xen採用ICA協議,經過一種叫作準虛擬化的技術得到高性能,甚至在某些與傳統虛擬技術極度不友好的架構上(x86),Xen也有上佳的表現。與那些傳統經過軟件模擬實現硬件的虛擬機不一樣,在Inter VT-X支持下3.0版本以前的Xen須要系統的來賓權限,用來和Xen API進行鏈接。到目前爲止,這種技術已經能夠運用在NetBSD,GUN/Linux,FreeBSD和Plan 9系統上。Sun微系統公司也在積極的將Solaris移植到Xen平臺之上。vim
Xen虛擬機能夠在不中止的狀況在多個物理主機之間實時遷移。在操做過程當中,無你幾在沒有中止工做的狀況下內存被反覆的複製到目標機器。虛擬機在最終目的的開始執行以前,會有一次60-300毫秒的很是斷在的暫停以執行最終的同步化,給人無縫遷移的感受。相似的技術被用來暫停一臺正在運行的虛擬機到磁盤,並切換到另一臺,第一臺虛擬機在之後能夠恢復。後端
Xen 是一個基於X86架構、發展最快、性能最穩定、佔用資源最少的開源虛擬化技術。Xen能夠在一套物理硬件上安全的執行多個虛擬機,與Linux是一個完美的開源組合,SUSE 最早採用了XEN虛擬機技術。它特別適用於服務器應用整合,可有效節省運營成本,提升設備利用率,最大化利用數據中心的IT基礎架構。centos
Xen是英國劍橋大學計算機實驗室開發的一個虛擬化開源項目,XEN 能夠在一套物理硬件上安全的執行多個虛擬機,它和操做平臺結合的極爲密切,佔用的資源最少。編寫文檔時穩定版本爲XEN3.0.支持萬貫虛擬化和超虛擬化。以高性能、佔用資源少著稱,贏得了IBM、AMD、HP、Red Hat和Novell等衆多世界級硬件廠商的高度承認和大力支持,已被國內外衆多企事業單位用於來搭建高性能的虛擬化平臺。安全
Xen 開源的虛擬監視器(VMM),屬於Type-I類型,即半虛擬化類型,xen代碼直接運行在硬件平臺上,在單個物理節點上能支持多達128個虛擬機 bash
2、半虛擬化架構的xen服務器
Xen經過一種叫作半虛擬化的技術得到高效的表現(較少的效能損失,典型的狀況下大約損失2%,在最先的狀況下會有8%的效能耗損,與其它使用徹底的虛擬化卻形成最高到20%損耗的其餘解決方案造成一個明顯的對比),設置在某些與傳統虛擬化技術極度不友好的的架構(x86),Xen也有極佳的表現。網絡
半虛擬化架構圖架構
組成組件:①xen只能虛擬化CPU,虛擬化Memory,虛擬化MMU ------裝在物理設備之上 ②Dom0 ,特權域,安裝上xen的時候第一個安裝的虛擬機;擁有一切可以訪問底層硬件的接口 ③DomU ,用戶域,沒有特權 , xen環境中用域來定義每個虛擬機,每個域一個ID Dom0(特權與) 運行在 hypervesior 之上的一個特殊虛擬機,其內核爲特殊修改過的linux內核,可以訪問IO資源,卻沒法訪問CPU; DomU(非特權域) DomU中的虛擬機針對CPU、Memory、請求中斷等都直接通過 xen hypervisor,而針對IO設備的使用則須要通過Dom0
詳細細節參考下圖frontend
3、Xen的使用方法
一、xen hypervisor的實現
硬件之上---->安裝linux---->安裝xen----->修改grub配置文件,配置其內核爲xen,而再也不須要使用原linux的內核(linux內核和initramfs文件被看成xen模塊)使其可以運行於Dom0上-->從新重啓系統
二、DomU上虛擬機的安裝實現
在Dom0使用工具建立虛擬機--->啓動虛擬機--->安裝虛擬機操做系統
三、工具棧
xm/xend xl
紅帽研發的libvirt:virtsh/libvirtd 、virt-manager、virt-install
4、建立Xen PV模式虛擬機的前提
在PV模式中運行guest系統,須要知足幾個基本前提。 一、 能運行於Xen DomU的(Xen-enabled)內核:Liunx 2.6.24及之後的內核已經添加了對Xen DomU的支持,所以,只要在內核編譯時啓用了相應的功能就能知足此要求,目前多數Linux發行版的內核都已經支持此特性;而此前的版本須要內核在編譯前手動打補丁方可; 二、根文件系統(Root Filesystem):包含了應用程序、系統組件及配置文件等運行DomU的各類所須要文件的文件系統,其不用非得包含內核及對應的ramdisk,後面的這些組件放在Dom0中便可;事實上,用於DomU的內核文件必需要可以容許Dom0訪問到,由於其運行時須要與Xen Hypervisor通訊,所以,這些內核組件能夠位於Dom0可以訪問到的任何文件系統上;然而,目前基於pygrub(可用於Dom0跟非特權域磁盤映像中的內核通訊),此內核文件也能夠直接放置於非特權域的磁盤映像中; 三、DomU內核所須要的內核模塊:內核模塊是內核的重要組成部分,它們通常存儲於根文件系統; ramdisk或者ramfs:這個根據實際須要是個可選組件,若是在內核初始化過程當中不須要依賴於此來裝載額外的驅動程序以訪問根文件系統則也能夠不用提供; swap設備:交換分區可以讓Linux運行比僅有物理內存時更多的進程,所以,提供此組件是常見的作法;固然,它是可選的; 四、DomU配置文件:集中在一塊兒指定前述各組件的配置信息,以及定義其它有關PV DomU的基本屬性的文件;其一般包含全部用於當前DomU屬性配置參數,包括爲其指定磁盤映像和內核文件的位置(或pygrub的位置)等,以及其它許多屬性如當前DomU能夠訪問的設備等,這些設備包括網絡設備、硬盤、顯卡及其它PCI設備;同時,配置文件中也能夠指定新建立的非特權域可使用的物理內存大小及虛擬CPU個數等等; 這裏須要提醒的是,若是計劃爲PV DomU編譯內核,須要以與傳統方式不一樣的方式放置內核及其模塊。前面也已經提到,內核通常會放在Dom0的某路徑下,而內核模塊則須要放在DomU的根文件系統上。 PV DomU的根文件系統能夠以多種不一樣的方式進行安置,好比: 虛擬磁盤映像文件 Dom0沒有使用的額外物理磁盤分區 Dom0沒有使用的邏輯卷 塊級別網絡文件系統,如iSCSI設備 網絡文件系統,如NFS
5、DomU虛擬機實例配置文件
配置文件存放目錄/etc/xen/
kernel:爲當前域指定可用於DomU的內核文件; ramdisk:與kernel指定的內核文件匹配使用的ramdisk映像文件,根據須要指定,此爲可選項; name:當前域的獨有名稱;每一個域必須使用全局唯一的名稱,不然將產生錯誤; memory:當前域的可用物理內存空間大小,單位爲MB,默認爲128; disk:當前域的全部可用磁盤設備列表,格式爲disk = [ 「disk1」, 「disk2」, …],每一個disk都有三個參數進行定義 格式 爲「backend-dev,front-dev,mode」; backend-dev主要有兩種類型,物理設備或虛擬磁盤映像文件,它們的格式分別爲「phy:device」和「file:/path/to/file」; frontend-dev定義其在DomU中的設備類型,通常爲xvd[a-z];mode則用於定義其訪問權限,r爲只讀,w爲讀寫; vcpus:配置給當前域使用的虛擬CPU的個數;默認爲1; root:爲當前域指定其根文件系統所在的設備,這個將做爲內核參數在內核啓動傳遞給內核; extra:傳遞給內核的額外參數,其中selinux=0表示禁用selinux,init則用於指定init程序的路徑;多個參數之間使用空格隔開; on_reboot:執行xm reboot命令或在當前域內部執行重啓操做時由Xen執行的動做;其經常使用的值爲destroy和restart; on_crash:當前域因爲各類緣由崩潰時由Xen執行的動做;其經常使用的值爲destro、restart和preservey,preserve能夠保存系統崩潰前的狀態信息以用於調試; on_shutdown:執行xm shutdown命令或在當前域內部執行關機操做時由Xen執行的動做; vif : vif = ['ip="172.16.100.11",bridge=br0'] type : 設備類型,默認爲netfront mac : 指定mac地址 bridge: 指定橋接到的物理設備 ip : ip地址; script : 配置此接口的腳本文件 vifname : 後端設備名稱 bootloader : 引導器文件的路徑,通常指得PyGrub的路徑;通常在Dom0的某個目錄上
6、Xen虛擬機狀態
r:running,當前跑在哪一個CPU上
b:阻塞
p:暫停
s:中止
c:崩潰
d:dyiing,正在關閉的過程當中
7、配置虛擬機實例
咱們使用Centos6.5-x86_64版本的linux系統
下載xen安裝包存放於/root目錄下
kernel-xen-release-6-4.noarch.rpm kernel-xen-3.7.4-1.el6xen.x86_64.rpm kernel-xen-devel-3.7.4-1.el6xen.x86_64.rpm kernel-xen-firmware-3.7.4-1.el6xen.x86_64.rpm xen-4.1.3-2.el6.x86_64.rpm xen-licenses-4.1.3-2.el6.x86_64.rpm xen-runtime-4.1.3-2.el6.x86_64.rpm xen-libs-4.1.3-2.el6.x86_64.rpm xen-hypervisor-4.1.3-2.el6.x86_64.rpm
一、安裝xen
# yum -y install *.rpm
二、編輯grub引導文件
#vim /etc/grub.conf
default=0 timeout=5 splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS (3.7.4-1.el6xen.x86_64) kernel /xen.gz dom0_mem=1024M cpufreq=xen dom0_max_vcpus=2 dom0_vcpus_pin root (hd0,0) module /vmlinuz-3.7.4-1.el6xen.x86_64 ro root=UUID=4516b2fb-0553-4f53-88bc-19c53031a4be rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet module /initramfs-3.7.4-1.el6xen.x86_64.img
三、重啓系統,默認進入xen內核
# shutdown -r now
登陸
#uname -r
3.7.4-1.el6xen.x86_64
四、建立虛擬機實例
# cd /etc/xen # vim centos6 kernel="/root/vmlinuz" ramdisk="/root/initrd.img" name="centos6" vcpus=2 memory=512 disk=['file:/xen/vm1/centos6.qcow2,xvda,w'] vif=['bridge=br0'] on_reboot="destroy"
五、提供kernel和initrd.img文件存放於/root目錄下
# cd /root kernel和initrd.img能夠從光盤鏡像文件中獲取 # mount /dev/cdrom /mnt # cd /mnt # cp kernel initrd.img /root
六、建立稀疏格式的虛擬磁盤鏡像文件,使用qemu-img
# mkdir -pv /xen/vm1 # qemu-img create -f qcow2 -o size=120G,preallocation=metadata /xen/vm1/centos6.qcow2
七、建立橋設備br0,將其中的eth0接口橋到br0上
# brctl addbr br0 # ifconfig eth0 0 up # brctl addif br0 eth0 # ifconfig br0 172.16.13.3/16 up # route add default gw 172.16.0.1 # brctl stp br0 on # brctl show
八、建立虛擬機
# cd /etc/xen # xm create centos6 # xm list Name ID Mem VCPUs State Time(s) Domain-0 0 1014 2 r----- 53.0 centos6 1 2048 2 -b---- 10.6 # xm destroy centos6 關閉域名爲centos6的虛擬機電源
九、虛擬機安裝操做系統
# cd /etc/xen # xm create -c centos6
等待系統安裝完成並重啓,注意此處的重啓爲關閉虛擬機,由於咱們在虛擬機實例配置文件
中使用了on_reboot="destroy" ,一旦重啓就關閉電源
十、再次修改虛擬機實例文件
# cd /etc/xen # vim centos6 # kernel="/root/vmlinuz" 註釋這一行 # ramdisk="/root/initrd.img" 註釋這一行 bootloader="/usr/bin/pygrub" 添加這一行 name="centos6" vcpus=2 memory=512 disk=['file:/xen/vm1/centos6.qcow2,xvda,w'] vif=['bridge=br0'] on_reboot="destroy" 從新連入控制檯 # create console centos6
登陸系統後,查看一些信息
至此,使用xen建立一個centos6.5虛擬機實例已經成功實現!
PS:該篇只作xen的基礎介紹與如何在xen的半虛擬化平臺建立虛擬機,關於xen的更多更高級的使用下期推出,51改版的如此犀利~~