Ubuntu部署KVM服務器

這個KVM跟控制檯切換器之類的東西一點關係沒有,KVM全稱Kernel-based Virtual Machine,是基於Linux核心的虛擬機。KVM被正式導入Linux是在2007年的2.6.20核心上,以替代XEN,不過相對XEN來說,KVM要求CPU硬件上支持虛擬化技術,即Intel-vt或者AMD-v的支 持。這對於2008年之後的機器來說幾乎是標配的。對於這一個時期的CPU都一個勁的堆核心,內存也空前的便宜,硬盤也逐步到了320G起板的水平,可以 大膽的玩虛擬機了!

再此之前,還是先確認系統的CPU是否支持虛擬化:
#egrep ‘(vmx|svm)’ /proc/cpuinfo

應該有返回,如果沒有返回,且確認您的CPU支持虛擬化的話,建議去看看BIOS設置,大多數的主板都支持關閉此技術的。

 

還是以最常用的Ubuntu Server 做例子,desktop的可以直接apt-get install ubuntu-server之後,用server的核心啓動。如果你全程參考本文,個人建議還是通過後一種方式來做,因爲本文的過程需要X環境。

首先,設置好橋接,由於我使用的機器在遠程,操作全部通過ssh,橋接的過程斷開過網絡。讓機房重起數次之後,找到了最穩妥的方法,雖然也要斷網,但好在會自己恢復。

#sudo apt-get install bridge-utils uml-utilities

#vi /etc/network/intefaces

auto lo
iface lo inet loopback

auto tap0
iface tap0 inet manual
up ifconfig $IFACE 0.0.0.0 up
down ifconfig $IFACE down
tunctl_user root

auto br0
iface br0 inet static
bridge_ports eth0 tap0
address 192.168.1.3
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.254

注意這個br0,我通過前端防火牆做的DMZ通道,所以設置了內網地址。主機通過這個ip訪問。所有的虛擬主機也直接設置到192.168.1.0/24網段。

#/etc/init.d/network restart

斷網了,等待幾分鐘後網絡恢復,直接ifconfig

br0       Link encap:Ethernet  HWaddr 02:0b:b1:f7:79:01
inet addr:192.168.1.3  Bcast:192.168.1.255  Mask:255.255.255.0
inet6 addr: fe80::b:b1ff:fef7:7901/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:506941 errors:0 dropped:0 overruns:0 frame:0
TX packets:733910 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:45469237 (45.4 MB)  TX bytes:654152049 (654.1 MB)

eth0      Link encap:Ethernet  HWaddr e4:1f:13:95:82:cf
inet6 addr: fe80::e61f:13ff:fe95:82cf/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:1367878 errors:0 dropped:0 overruns:0 frame:0
TX packets:1541493 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:689206805 (689.2 MB)  TX bytes:1062795975 (1.0 GB)
Memory:81a80000-81aa0000

eth0:0    Link encap:Ethernet  HWaddr e4:1f:13:95:82:cf
inet addr:192.168.1.2  Bcast:0.0.0.0  Mask:0.0.0.0
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
Memory:81a80000-81aa0000

橋接成功!

相對來說,我還是比較喜歡圖形化的管理工具,命令行實在太痛苦

#apt-get install virt-manager libvirtd kvm libvirt-bin

看看是否安裝成功

# ls /dev | grep kvm

直接用ssh通道執行gnome-session就可以連到遠程桌面,執行系統工具裏的“虛擬系統管理器”。添加連接中選擇本地,QEMU/KVM。

然後建立新的虛擬主機,個人覺得這塊跟用VM之類的工具沒有什麼區別了,直接跳過了。不過在第五步的時候,請將網卡設置爲橋接設備,除非僅僅用於NAT方式聯網。

需要注意的是,如果你跟我一樣通過遠程連接,直接打開主機的控制檯的時候,鍵盤會不聽使喚。這不是切換鍵盤設置可以搞定的問題,我嘗試過不同的X客 戶端和操作系統,涵蓋了windows mac linux,全都如此。只能認爲是一個bug。我的最終解決方法是通過ssh通道,將遠程主機的5900 VNC端口轉接回本地,然後再通過vnc客戶端連接本地才得以通過,鍵盤的問題得以解決。很傻,如果你有更好的方式,敬請賜教了!

照舊建立一個虛擬主機,我還是選擇了Ubuntu Server 1110 64bit,也沒有什麼好說的。安裝好之後,配置好了ssh。從此就可以直接拋棄vnc和宿主主機的X訪問了。

在虛擬主機上安裝定製的內核:

#apt-get install kernel-virtual

重起的速度那是嗖嗖的!直接lsmod發覺真的是定製內核,和標準的server內核比起來一點多餘的沒有:

root@www:~# lsmod
Module                  Size  Used by
psmouse                73882  0
serio_raw              13166  0
lp                     17799  0
parport                46562  1 lp
8139too                32177  0
8139cp                 27412  0

對比一下性能吧,python原版,稍作優化:

虛擬機:

root@www:/home/litrin# python TimeCost.py
10240
Cost: 0.508388996124
root@www:/home/litrin# python TimeCost.py
10240
Cost: 0.507208108902
root@www:/home/litrin#

宿主機:

root@vserver:~# python TimeCost.py
10240
Cost: 4.35039806366
root@vserver:~# python TimeCost.py
10240
Cost: 4.35194683075

我開始真的不知道該如何解釋。虛擬機的性能竟然強於宿主機。後來檢查了python的版本才明白,宿主是py2.6而客戶機是2.7,版本不同,性能有差距,但可以肯定的是,從這一點上來說虛擬化的性能損失不大。

最後一步,去掉虛擬機上不需要的東西,精簡主義者!

這次就直接用宿主的命令行操作吧:

#virsh

virsh # list
Id Name                 State
———————————-
30 www.litrin.net       running //我的虛擬主機名爲www.litrin.net,請注意!

virsh # edit www.litrin.net

刪掉vnc, pty, mouse, graphic

virsh # destroy www.litrin.net

virsh # start www.litrin.net

這裏有一個問題也凸現,就是無法使用宿主機的reboot和halt命令,只能強行的destroy。

你同時還可以配合DHCP和主機克隆,大規模快速甚至自動化的架設多個虛擬機,本文不再探討。

儘管現在“雲”已經被用濫了,搞個虛擬機就敢號稱雲託管的大有人在。個人覺得其實對於少數幾臺主機的虛擬化來說,更多的是節約機房的託管費用和主機 成本,這對於稍微大一點的項目並沒有什麼太多的優勢。如果配合上open stack之類的故障平滑遷移技術纔是虛擬化方案的終極利器。

美國VPS專題 更多參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章