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