引言:最近,單位購進(jìn)一臺(tái)配置較高的服務(wù)器,準(zhǔn)備將單位重要的網(wǎng)絡(luò)服務(wù)安裝在這一臺(tái)服務(wù)器上,同時(shí)要兼顧維護(hù)方便。筆者決定采用服務(wù)器虛擬化來解決。由于單位的門戶網(wǎng)站、數(shù)據(jù)中心和電子郵件都是基于Linux系統(tǒng),從兼容性和經(jīng)濟(jì)性方面考慮,筆者準(zhǔn)備采用基于Linux系統(tǒng)的KVM解決方案。
單位的服務(wù)器設(shè)備大都是2009年左右采購的,早已進(jìn)入淘汰期,受經(jīng)費(fèi)的限制,一直沒有得到更新。雖然在管理員的精心維護(hù)之下,這些設(shè)備大部分還在正常運(yùn)行,但由于單位的門戶網(wǎng)站、數(shù)據(jù)中心、電子郵件等重要服務(wù)都安裝在這些設(shè)備之上,管理維護(hù)的壓力越來越大。不久前,單位終于購進(jìn)了兩臺(tái)配置較高的服務(wù) 器(E5-2620V3×2,64G,1T×6),除有一臺(tái)必須安裝指定服務(wù)外,還有一臺(tái)服務(wù)器可以自由支配。怎樣將單位重要的網(wǎng)絡(luò)服務(wù)安裝在一臺(tái)服務(wù)器上面,同時(shí)又要兼顧維護(hù)方便呢?筆者不禁打起了服務(wù)器虛擬化的主意。
目前,常見的服務(wù)器虛擬化解決方案有基于Linux系統(tǒng)的KVM,基于Windows系統(tǒng)的Hyper-V,以及適合任何系統(tǒng)的老牌虛擬化軟件VMware。由于單位的門戶網(wǎng)站、數(shù)據(jù)中心和電子郵件都是基于Linux系統(tǒng),從兼容性和經(jīng)濟(jì)性方面考慮,筆者準(zhǔn)備采用基于Linux系統(tǒng)的KVM解決方案。
KVM服務(wù)器系統(tǒng)我們準(zhǔn)備采用最新的CentOS7,CentOS是 RHEL(Red Hat Enterprise Linux)源代碼再編譯的產(chǎn)物,而且在RHEL的基礎(chǔ)上修正了不少已知的Bug,相對(duì)于其他Linux發(fā)行版,其穩(wěn)定性值得信賴。
從CentOS官方網(wǎng)站下載最新的DVD版本,刻錄DVD光盤或者寫入優(yōu)盤進(jìn)行系統(tǒng)安裝。在安裝過程中我們需要注意以下幾點(diǎn):系統(tǒng)默認(rèn)語言盡量選擇英語,如果選擇中文,將來使用VNC遠(yuǎn)程管理的時(shí)候會(huì)出現(xiàn)亂碼。軟件選擇使用“最小虛擬化主機(jī)”(如圖1),其他軟件需要的時(shí)候再安裝。手動(dòng)配置硬盤分區(qū),根據(jù)自己的需要,可以為虛擬機(jī)劃分單獨(dú)的硬盤空間(比如劃分單獨(dú)的/data分區(qū))。
系統(tǒng)安裝完畢以后,首先運(yùn)行yum update更新一下系統(tǒng),將系統(tǒng)升級(jí)到最新,然后運(yùn)行以下命令,查看是否已經(jīng)在BIOS中開啟了VT。
# lsmod|grep kvm
如果在命令輸出中包含kvm 525409 1 kvm_intel等字樣,說明已經(jīng)開啟了VT,否則就要重啟系統(tǒng)進(jìn)入BIOS進(jìn)行設(shè)置,啟動(dòng)VT功能。
KVM虛擬機(jī)支持多種網(wǎng)絡(luò)模式,比較常用的是Bridged(橋接模式)和NAT(網(wǎng)絡(luò)地址轉(zhuǎn)換模式),我們需要虛擬機(jī)具備和獨(dú)立主機(jī)相同的功能,可以與其他機(jī)器互相訪問,所以在這里我們選擇Bridged(橋接模式)。
圖1 選擇最小虛擬化主機(jī)安裝模式
(1)復(fù)制ifcfg-enp2s0f0(每臺(tái)服務(wù)器的網(wǎng)卡名稱不一樣,以自己的名稱為準(zhǔn))配置文件為 ifcfg-br0,并將ifcfg-br0修改為如下配置:
TYPE=Bridge
#橋接模式
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=10.7.3.220
#服務(wù)器的IP地址
NETMASK=255.255.255.0
GATEWAY=10.7.3.1
#網(wǎng)關(guān)地址
(2) 原 網(wǎng) 卡ifcfgenp2s0f0配置文件只需要保留以下內(nèi)容,其他全部注釋掉:
NAME= enp2s0f0
DEVICE= enp2s0f0
ONBOOT=yes
BRIDGE=br0
(3)重啟網(wǎng)絡(luò)讓橋接模式生效
# service network restart
作為網(wǎng)絡(luò)服務(wù)器,一般不用安裝圖形界面,但考慮到使用virt-manager在圖形界面下管理虛擬機(jī)非常方便,加之以后可能需要使用VNC遠(yuǎn)程管理KVM服務(wù)器,所以安裝一個(gè)最基本的圖形界面還是非常有必要的。
(1)安裝virt-manager管理工具
# yum install virtmanager
(2)安裝圖形界面
# yum groupinstall"X Window System"
# yum install gnome-classic-session gnometerminal nautilus-openterminal control-center liberation-mono-fonts
(3)設(shè)置系統(tǒng)默認(rèn)啟動(dòng)圖形界面
# unlink /etc/systemd/system/default.target
# ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
如果不想讓KVM服務(wù)器默認(rèn)啟動(dòng)圖形界面,這一步可以不做設(shè)置,當(dāng)需要啟用圖形界面的時(shí)候,輸入startx即可。
(4)重新啟動(dòng)系統(tǒng)
# reboot
服務(wù)器重啟之后,我們就有一個(gè)具備圖形界面的KVM服務(wù)器了。
KVM服務(wù)器安裝完畢以后,就可以根據(jù)需要建立自己的虛擬機(jī)了。如何將正在運(yùn)行的服務(wù)器平滑地遷移到KVM虛擬機(jī),這是我們面臨的一個(gè)大問題。所幸,RedHat已經(jīng)為我們研發(fā)了virt-p2v這個(gè)將物理機(jī)轉(zhuǎn)化為虛擬機(jī)的工具,它可以通過SSH連接物理機(jī)和轉(zhuǎn)化服務(wù)器(轉(zhuǎn)化服務(wù)器也可以安裝在KVM服務(wù)器上面)對(duì)目標(biāo)服務(wù)器進(jìn)行在線遷移。
圖2 配置連接轉(zhuǎn)化服務(wù)器所需賬號(hào)
圖3 配置虛擬機(jī)各項(xiàng)參數(shù)
(1)安裝轉(zhuǎn)化服務(wù)器
# yum install virtv2v
轉(zhuǎn)化服務(wù)器可以單獨(dú)安裝,也可以和KVM服務(wù)器安裝在一起,為方便起見,我們將轉(zhuǎn)化服務(wù)器安裝在KVM服務(wù)器上面。
(2)制作virt-p2v遷移工具
從 這 個(gè) 網(wǎng) 站(http://oirase.annexia.org/virtp2v/)下載最新的P2V光盤鏡像文件,然后刻錄光盤或者寫入優(yōu)盤待用。
(3)配置轉(zhuǎn)化服務(wù)器sshd服務(wù)
修 改/etc/ssh/sshd_config配置文件,并做如下修改:
AllowTcpForwarding yes #允許tcp轉(zhuǎn)發(fā)
PermitRootLogin yes #允許root用戶登錄
啟動(dòng)sshd服務(wù)
# systemctl start sshd.service
查看sshd運(yùn)行狀態(tài)
# netstat -anput|grep ssh
將P2V工具光盤或者優(yōu)盤接入目標(biāo)服務(wù)器,然后設(shè)置目標(biāo)服務(wù)器從光盤或者優(yōu)盤啟動(dòng),進(jìn)入P2V配置界面(如圖2),輸入轉(zhuǎn)化服務(wù)器IP地址、用戶名和密碼(在這里我們使用root賬號(hào)),勾選“Use sudo when running virt-v2v”,然后點(diǎn)擊左下角的“Configure network...”為P2V工具設(shè)置一個(gè)可用的局域網(wǎng)IP地址。最后,點(diǎn)擊“Test connection”檢查一下SSH是否可以連接,如果出現(xiàn)“connected to the conversion server”的提示,說明P2V工具已經(jīng)成功連接到轉(zhuǎn)化服務(wù)器。
點(diǎn)擊“next”進(jìn)入配置虛擬機(jī)界面(如圖 3),在這里我們可以根據(jù)自己的實(shí)際情況,配置虛擬機(jī)的名稱、CPU數(shù)量和內(nèi)存大小,勾選需要進(jìn)行轉(zhuǎn)化的目標(biāo)服務(wù)器上的所有磁盤和網(wǎng)絡(luò)接口(如果P2V工具使用優(yōu)盤啟動(dòng),不要勾選轉(zhuǎn)化優(yōu)盤)。
需要特別注意的是,在Virt-v2v輸出選項(xiàng)卡中,Output to支持很多類型,比較常用的是local和libvirt。如果轉(zhuǎn)化服務(wù)器和KVM服務(wù)器安裝在一起,libvirt選項(xiàng)可以直接生成正常運(yùn)行的虛擬機(jī);如果你想指定存放路徑,手工添加虛擬機(jī),可以選擇local類型,然后在Output storage里面指定路徑。Output format支持raw和qcow2兩種虛擬文件格式,P2V工具默認(rèn)輸出raw格式,不要試圖修改輸出格式為qcow2,否則會(huì)在轉(zhuǎn)化過程中出錯(cuò)。如果想在虛擬機(jī)中使用qcow2格式,可以在轉(zhuǎn)化完成后再進(jìn)行設(shè)置。這里我們選擇輸出類型為libvirt,其他選項(xiàng)保持默認(rèn)即可,注意勾選“Enable server-side debugging”選項(xiàng),以便出錯(cuò)時(shí)我們可以進(jìn)行調(diào)試工作。
虛擬機(jī)配置全部完成后,就可以點(diǎn)擊“Start conversion”按鈕進(jìn)行轉(zhuǎn)化了,根據(jù)網(wǎng)絡(luò)速度和硬件配置的不同,轉(zhuǎn)化物理機(jī)所需的時(shí)間也不盡相同,一般說來,一塊300GB容量的磁盤需要轉(zhuǎn)化8-10個(gè)小時(shí)的時(shí)間。您可以根據(jù)自己的實(shí)際情況,安排在晚上或者周末進(jìn)行服務(wù)器的遷移工作,盡量減少服務(wù)器的宕機(jī)時(shí)間。一旦遷移工作完成,應(yīng)該馬上關(guān)閉目標(biāo)服務(wù)器,如無必要就不要再重新啟動(dòng)它。
登錄KVM服務(wù)器,會(huì)發(fā)現(xiàn)我們轉(zhuǎn)化物理機(jī)生成的虛擬機(jī)已經(jīng)可以正常運(yùn)行了,只是它的虛擬文件系統(tǒng)是raw格式,如果需要快照功能,那么qcow2格式也許更加適合你,兩種虛擬文件格式的性能差距已經(jīng)很小,qcow2格式完全可以滿足我們的需要。使用如下命令可以將raw格式的虛擬文件轉(zhuǎn)換成qcow2格式:
# Qemu-img convert-f raw -O qcow2 raw文件名 qcow2文件名
虛擬文件格式轉(zhuǎn)換完成后,記著在虛擬機(jī)的虛擬硬件列表中將虛擬磁盤的格式由raw更改為qcow2,然后重新啟動(dòng)虛擬機(jī)。
到目前為止,我們已經(jīng)有了一臺(tái)正常運(yùn)行的KVM服務(wù)器,通過virt-manager軟件,可以在圖形界面下完成對(duì)虛擬機(jī)的克隆、安裝、調(diào)試和開關(guān)機(jī)等絕大部分操作。不過,這些操作必須在機(jī)房里才可以進(jìn)行,安裝維護(hù)極為不便,為此我們需要安裝VNC遠(yuǎn)程管理工具。
(1)安裝VNC服務(wù)器
# yum install tigervnc-server -y
(2)修改VNC配置
VNC配置文件在/etc/systemd/system目錄下,我們可以將 /lib/systemd/sytem/vncserver@.service模板文件復(fù)制一份到該目錄下并修改名稱。
# cp /lib/systemd/system/vncserver@.service/etc/systemd/system/vncserver@:1.service
然后打開配置文件/etc/systemd/system/vncserver@:1.service替換掉默認(rèn)用戶名,找到下面這一行:
ExecStart=/sbin/runuser -l <USER> -c"/usr/bin/vncserver %i"
PIDFile=/home/<USER>/.vnc/%H%i.pid
這里需要用root賬號(hào)登錄,所以替換成:
ExecStart=/sbin/runuser -l root -c "/usr/bin/vncserver %i"
PIDFile=/root/.vnc/%H%i.pid
不建議使用普通賬號(hào)登錄VNC,因?yàn)槿菀桩a(chǎn)生各種錯(cuò)誤。
(3)重新加載systemd
# systemctl daemonreload
(4)設(shè)置VNC密碼
# vncpasswd
確保輸入的密碼多于6個(gè)字符。
(5)關(guān)閉和禁止防火墻
# systemctl stop firewalld.service
圖4 使用VNC客戶端連接KVM服務(wù)器
#關(guān)閉防火墻
# systemctl disable firewalld.service
#禁止開機(jī)啟動(dòng)防火墻
(6)開啟VNC服務(wù)
# systemctl enable vncserver@:1.service #開機(jī)自動(dòng)啟動(dòng)VNC服務(wù)
# systemctl start vncserver@:1.service #啟動(dòng)VNC服務(wù)
(7)使用客戶端連接VNC
現(xiàn)在,VNC服務(wù)器的安裝已經(jīng)完成,不過要連接到VNC服務(wù)器,我們還需要在本地計(jì)算機(jī)上安裝僅供連接遠(yuǎn)程計(jì)算機(jī)使用的VNC客戶端。你可以用像Tightvnc viewer和Realvnc viewer此類的客戶端來連接到VNC服務(wù)器(如圖4)。
如果需要更多的用戶連接VNC服務(wù)器,那就需要?jiǎng)?chuàng)建新的配置文件和端口。請(qǐng)返回到第二步,添加一個(gè)新的用戶和端口。你需要?jiǎng)?chuàng)建類似vncserver@:x.service的配置文件,并替換該文件里的用戶名和之后步驟里相應(yīng)的文件名、端口號(hào),并確保登錄VNC服務(wù)器用的是之前配置VNC密碼的那個(gè)用戶名。
(1)自動(dòng)開啟虛擬服務(wù)
# Systemctl enable libvirtd
(2)查看虛擬機(jī)名稱及狀態(tài)
# virsh list --all
(3)讓虛擬機(jī)開機(jī)自動(dòng)啟動(dòng)
# virsh autostart 虛擬機(jī)名稱
設(shè)置完成后,可以在/etc/libvirt/qemu/autostart下看到已設(shè)置自動(dòng)啟動(dòng)的KVM配置文件鏈接。
經(jīng)過一段時(shí)間的運(yùn)行,證明虛擬化技術(shù)具備很多獨(dú)特的優(yōu)勢(shì),網(wǎng)絡(luò)管理和維護(hù)變得非常簡(jiǎn)單,可以減輕網(wǎng)絡(luò)管理人員的工作壓力。對(duì)于很多基層單位來說,網(wǎng)絡(luò)服務(wù)虛擬化是一個(gè)不錯(cuò)的選擇。