主流服務器虛擬化技術簡單使用——Xen(一)


Tips:因為博客園網頁布局的原因,部分圖片顯示不清晰,可以放大網頁查看清晰圖片。

如果系統使用物理機,需要在BIOS里面開啟Intel VT-x(或AMD-V),如果是VMware workstation,還須將處理器的虛擬化引擎中的三項開啟。

本機主要硬件配置(使用VMware workstation模擬)

CPU:i5-6200U(4核)

內存:4G

硬盤:SATA 100Gx2

網卡:Intel(R) 82574Lx2

安裝Linux

在部署KVM的時候,Linux我選擇的是CentOS。這是因為KVM是Redhat的開源項目,而CentOS和Redhat關系密切,這樣一來就比較容易找到幫助文檔。Xen也支持多種Linux發行版的,官方文檔建議選擇一種比較熟悉的Linux發行版即可。不過我在使用CentOS部署Xen的時候遇到一些問題,如果按照Xen文檔Linux使用Debian應該比較容易成功。

Xen官方部署文檔:https://wiki.xenproject.org/wiki/Xen_Project_Beginners_Guide#What_is_this_Xen_Project_software_all_about.3F

本文使用的是CentOS 7.4,基礎環境選擇GNOME Desktop,附加環境選擇Compatibility Libraries、Development tools。

Tips:固件建議使用BIOS,我使用CentOS 7.4+UEFI,安裝后無法啟動Xen。

CentOS 7.4 安裝Xen

這里貼出我安裝的操作步驟,具體的操作意義見下文“安裝Xen遇到的問題”。

[root@localhost ~]# yum -y install centos-release-xen-48.x86_64 
[root@localhost ~]# sed -i -e "s/enabled=1/enabled=0/g" /etc/yum.repos.d/CentOS-Xen-48.repo
[root@localhost ~]# yum --enablerepo=centos-virt-xen-48 -y update kernel
[root@localhost ~]# yum --enablerepo=centos-virt-xen-48 -y install xen
[root@localhost ~]# yum -y install gnutls-utils vte3 dbus-libs python-ipaddr
[root@localhost ~]# yum --enablerepo=centos-virt-xen-48 -y install libvirt libvirt-daemon-xen virt-install virt-manager
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
CentOS-Base.repo CentOS-CR.repo CentOS-Debuginfo.repo CentOS-fasttrack.repo CentOS-Media.repo CentOS-Sources.repo CentOS-Vault.repo CentOS-Xen-48.repo
[root@localhost yum.repos.d]# mv CentOS-Base.repo CentOS-Base.repo.bak

 

安裝Xen遇到的問題

百度上有很多關於CentOS 7 部署Xen的文章,多數和雲棲社區這篇差不多https://yq.aliyun.com/articles/72452?spm=a2c4e.11155472.0.0.3bd421f04Qra8F,不過我在CentOS 7.4 實踐后發現略微有點問題,整理如下:

1.下載安裝xen源

[root@localhost ~]# yum -y install centos-release-xen

2.添加xen的源

[root@localhost ~]# sed -i -e "s/enabled=1/enabled=0/g" /etc/yum.repos.d/CentOS-Xen.repo

Tips:repo配置enabled=0是禁用該源,enabled=1是啟用該源,sed的用法參考https://www.cnblogs.com/starof/p/4181985.html

3.更新centos內核、安裝Xen

[root@localhost ~]# yum --enablerepo=centos-virt-xen -y update kernel
[root@localhost ~]# yum --enablerepo=centos-virt-xen -y install xen

第1步下載安裝xen源很好理解;

第2步用enabled=0替換enabled=1,實際是將Xen源關閉了,推測這樣做是為了避免以后yum誤使用該Xen源。不過這並不太重要,這是因為第3步yum --enablerepo=centos-virt-xen會指定使用該源,如果該源已禁用(enabled=0),該參數也可以讓yum暫時使用該源。但是我在CentOS 7.4上執行,報錯Error getting repository data for centos-virt-xen, repository not found,我打開/etc/yum.repos.d/CentOS-Xen.repo。

[centos-virt-xen-46]
name=CentOS-$releasever - xen
baseurl=http://mirror.centos.org/centos/$releasever/virt/$basearch/xen-46
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Virtualization

[centos-virt-xen-46-testing]
name=CentOS-$releasever - xen - testing
baseurl=http://buildlogs.centos.org/centos/$releasever/virt/$basearch/xen-46
gpgcheck=0
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Virtualization

發現安裝的Xen源里具體只有[centos-virt-xen-46]和[centos-virt-xen-46-testing]兩個源,所以稍微修改第3步的命令:

[root@localhost ~]# yum --enablerepo=centos-virt-xen-46 -y update kernel
[root@localhost ~]# yum --enablerepo=centos-virt-xen-46 -y install xen

Tips:[centos-virt-xen-46-testing]里面的軟件處於測試中,所以這里不使用。

發現還是無法更新內核,安裝xen,關鍵提示信息如下:

failure: repodata/repomd.xml from centos-virt-xen-46: [Errno 256] No more mirrors to try.
http://mirror.centos.org/centos/7/virt/x86_64/xen-46/repodata/repomd.xml: [Errno 14] HTTP Error 404 - Not Found

我訪問:http://mirror.centos.org/centos/7/virt/x86_64/發現下級目錄並沒有xen-46,所以自然會404,這級目錄下面只有xen-48和xen-410,所以我認為正確的步驟應該如下:

[root@localhost ~]# yum -y install centos-release-xen-48.x86_64 
[root@localhost ~]# sed -i -e "s/enabled=1/enabled=0/g" /etc/yum.repos.d/CentOS-Xen-48.repo
[root@localhost ~]# yum --enablerepo=centos-virt-xen-48 -y update kernel
[root@localhost ~]# yum --enablerepo=centos-virt-xen-48 -y install xen

Tips:CentOS默認源(Base)中只有centos-release-xen、centos-release-xen-48.x86_64 這兩個xen源,是沒有centos-release-xen-410.x86_64 的。

4.設置Domain0

[root@localhost ~]# cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
GRUB_CMDLINE_XEN_DEFAULT="dom0_mem=1024M,max:1024M cpuinfo com1=115200,8n1 console=com1,tty loglvl=all guest_loglvl=all"
GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT="console=hvc0 earlyprintk=xen nomodeset"

dom0_mem=1024M,max:1024M是設置Domain0的內存和最大可用內存,一定不能超過服務器的實際內存,否則進入不了Domain 0;Xen-48默認值是1G,我的服務器內存是4G,所以無需修改。

5.安裝管理工具

[root@localhost ~]# yum --enablerepo=centos-virt-xen-48 -y install libvirt libvirt-daemon-xen virt-install virt-manager

當有多個源的時候 yum --enablerepo=centos-virt-xen-48只是優先使用centos-virt-xen-48,而從centos-virt-xen-48安裝這些工具因為缺少相關依賴包,將無法安裝。該命令會從其他可用源(Base)中安裝這些工具,但是CentOS 7.4 Base中的libvirt不可用,詳細可以參考:https://www.cnblogs.com/yogurtwu/p/9988974.html相關部分。即使能夠成功安裝並運行,也不能確定Base源的工具版本是否支持xen-48,。因此這里我先從Base中安裝這些工具需要的依賴包,再安裝centos-virt-xen-48里的這些管理工具。

[root@localhost ~]# yum -y install gnutls-utils vte3 dbus-libs python-ipaddr

穩妥起見,禁用Base源,再安裝這些工具

[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
CentOS-Base.repo  CentOS-CR.repo  CentOS-Debuginfo.repo  CentOS-fasttrack.repo  CentOS-Media.repo  CentOS-Sources.repo  CentOS-Vault.repo  CentOS-Xen-48.repo
[root@localhost yum.repos.d]# mv CentOS-Base.repo CentOS-Base.repo.bak

再安裝管理工具

[root@localhost ~]# yum --enablerepo=centos-virt-xen-48 -y install libvirt libvirt-daemon-xen virt-install virt-manager

Tips:確定centos-virt-xen-48缺少依賴包的方法,先禁用Base,然后指定從centos-virt-xen-48安裝這些管理工具,yum --enablerepo=centos-virt-xen-48 -y install libvirt libvirt-daemon-xen virt-install virt-manager,關鍵報錯信息如下:

Error: Package: libvirt-client-4.1.0-2.xen48.el7.x86_64 (centos-virt-xen-48)
Requires: gnutls-utils
Error: Package: virt-manager-1.2.1-108.xen48.el7.noarch (centos-virt-xen-48)
Requires: vte3
Error: Package: libvirt-daemon-driver-network-4.1.0-2.xen48.el7.x86_64 (centos-virt-xen-48)
Requires: libdbus-1.so.3(LIBDBUS_1_3)(64bit)
Error: Package: virt-manager-common-1.2.1-108.xen48.el7.noarch (centos-virt-xen-48)
Requires: python-ipaddr
Error: Package: libvirt-daemon-4.1.0-2.xen48.el7.x86_64 (centos-virt-xen-48)
Requires: libdbus-1.so.3(LIBDBUS_1_3)(64bit)
Error: Package: libvirt-daemon-driver-nwfilter-4.1.0-2.xen48.el7.x86_64 (centos-virt-xen-48)
Requires: libdbus-1.so.3(LIBDBUS_1_3)(64bit)
Error: Package: libvirt-libs-4.1.0-2.xen48.el7.x86_64 (centos-virt-xen-48)
Requires: libdbus-1.so.3(LIBDBUS_1_3)(64bit)
You could try using --skip-broken to work around th

有個小插曲,libdbus-1.so.3我不知道是個什么包,而且在Base中找不到,我百度libdbus-1.so.3發現它和dbus-lib偶爾會同時出現,從Base中安裝這些管理工具的時候,也有dbus-lib,測試安裝dbus-lib后也未提示Requires: libdbus-1.so.3(LIBDBUS_1_3)(64bit)。

6.添加xen啟動項

[root@localhost ~]# /bin/grub-bootxen.sh

就是運行一個腳本,CentOS官網描述這將生成/boot/grub2/grub.cfg;https://wiki.centos.org/zh/HowTos/Xen/Xen4QuickStart

7.重啟服務器

重啟服務器后,有5個啟動項;第一項是啟動CentOS(更新后的內核4.9.127)和xen,也就是domain 0和hypervisor;第二項是CentOS和Xen的高級啟動項,第三項是以新的內核4.9.127啟動CentOS,最后兩項是舊內核(3.10.0)和救援啟動項;使用xen啟動第一項。

8.驗證Xen是否成功運行。

xl info輸出類似信息就代表Xen成功運行。

使用Xen

Xen也可以使用virt-install,以及專屬的xe、xl等命令行工具,簡單使用還是推薦GUI工具virt-manager

Tips:這里可以看到Xen特有Domain-0

Tips:virt-manager管理Xen和KVM的一點區別在於,Xen虛擬化類型可以選擇全虛擬化或者半虛擬化,全虛擬化使用方法和KVM相同,半虛擬化我暫未嘗試。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM