linux安裝KVM

KVM作爲linux內核的一部分,有着無法比擬的優勢,相信KVM的大範圍企業應用指日可待。

一、KVM宿主服務器環境配置

  1. 查看CPU是否支持VT技術
    cat /proc/cpuinfo | egrep 'vmx|svm' 
    flags : fpu vme de pse tsc msr pae mce cx8 apic
    mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2
    ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts
    rep_good aperfmperf pni dtes64 monitor ds_cpl vmx tm2 ssse3 cx16
    xtpr pdcm dca sse4_1 lahf_lm dts tpr_shadow vnmi flexpriority
    如果執行指令後有類似返回,則證明CPU支持VT

  2. 安裝KVM組件
    yum groupinstall Virtualization 
    yum groupinstall "Virtualization Platform" 
    如果使用橋接模式需安裝bridge-utils
    yum install -y bridge-utils

  3. 檢查KVM模塊加載
    lsmod | grep kvm 
        kvm_amd                37434  4  
        kvm                   292815  1 kvm_amd 
    如果執行指令後有類似返回,則證明KVM模塊加載正常,否則檢查BIOS中是否開啓了CPU VT支持

  4. 安裝virtsh virt-install 管理工具
    yum install libvirt-client python-virtinst 

  5. 配置網絡橋接
    參考:http://www.techotopia.com/index.php/Creating_an_RHEL_6_KVM_Networked_Bridge_Interface
    5.1安裝tunctl:
    #yum install -y tunctl
    5.2 禁用網絡管理器:
    #chkconfig NetworkManager off ##和橋接有衝突,要關閉
    #service NetworkManager stop
    5.3 修改eth0爲物理網口,br0爲橋接網口配置文件:
    #cat ifcfg-br0
    DEVICE=br0
    TYPE=Bridge
    BOOTPROTO=static
    IPV6INIT=no
    ONBOOT=yes
    IPADDR=192.168.1.66(真實ip地址)
    NETMASK=255.255.255.0
    GATEWAY=192.168.1.1
    DNS1=8.8.8.8
    DELAY=0

cat ifcfg-eth0

DEVICE=eth0
TYPE=Ethernet
BRIDGE=br0
BOOTPROTO=none
IPV6INIT=no
ONBOOT=yes
附加說明:這裏配置成橋接方式,實際上本機的數據包發送是通過br0發送的,br0的TYPE是Bridge,其它的信息跟配置一個物理網卡一樣, 本機的eth0通過橋接到br0(通過BRIDGE指定)進行通信,它根本不需要配置IP信息,實際上數據發送還是通過本機的物理網卡。
5.4 最後重啓網絡

service network restart

5.5 查看橋接網絡

brctl show

bridge name bridge id STP enabled interfaces
br0 8000.0021cc6b6f2c no eth0
virbr0 8000.525400ac7ebe yes virbr0-nic
接口eth0通過br0進行橋接。birbr0-nic通過virbr0進行橋接,這個是默認的設置,當使用NAT時使用。

二、虛擬機安裝
1. 建立虛擬機磁盤鏡像文件
qcow2格式是kvm支持的標準格式,raw格式爲虛擬磁盤文件通用格式。有測試數據表明raw格式的I/O性能略高於qcow2格式,但是在加密,容量,快照方面qcow2格式有優勢
qemu-img create -f qcow2 test.qcow2 20G //建立qcow2格式磁盤文件
qemu-img create -f raw test.raw 20G  //建立raw格式磁盤文件
qemu-img info test.qcow2 //查看已經創建的虛擬磁盤文件

  1. 建立虛擬機實例
    創建1G內存、2核CPU、單網卡,磁盤和網絡驅動使用virtio的linux虛擬機
    virt-install --name rhel6 \  #指定虛擬機名
    --boot network,cdrom,menu=on \  #指定啓動方式
    --ram 1024 --vcpus=2 \  #內存,cpu
    --os-variant=rhel6 \  #指定系統類型
    --accelerate \ 
    --cdrom=/troodon/ISO/CentOS-6.2-x86_64-bin-DVD1.iso \  #指定安裝鏡像路徑
    --disk path=/troodon/KVM/test01/test01.img,size=30,format=qcow2,bus=virtio \ 
    --bridge=br0,model=virtio --mac=54:52:00:01:79:e9 \ 
    --vnc --vncport=5991 --vnclisten=0.0.0.0.  #開啓vnc並指定vnc端口

創建8G內存、4核CPU、雙網卡,磁盤和網絡驅動使用virtio的linux虛擬機
virt-install --name rhel5.2 \ 
--boot network,cdrom,menu=on \ 
--ram 8192 --vcpus=4 \ 
--os-variant=rhel6 \ 
--cdrom=/troodon/ISO/CentOS-6.2-x86_64-bin-DVD1.iso \ 
--disk path=/troodon/KVM/test01/test01.img,format=qcow2,bus=virtio \ 
--bridge=br0,model=virtio --mac=54:52:00:0b:8b:79 \
--bridge=br1,model=virtio --mac=54:52:00:7e:8e:cd \
--vnc --vncport=5991 --vnclisten=0.0.0.0 

創建1G內存、1核CPU、單網卡,磁盤和網絡驅動使用virtio的windows虛擬機
virt-install --name win2k3 \ 
--ram 1024 --vcpus=1 \ 
--os-variant=win2k3 \ 
--accelerate \ 
--cdrom=/troodon/ISO/Windows/2003/win2k3sp1.iso \ 
--disk path=/troodon/KVM/win2k3/win2k3.img,size=5,format=qcow2,bus=virtio \ 
--bridge=br0,model=virtio \ 
--vnc --vncport=5991 --vnclisten=0.0.0.0 

一些解釋:
virtio驅動對於磁盤和網絡I/O性能有很大提升(默認qemu驅動),linux虛擬機安裝完成後自動加載virtio驅動,windows虛擬機需要下載virtio驅動後安裝
--mac參數指定網卡mac地址,如果不指定系統會自動分配
虛擬機配置文件存儲在 /etc/libvirt/qemu 目錄,配置文件爲XML格式
開機自啓動的虛擬機配置可以通過鏈接放到 /etc/libvirt/qemu/autostart 目錄,配置文件爲XML格式

  1. 虛擬機安裝指令 virt-install 簡介
    --name 指定虛擬機名稱,virsh操作指定虛擬機時所需要的參數,不可以重複。 
    --ram 分配內存大小,安裝完成後可以用 virsh 調整。 
    --vcpus 分配CPU核心數,最大與實體機CPU核心數相同,安裝完成後也可以用 virsh 調整。 
    --disk 指定虛擬機鏡像, size 指定分配大小單位爲G。 
    --network 網絡類型,此處用的是默認,一般用的應該是 bridge 橋接。 
    --os-variant 指定操作系統類型,此處使用的是標準Linux 2.6,其他的可以通過 man virt-install 詳細查看。 
    --accelerate 加速,具體什麼原理還不太清楚。 
    --cdrom 指定安裝鏡像所在。 
    --vnc 啓用VNC遠程管理,一般安裝系統都要啓用。 
    --vncport 指定 VNC 監控端口,默認端口爲 5900,端口不能重複。 
    --vnclisten 指定 VNC 綁定IP,默認綁定127.0.0.1,這裏將其改爲 0.0.0.0 以便可以通過外部連接。 
    --extra-args='console=tty0 console=ttyS0,115200n8‘ 默認開啓console終端。否則不能使用console接口。安裝過程未使用這個參數,就需要到系統中手動調整配置。

三、虛擬機管理

  1. 虛擬機管理指令 virsh 簡介
    virsh list 列出當前虛擬機列表,不包括未啓動的
    virsh list --all 列出所有虛擬機,包括所有已經定義的虛擬機
    virsh start domain-name 啓動指定虛擬機
    virsh shutdown domain-name 停止指定虛擬機 
    virsh reboot domain-name 重新啓動指定虛擬機
    經測試reboot和shutdown需要在虛擬機上安裝acpid服務方能使用。
    yum install -y acpid &&/etc/init.d/acpid start
    virsh autostart domain-name 指定虛擬機開機自動啓動 
    virsh destroy centos 強制關機
    virsh undefined centos 刪除虛擬機配置(刪除後需手動刪除img文件)
    virsh attach-interface 增加網卡命令
    virsh attach-disk 增加磁盤命令
    virt-clone -o node1 -n node2 -f /home/3158cdn/images/node2.img --connect=qemu:///system

  2. 調整虛擬機配置
    2.1調整內存
    如果maxmem等於mem需重設maxmem,重設實例的maxmem要shutdown 實例
    virsh setmaxmem node1 --size 8G #需先設置maxmem
    virsh start node1
    virsh setmem node1 --size 8G
    然後再修改虛擬機主配置
    virsh edit node1 調整相應mem值。否則重啓會導致設置失效。
    經測試vi直接編輯好像不起作用, 使用virsh edit node1才能生效。

2.2調整cpu
Virsh edit node1 直接修改cpu count值。重啓即可生效

網絡帶寬的控制
virsh edit node1
<devices>
<interface type='network'>
<source network='default'/>
<target dev='vnet0'/>
<link state='down'/>
<bandwidth>
<inbound average='1000' peak='5000' burst='1024'/>
<outbound average='128' peak='256' burst='256'/>
</bandwidth>
</interface>
流量控制的單位爲k字節。

爲KVM客戶機添加virsh console支持
在KVM中安裝了一個RHEL6.1,啓動virsh命令想通過console命令連接至客戶機的終端,結果輸入命令後終端卡在這個狀態:
virsh # console test Connected to domain test
Escape character is ^]
敲任何鍵都沒反應,求助萬能的Google。原來想通過console連接客戶機終端還要在客戶機上做相應設置,大致如下:
添加ttyS0:
echo “ttyS0″ >>/etc/securetty
在/etc/grub.conf文件中爲內核添加參數:
console=ttyS0
在/etc/inittab中添加agetty:
S0:12345:respawn:/sbin/agetty ttyS0 115200
重啓客戶機:
reboot
此時,再次嘗試console命令可以正常使用:
virsh # console testConnected to domain test
Escape character is ^]
Red Hat Enterprise Linux Server release 6.1 (Santiago) Kernel 2.6.32-131.0.15.el6.x86_64 on an x86_64station32.loveky.info
login:

四 錯誤
1)錯誤提示:
localhost# virsh start node1
error: Failed to start domain node1
error: Unable to read from monitor: Connection reset by peer
解決方法 virsh managedsave-remove node1

2) 爲KVM客戶機添加virsh console支持
在KVM中安裝了一個RHEL6.1,啓動virsh命令想通過console命令連接至客戶機的終端,結果輸入命令後終端卡在這個狀態:
virsh # console test Connected to domain testEscape character is ^]
敲任何鍵都沒反應,求助萬能的Google。原來想通過console連接客戶機終端還要在客戶機上做相應設置,大致如下:
添加ttyS0:
echo “ttyS0″ >>/etc/securetty
在/etc/grub.conf文件中爲內核添加參數:
console=ttyS0
在/etc/inittab中添加agetty:
S0:12345:respawn:/sbin/agetty ttyS0 115200
重啓客戶機:
reboot
此時,再次嘗試console命令可以正常使用:
virsh # console testConnected to domain test Escape character is ^]Red Hat Enterprise Linux Server release 6.1 (Santiago) Kernel 2.6.32-131.0.15.el6.x86_64 on an x86_64station32.loveky.info login:

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