大綱:
一、部署安裝kvm虛擬機
二、virsh常見命令解釋
三、KVM虛擬機克隆
四、KVM快照
五、讓GuestOS支持 console
六、添加網卡
七、磁盤擴容
八、動態遷移
前言:
虛擬化的理論知識我就不囉嗦了,可以參見http://bbs.linuxtone.org/thread-24347-1-1.html,kvm全稱Kernel-based Virtual Machine, 其實kvm只是一個內核模塊,提供虛擬cpu和內存管理的模塊,至於其它的設備是由qemu模擬的,如網卡,顯卡,磁盤等。後來redhat聯合IBM以及Linux社區創造了libvirt,模擬的設備性能要比qemu的好很多,並提供了一系列的管理工具和api,整個集成了kvm虛擬化的解決方案。Linux(redhat系)裝載kvm模塊後,妖神一變成爲了VM Monitor,也稱爲Hypervisor,部署使用簡單,需要硬件支持虛擬化。
一. 部署虛擬機
1). 檢測硬件是否支持虛擬化
# egrep '(vmx|svm)' --color=always /proc/cpuinfo
# modprobe kvm
# modprobe kvm_intel || modprobe kvm_amd
如果含有vmx或者svm字樣,則表示支持CPU虛擬化,Intel是vmx,AMD是svm,也需要檢測是否有kvm_xxx模塊,如果裝載不成功,可能是沒有開啓硬件虛擬化,需要bios中開啓,具體開啓方式請聯繫廠家
2). 安裝rpm包,並啓動服務
# yum -y install kvm python-virtinst libvirt tunctl bridge-utils virt-manager qemu-kvm-tools \
virt-viewer virt-v2v libguestfs-tools
# service libvirtd start
3). 檢查是否有kvm模塊,如果有則繼續
# lsmod | grep kvm
kvm_intel 52570 30
kvm 314739 1 kvm_intel
4). 配置橋接網絡 br0
# cd /etc/sysconfig/network-scripts/
# cp ifcfg-eth0 ifcfg-br0
ifcfg-eth0:
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BRIDGE="br0"
BOOTPROTO=static
IPADDR="192.168.2.149"
NETMASK="255.255.255.0"
GATEWAY="192.168.2.2"
ifcfg-br0:
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR="192.168.2.149"
NETMASK="255.255.255.0"
GATEWAY="192.168.2.2"
# service network restart
# ifconfig
br0 ...
eth0 ...
lo ...
virbr0 ...
5). 部署安裝虛擬機(GuestOS)
① 建立磁盤文件,如果使用的是raw格式就不需要了,kvm虛擬機默認使用raw格式的鏡像格式,性能最好,速度最快,它的缺點就是不支持一些新的功能,如支持快照鏡像,zlib磁盤壓縮,AES加密等。這裏使用qcow2格式
# mkdir /opt/vms
# qemu-img create -f qcow2 /opt/vms/centos63-webtest.img 40G
② 建立虛擬機, 下面展示多種方式建立虛擬機
########### 使用使用iso來安裝 ###########
# virt-install \
--name=centos5 \
--os-variant=RHEL5 \
--ram=512 \
--vcpus=1 \
--disk path=/opt/vms/centos63-webtest.img,format=qcow2,size=7,bus=virtio \
--accelerate \
--cdrom /data/iso/CentOS5.iso \
--vnc --vncport=5910 \
--vnclisten=0.0.0.0 \
--network bridge=br0,model=virtio \
--noautoconsole
########### 使用使用nat模式網絡###########
# virt-install \
--name=centos5 \
--os-variant=RHEL5 \
--ram=512 \
--vcpus=1 \
--disk path=/opt/vms/centos63-webtest.img,format=qcow2,size=7,bus=virtio \
--accelerate \
--cdrom /data/iso/CentOS5.iso \
--vnc --vncport=5910 \
--vnclisten=0.0.0.0 \
--network network=default,model=virtio \
--noautoconsole
######### 從http中啓動,使用ks安裝 #########
# virt-install \
--name=centos63-webtest \
--os-variant=RHEL6 \
--ram=4096 \
--vcpus=4 \
--virt-type kvm \
--disk path=/opt/vms/centos63-webtest.img,format=qcow2,size=7,bus=virtio \
--accelerate \
--location http://192.168.130.4/centos63 \
--extra-args "linux ip=192.168.73.22 netmask=255.255.255.224 gateway=192.168.73.1 ks=http://192.168.130.4/ks/xen63.ks"\
--vnc --vncport=5910 \
--vnclisten=0.0.0.0 \
--network bridge=br0,model=virtio \
--force \
--noautoconsole
########## 從http安裝,使用ks, 雙網卡, 啓用console ########
# virt-install \
--name=centos63-webtest \
--os-variant=RHEL6 \
--ram=4096 \
--vcpus=4 \
--virt-type kvm \
--disk path=/opt/vms/centos63-webtest.img,format=qcow2,size=7,bus=virtio \
--accelerate \
--location http://111.205.130.4/centos63 \
--extra-args "linux ip=59.151.73.22 netmask=255.255.255.224 gateway=59.151.73.1 ks=http://111.205.130.4/ks/xen63.ks console=ttyS0 serial"
--vnc --vncport=5910 --vnclisten=0.0.0.0 \
--network bridge=br0,model=virtio \
--network bridge=br1,model=virtio \
--force \
--noautoconsole
########## 安裝windows ########
# virt-install \
--name=win7-test \
--os-variant=win7 \
--ram=4096 \
--vcpus=4 \
--disk path=/opt/vms/centos63-webtest.img,size=100 \
--accelerate \
--cdrom=/opt/iso/win7.iso
--vnc --vncport=5910 --vnclisten=0.0.0.0 \
--network bridge=br0 \
--force \
--noautoconsole
## 不能使用virtio,因爲默認windows沒有virtio的硬盤和網卡驅動
參數說明:
--name指定虛擬機名稱
--ram分配內存大小。
--vcpus分配CPU核心數,最大與實體機CPU核心數相同
--disk指定虛擬機鏡像,size指定分配大小單位爲G。
--network網絡類型,此處用的是默認,一般用的應該是bridge橋接。可以指定兩次也就是兩塊網卡
--accelerate加速
--cdrom指定安裝鏡像iso
--location 從ftp,http,nfs啓動
--vnc啓用VNC遠程管理
--vncport指定VNC監控端口,默認端口爲5900,端口不能重複。
--vnclisten指定VNC綁定IP,默認綁定127.0.0.1,這裏改爲0.0.0.0。
--os-type=linux,windows
--extra-args指定額外的安裝參數
--os-variant= [win7 vista winxp win2k8 rhel6 rhel5]
--force 如果有yes或者no的交互式,自動yes
③ 安裝系統 有三種方式,通過VNC來安裝, 通過virt-manager來安裝 , 通過console配合ks來安裝
Ⅰ. 通過VNC來安裝
下載TightVNC來連接上vnc安裝,只需要TightVNC Client即可,如果使用在RealVNC,就設置ColourLevel=rgb222才能連接,端口號是安裝時指定的,以後的安裝流程和普通的是一樣的
Ⅱ. 通過virt-manager, 如果你使用xshell那麼可以不用安裝x window就可以使用virt-manager, 需要安裝 x11相關軟件
# yum -y install libX11 xorg-x11-server-utils xorg-x11-proto-devel dbus-x11 \
xorg-x11-xauth xorg-x11-drv-ati-firmware xorg-x11-xinit
# virt-manager
Ⅲ. 通過virt console, 如果你安裝時啓用了 console可以使用 console來安裝, Ctrl+] 可以退出console
# virsh console centos63-webtest
VI. 通過virt-viewer來安裝
# yum -y install virt-viewer xorg-x11-font*
# virt-viewer centos63-webtest
二. virsh常見命令解釋
1. virsh進入交互模式,在該交互模式下有命令不全補全,詳細幫助
virsh # lis[tab補全]
virsh # help list 詳細幫助
2. virsh list --all 查看虛擬機狀態
3. virsh start instanceName 虛擬機開機
4. virsh shutdown instanceName 虛擬機關機
需要Linux母體機電源管理
service acpid start
5. virsh destroy instanceName 強制關機
6. virsh create /etc/libvirt/qemu/wintest01.xml 通過以前的配置文件創建虛擬機
7. virsh autostart instanceName 配置自啓動
8. virsh dumpxml wintest01 > /etc/libvirt/qemu/wintest02.xml 導出配置文件
9. virsh undefine wintest01 刪除虛擬機配置文件,不會真的刪除虛擬機
10. mv /etc/libvirt/qemu/wintest02.xml /etc/libvirt/qemu/wintest01.xml
virsh define /etc/libvirt/qemu/wintest01.xml
重新定義虛擬機
11. virsh edit wintest01 編輯虛擬機配置文件
12. virsh suspend wintest01 掛起虛擬機
13. virsh resume wintest01 恢復掛起虛擬機
三. 克隆
1). 使用virt-manager來克隆,這個太簡單了,就不演示了,需要注意的是,如果啓用了VNC, 記得更改VNC的端口,否則啓動會失敗的,見命令方式修改VNC修改
2). 使用命令克隆虛擬機
# virt-clone -o centos63_webtest -n centos63_webtest2 -f /opt/vms/centos_webtest2.img
參數說明:
-o –-original 原來實例name
-n –-name 新實例名稱
-f –-file 新實例磁盤存放位置
3). 如果你啓用了vnc, 修改配置文件中的vnc端口,否則啓動失敗,配置文件爲 /etc/libvirt/qemu對應實例名字的xml文件,先來一張配置文件解釋圖,很重要
# cd /etc/libvirt/qemu
# ls
# virsh edit centos63_webtest
<graphics type='vnc' port='5915' ............
4). 啓動克隆機器 (有的Linux版本可能生成的網卡有問題,請修改 /etc/udev/rules.d/70-persistent-cd.rules, 重啓虛擬機)
# virsh start centos63_webtest1
四. 快照
快照相信大家都知道是什麼意思,如果不知道,親去補補課吧,kvm虛擬機默認使用raw格式的鏡像格式,性能最好,速度最快,它的缺點就是不支持一些新的功能,如支持鏡像,zlib磁盤壓縮,AES加密等。 要使用鏡像功能,磁盤格式必須爲qcow2。下面開始kvm虛擬機快照的過程。
1). 查看磁盤格式
# qemu-img info /opt/vms/centos63-119.22.img
image: /opt/vms/centos63-119.22.img
file format: qcow2
virtual size: 40G (42949672960 bytes)
disk size: 136K
cluster_size: 65536
2). 如果不是qcow2需要關機轉換磁盤格式,如果是請跳過
# cp centos63-119.22.img centos63-119.22.raw
# qemu-img convert -f raw -O qcow2 centos63-119.22.raw centos63-119.22.img
3). 啓動vm, 建立快照,以後可以恢復
# virsh start centos63-119.22
# virsh snapshot-create centos63-119.22
4). 快照位置
快照配置文件在/var/lib/libvirt/qemu/snapshot/虛擬機實例名稱/下
5). 恢復快照,可以建立一些測試文件,準備恢復
先將虛擬機關閉,查看快照名稱,然後恢復快照
# ls /var/lib/libvirt/qemu/snapshot/centos63-119.22
1410341560.xml
# virsh snapshot-revert centos63-119.22 1410341560
6). 刪除快照
# qemu-img info centos63-119.22
1 1410341560 228M 2014-04-08 10:26:40 00:21:38.053
# virsh snapshot-delete centos63-119.2 1410341560
五. 讓已安裝的虛擬機GuestOS支持 virsh console
virsh console vmname 可以進入到vm的console模式,但是有時只顯示鏈接到vm,提示如下,回車沒有反應,這是因爲guestos不支持console,下面來啓用guestos的console
Connected to domain centos63-119.22
Escape character is ^]
1). 修改grub.conf,給內核傳遞參數 console=ttyS0
# vim /etc/grub.conf
kernel /vmlinuz-2.6.32-279.el6.x86_64 ro root=UUID=25756cd7-3597-4e45-8dd
db-79d091c6d17f rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us LANG=en_US.UTF-8 rd_NO_MM
D SYSFONT=latarcyrheb-sun16 console=ttyS0 rd_NO_LVM crashkernel=auto rhgb quiet
rd_NO_DM
2). 在/etc/inittab中添加agetty
# echo "S0:12345:respawn:/sbin/agetty ttyS0 115200" >> /etc/inittab
3). 添加到/etc/securetty
# echo "ttyS0" >> /etc/securetty
4). 重啓GuestOS
六. 添加網卡
線上服務器是雙網卡,一個走內網,一個走外網,我們也需要虛擬機這麼來工作,但是初始安裝虛擬機的時候沒有指定兩個網卡,這樣需要我們來添加一個網卡了,比如說我們已經將br1橋接到em2了,如果不會見剛開始br0橋接em1
1). 通過virt-manager來添加
簡單說一下 選中虛擬機 -- Open -- Details – AddHardware 選擇網卡模式,mac不要重複,確定即可
2). 通過命令來添加
Ⅰ. 使用virsh attach-interface命令爲虛擬機添加網卡
# virsh attach-interface centos63-119.23 --type bridge --source br1 --model virtio
Ⅱ. 導入配置文件並覆蓋原來的, 因爲attach-interface添加後,只是在虛擬機中生效了,配置文件並沒有改變
# cd /etc/libvirt/qemu
# virsh dumpxml centos63-119.23 > centos63-119.23.xml
Ⅲ. 修改GuestOS中網卡配置文件,爲另一個網卡配置IP
# cd /etc/sysconfig/network-scripts
略
Ⅳ. 重啓網卡
七. 硬盤擴容
原來的/opt目錄隨着使用,空間漸漸滿了,這時候我們就需要給/opt的掛載分區擴容了,有兩種情況 1. 該分區是lvm格式 2. 不是lvm格式,且不是擴展分區
1). 分區是lvm格式 這種很簡單,添加一塊磁盤,lvm擴容
virt-manager添加方式和添加網卡一樣,不再贅述,下面是使用命令來添加
Ⅰ. 建立磁盤,並附加到虛擬機中
# qemu-img create -f raw 10G.img 10G
# virsh attach-disk centos63-119.23 /opt/kvm/10G.img vdb
------------------------------添加qcow2磁盤-----------------------------------
# qemu-img create -f qcow2 10G.img 10G
# virsh attach-disk centos63-119.23 /opt/kvm/10G.img vdb --cache=none --subdriver=qcow2
---------------------------------------------------------------------------
說明:
centos63-119.23 虛擬機的名稱
/opt/kvm/10G.img 附加的磁盤
vdb 添加爲哪個磁盤, 也就是在guestos中的名字
Ⅱ. 導出並覆蓋原來的配置文件,和網卡一樣,attach後只是在虛擬機中生效
# virsh dumpxml centos63-119.23 > centos63-119.23.xml
Ⅲ. 使用lvm在線擴容,詳見 http://www.cnblogs.com/cmsd/p/3964118.html
2). 分區不是lvm格式,該分區不是擴展分區, 需要關機離線擴展
Ⅰ. 新建一個磁盤,大於原來的容量,比如原來是40G,你想對某個分區擴容20G那麼
# qemu-img create -f qcow2 60G.img 60G
Ⅱ. 備份原來的磁盤,以防三長兩短
# cp centos63-119.27.img centos63-119.27.img.bak
Ⅲ. 查看原來的磁盤決定擴容哪一個分區
# virt-filesystems --partitions --long -a centos63-119.27.img
# virt-df centos63-119.27.img
Ⅳ. 擴容GuestOS的sda2
# virt-resize --expand /dev/sda2 centos63-119.27.img 60G.img
說明:
/dev/sda2 擴容guestos的/dev/sda2
centos63-119.27.img 原來的磁盤文件
60G 第一步建立的更大的磁盤文件
Ⅴ. 使用新磁盤啓動
# mv 60G.img centos63-119.27.img
# virsh start centos63-119.27
virt-resize其實就是將原來磁盤中的文件複製到新的文件中,講想要擴大的分區擴大了
八. 動態遷移
用過vSphere 或者 xenserver的都知道動態遷移,最大程度上減少宕機時間 , 比如將正在運行在A上的虛擬機不關機遷移到B上,會將原來虛擬機的內存,CPU狀態等遷移到新的主機上,動態遷移需要一些條件
1. 該虛擬機使用共享存儲,在兩臺主機上的位置一樣 比如 A,B都講C的 /opt/vms 掛載到了自己的/opt/vms中,A,B對nfs可讀可寫,虛擬機在共享存儲中
2. 目標主機最好與源主機型號一樣,或者CPU支持的指令集更多
3. 目標主機CPU,內存充足
4. 能通過root用戶ssh連接到目的主機上
5. hostname和ip解析一致, 遷移是通過hostname的,修改/etc/hosts,可以ping通對方的Hostname
下面來遷移試試,假設上述條件都滿足, nfs已經掛載,如果nfs不會請google如何建立nfs
1). 使用virt-manager來遷移
簡單來說 File – Add Connect -- 填寫對方的ip,用戶名,密碼, 然後右擊虛擬機,Migrate
注. 由於原來的22沒有建在共享存儲上,新建了一個29的虛擬機來完成遷移的,切記 hostname要和ip對應, 虛擬機存儲是共享存儲
2). 通過命令來動態遷移
# virsh migrate centos63-119.27 --live qemu+ssh://192.168.119.11:9741/system –unsafe
說明:
centos63-119.27 遷移的實例名稱
--live 動態遷移
qemu+ssh ssh的方式
--unsafe 強制遷移,即使可能出現問題
先寫到這裏吧,一些基本的用得到的都寫了一下, 感謝您有耐心看到這裏, 寫個博客確實不容易,livewriter寫的文章,傳到博客上格式全變了,囧,湊合看吧, 親隨手給個贊, 希望能幫的到您, 有問題可以給我留言或者發郵件給我 [email protected],
補充:
# vim /etc/qemu-ifup.sh #設置一下網絡,爲了使用http ks #!/bin/bash # switch=br1 if [ -n $1 ];then ip link set $1 up brctl addif ${switch} $1 exit 0 else echo "No interface" exit 1 fi # chmod +x /etc/qemu-ifup.sh # /usr/libexec/qemu-kvm -m 1024 \ -cdrom /tmp/CentOS-6.3-x86_64-bin-DVD1.iso \ -drive file=/opt/vms/centos63-x86_64-template.img,if=virtio \ -net nic,model=virtio -net tap,script=/etc/qemu-ifup.sh \ -boot d \ -nographic \ -vnc :01 啓動: /usr/libexec/qemu-kvm -m 1024 \ -drive file=/opt/vms/centos63-x86_64-template.img,if=virtio \ -net nic,model=virtio -net tap,script=no \ -net nic,model=virtio -net tap,script=no \ -nographic -vnc :02