在計算機技術中,虛擬化(技術)或虛擬技術(英語:Virtualization)是一種資源管理技術,是將計算機的各類實體資源(CPU、內存、磁盤空間、網絡適配器等),予以抽象、轉換後呈現出來並可供分區、組合爲一個或多個電腦配置環境。html
圖 - 虛擬化示意圖linux
由此,打破實體結構間的不可切割的障礙,使用戶能夠比本來的配置更好的方式來應用這些電腦硬件資源。這些資源的新虛擬部分是不受現有資源的架設方式,地域或物理配置所限制。ubuntu
通常所指的虛擬化資源包括計算能力和數據存儲。windows
因爲目前信息技術領域的不少企業都曾在宣傳中將該企業的某種技術稱爲虛擬化技術,這些技術涵蓋的範圍能夠從Java虛擬機技術到系統管理軟件,這就使得準確的界定虛擬技術變得困難。所以各類相關學術論文在談到虛擬技術時經常提到的即是如前面所提到的那個不嚴格的定義。centos
🏆同一臺物理機運行多個不一樣版本應用軟件瀏覽器
🏆硬件依賴性較低和便於數據遷移安全
圖 - 虛擬化先後對比bash
詳情參考<1.1.3 虛擬化技術的優點>。服務器
1.下降運營成本網絡
服務器虛擬化下降了IT基礎設施的運營成本,令系統管理員擺脫了繁重的物理服務器、OS、中間件及兼容性的管理工做,減小人工干預頻率,使管理更增強大、便捷。
2.提升應用兼容性
服務器虛擬化提供的封裝性和隔離性使大量應用獨立運行於各類環境中,管理人員不需頻繁根據底層環境調整應用,只需構建一個應用版本並將其發佈到虛擬化後的不一樣類型平臺上便可。
3.加速應用部署
採用服務器虛擬化技術只需輸入激活配置參數、拷貝虛擬機、啓動虛擬機、激活虛擬機便可完成部署,大大縮短了部署時間,免除人工干預,下降了部署成本。
4.提升服務可用性
用戶能夠方便地備份虛擬機,在進行虛擬機動態遷移後,能夠方便的恢復備份,或者在其餘物理機上運行備份,大大提升了服務的可用性。
5.提高資源利用率
經過服務器虛擬化的整合,提升了CPU、內存、存儲、網絡等設備的利用率,同時保證原有服務的可用性,使其安全性及性能不受影響。
6.動態調度資源
在服務器虛擬化技術中,數據中心從傳統的單一服務器變成了統一的資源池,用戶能夠即時地調整虛擬機資源,同時數據中心管理程序和數據中心管理員能夠靈活根據虛擬機內部資源使用狀況靈活分配調整給虛擬機的資源。
7.下降能源消耗
經過減小運行的物理服務器數量,減小CPU之外各單元的耗電量,達到節能減排的目的。
KVM,基於內核的虛擬機(英語:Kernel-based Virtual Machine,縮寫爲 KVM),是一種用於Linux內核中的虛擬化基礎設施,能夠將Linux內核轉化爲一個hypervisor。KVM在2007年2月被導入Linux 2.6.20核心中,以可加載核心模塊的方式被移植到FreeBSD及illumos上。
KVM在具有Intel VT或AMD-V功能的x86平臺上運行。它也被移植到S/390,PowerPC與IA-64平臺上。在Linux內核3.9版中,加入ARM架構的支持。
KVM目前由Red Hat等廠商開發,對CentOS/Fedora/RHEL等Red Hat系發行版支持極佳。
- KVM是開源軟件,全稱是kernel-based virtual machine(基於內核的虛擬機)。
- 是x86架構且硬件支持虛擬化技術(如 intel VT 或 AMD-V)的Linux全虛擬化解決方案。
- 它包含一個爲處理器提供底層虛擬化 可加載的核心模塊kvm.ko(kvm-intel.ko或kvm-AMD.ko)。
- KVM還須要一個通過修改的QEMU軟件(qemu-kvm),做爲虛擬機上層控制和界面。
- KVM能在不改變linux或windows鏡像的狀況下同時運行多個虛擬機,(它的意思是多個虛擬機使用同一鏡像)併爲每個虛擬機配置個性化硬件環境(網卡、磁盤、圖形適配器……)同時KVM還可以使用ksm技術幫助宿主服務器節約內存。
- 在主流的Linux內核,如2.6.20以上的內核均已包含了KVM核心。
在電腦運算中,紅帽公司的Virtual Machine Manager是一個虛擬機管理員,可讓用戶管理多個虛擬機。
基於內核的虛擬機libvirt與Virtual Machine Manager。
Virtual Machine Manager可讓用戶:
🎃 建立、編輯、引導或中止虛擬機。
🎃 查看並控制每一個虛擬機的控制檯。
🎃 查看每部虛擬機的性能以及使用率。
🎃 查看每部正在運行中的虛擬機以及主控端的即時性能及使用率信息。
🎃 不管是在本機或遠程,皆可以使用KVM、Xen、QEMU。
圖 - libvirt服務
🍪 Xen
Xen是一個開放源代碼虛擬機監視器,由XenProject開發。它打算在單個計算機上運行多達128個有徹底功能的操做系統。
在舊(無虛擬硬件)的處理器上執行Xen,操做系統必須進行顯式地修改(「移植」)以在Xen上運行(可是提供對用戶應用的兼容性)。這使得Xen無需特殊硬件支持,就能達到高性能的虛擬化。
🍪 QEMU
QEMU是一套由Fabrice Bellard所編寫的模擬處理器的自由軟件。它與Bochs,PearPC近似,但其具備某些後二者所不具有的特性,如高速度及跨平臺的特性。經由KVM(早期爲kqemu加速器,如今kqemu已被KVM取代)這個開源的加速器,QEMU能模擬至接近真實電腦的速度。QEMU有兩種主要運做模式:
User mode模擬模式,亦便是用戶模式。
QEMU能引導那些爲不一樣中央處理器編譯的Linux程序。而Wine及Dosemu是其主要目標。
System mode模擬模式,亦便是系統模式。
QEMU能模擬整個電腦系統,包括中央處理器及其餘周邊設備。它使得爲系統源代碼進行測試及除錯工做變得容易。其亦能用來在一部主機上模擬數部不一樣虛擬電腦。
系統環境說明
[root@kvm ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) [root@kvm ~]# uname -r 3.10.0-693.el7.x86_64 [root@kvm ~]# sestatus SELinux status: disabled [root@kvm ~]# systemctl status firewalld.service ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead) Docs: man:firewalld(1) [root@kvm ~]# hostname -I 172.16.1.240 10.0.0.240 # kvm主機內存不能低於4GB
安裝依賴包(可使用本地yum源)
yum install libvirt* virt-* qemu-kvm* -y
安裝軟件說明內容:
libvirt # 虛擬機管理 virt # 虛擬機安裝克隆 qemu-kvm # 管理虛擬機磁盤
啓動服務
[root@kvm ~]# systemctl start libvirtd.service [root@kvm ~]# systemctl status libvirtd.servic
安裝VNC軟件:
下載vnc軟件方法,tightvnc官網:http://www.tightvnc.com
VNC軟件,用於VNC(Virtual Network Computing),爲一種使用RFB協議的顯示屏畫面分享及遠程操做軟件。此軟件藉由網絡,可發送鍵盤與鼠標的動做及即時的顯示屏畫面。
VNC與操做系統無關,所以可跨平臺使用,例如可用Windows鏈接到某Linux的電腦,反之亦同。甚至在沒有安裝客戶端程序的電腦中,只要有支持JAVA的瀏覽器,也可以使用。
安裝VNC時,使用默認安裝便可,無需安裝server端。
圖 - vnc軟件
使用命令
[root@kvm ~]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /data/clsn.raw,format=raw,size=10 --cdrom /data/CentOS-7-x86_64-DVD-1511.iso --network network=default --graphics vnc,listen=0.0.0.0,port=5900 --noautoconsole
注意:須要先將鏡像文件拷貝到 /data/CentOS-7-x86_64-DVD-1511.iso 。
使用參數說明:
參數 |
參數說明 |
--virt-type HV_TYPE |
要使用的管理程序名稱 (kvm, qemu, xen, ...) |
--os-type |
系統類型 |
--os-variant DISTRO_VARIANT |
在客戶機上安裝的操做系統,例如:'fedora18'、'rhel6'、'winxp' 等。 |
-n NAME, --name NAME |
客戶機實例名稱 |
--memory MEMORY |
配置客戶機虛擬內存大小 |
--vcpus VCPUS |
配置客戶機虛擬 CPU(vcpu) 數量。 |
--disk DISK |
指定存儲的各類選項。 |
-cdrom CDROM |
光驅安裝介質 |
-w NETWORK, --network NETWORK |
配置客戶機網絡接口。 |
--graphics GRAPHICS |
配置客戶機顯示設置。 |
虛擬化平臺選項: |
|
-v, --hvm |
這個客戶機應該是一個全虛擬化客戶機 |
-p, --paravirt |
這個客戶機應該是一個半虛擬化客戶機 |
--container |
這個客戶機應該是一個容器客戶機 |
--virt-type HV_TYPE |
要使用的管理程序名稱 (kvm, qemu, xen, ...) |
--arch ARCH |
模擬 CPU 架構 |
--machine MACHINE |
機器類型爲仿真類型 |
其它選項: |
|
--noautoconsole |
不要自動嘗試鏈接到客戶端控制檯 |
--autostart |
主機啓動時自動啓動域。 |
--noreboot |
安裝完成後不啓動客戶機。 |
以上信息經過 " virt-install --help " 得到。 |
在啓動的同時使用vnc鏈接
下面就進入到安裝系統的操做,關於系統安裝的方法參考:http://www.cnblogs.com/clsn/p/7489784.html
virsh命令經常使用參數總結
參數 |
參數說明 |
基礎操做 |
|
list |
查看虛擬機列表,列出域 |
start |
啓動虛擬機,開始一個(之前定義的)非活躍的域 |
shutdown |
關閉虛擬機,關閉一個域 |
destroy(危險) |
強制關閉虛擬機,銷燬(中止)域 |
vncdisplay |
查詢虛擬機vnc端口號 |
配置管理操做 |
|
dumpxml |
導出主機配置信息 |
undefine |
刪除主機 |
define |
導入主機配置 |
domrename |
對虛擬機進行重命名 |
掛起與恢復 |
|
suspend |
掛起虛擬機 |
resume |
恢復虛擬機 |
自啓動管理 |
|
autostart |
虛擬機開機啓動 |
autostart --disable |
取消虛擬機開機啓動 |
以上參數經過 「virsh --help」 得到。 |
操做過程:
KVM虛擬機配置文件位置
[root@kvm ~]# ll /etc/libvirt/qemu/centos7.xml
修改KVM虛擬機配置的方法
[root@kvm ~]# virsh edit centos7
使用該命令修改能夠對文件進行語法校驗。
備份與恢復
備份虛擬機配置(關機時備份):
[root@kvm ~]# virsh dumpxml centos7 > centos7.xml
刪除虛擬機配置
# 查看 [root@kvm ~]# virsh list --all Id 名稱 狀態 ---------------------------------------------------- - centos7 關閉 # 刪除 [root@kvm ~]# virsh undefine centos7 域 centos7 已經被取消定義 [root@kvm ~]# virsh list --all Id 名稱 狀態 ----------------------------------------------------
導入虛擬機
# 導入 [root@kvm ~]# virsh define centos7-off.xml 定義域 centos7(從 centos7-off.xml) # 查看 [root@kvm ~]# virsh list --all Id 名稱 狀態 ---------------------------------------------------- - centos7 關閉
修改虛擬機名稱
# 重命名 [root@kvm ~]# virsh domrename centos7 clsn7 Domain successfully renamed # 查看 [root@kvm ~]# virsh list Id 名稱 狀態 ---------------------------------------------------- 9 clsn7 關閉
虛擬機掛起與恢復
# 掛起虛擬機 [root@kvm ~]# virsh suspend clsn7 域 clsn7 被掛起 # 查看狀態 [root@kvm ~]# virsh list --all Id 名稱 狀態 ---------------------------------------------------- 9 clsn7 暫停
恢復虛擬機
[root@kvm ~]# virsh resume clsn7 域 clsn7 被從新恢復
查詢虛擬機vnc端口
[root@kvm ~]# virsh vncdisplay clsn7 :0 # :0 即 爲 5900 端口,以此類推 :1爲5901 。
開機自啓動設置
# 設置 libvirtd 服務開機自啓動。 [root@kvm ~]# systemctl is-enabled libvirtd.service enabled
設置宿主機開機虛擬機在其餘
[root@kvm ~]# virsh autostart clsn7 域 clsn7標記爲自動開始 # 實質爲建立軟鏈接 [root@kvm ~]# ll /etc/libvirt/qemu/autostart/clsn7.xml lrwxrwxrwx 1 root root 27 1月 22 12:17 /etc/libvirt/qemu/autostart/clsn7.xml -> /etc/libvirt/qemu/clsn7.xml
取消開機自啓動
[root@kvm ~]# virsh autostart --disable clsn7 域 clsn7取消標記爲自動開始
配置console登陸
在clsn7虛擬機內操做(該操做僅限centos7):
[root@kvm ~]# grubby --update-kernel=ALL --args="console=ttyS0,115200n8" [root@kvm ~]# reboot # 115200n8:能顯示虛擬機的啓動過程
重啓完成後,使用virsh console 鏈接虛擬機。
[root@kvm ~]# virsh console clsn7 鏈接到域 clsn7 換碼符爲 ^] CentOS Linux 7 (Core) Kernel 3.10.0-327.el7.x86_64 on an x86_64 clsn7 login: root Password: Last login: Mon Jan 22 12:24:48 from 192.168.122.1 [root@clsn7 ~]# w 12:26:11 up 0 min, 1 user, load average: 0.09, 0.03, 0.01 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root ttyS0 12:26 3.00s 0.02s 0.01s w
使用virsh console鏈接CentOS 6虛擬主機方法:
安裝一臺centos6的kvm虛擬機
virt-install --virt-type kvm --os-type=linux --os-variant rhel6 \ --name clsn6 --memory 1124 --vcpus 1 \ --disk /data/clsn6/clsn-6.raw,format=raw,size=10 \ --cdrom /data/CentOS-6.9-x86_64-bin-DVD1.iso \ --network network=default --graphics vnc,listen=0.0.0.0,port=5901 \ --noautoconsole
新安裝一臺虛擬機後,是沒法經過virsh console 命令連入虛擬機中的,這時咱們須要開啓虛擬機的console功能。
如下操做都在虛擬機中進行
一、添加ttyS0的許可,容許root登錄
[root@clsn6 ~]# echo "ttyS0" >> /etc/securetty
二、編輯/etc/grub.conf中加入console=ttyS0
在該文件的第16行。kernel選項後添加
[root@clsn6 ~]# sed -i '/\tkernel/s#.*#& console=ttyS0#g' /etc/grub.conf [root@clsn6 ~]# sync # 同步配置到 /boot/grub/grub.conf [root@clsn6 ~]# cat -n /etc/grub.conf 1 # grub.conf generated by anaconda 2 # 3 # Note that you do not have to rerun grub after making changes to this file 4 # NOTICE: You have a /boot partition. This means that 5 # all kernel and initrd paths are relative to /boot/, eg. 6 # root (hd0,0) 7 # kernel /vmlinuz-version ro root=/dev/vda3 8 # initrd /initrd-[generic-]version.img 9 #boot=/dev/vda 10 default=0 11 timeout=5 12 splashimage=(hd0,0)/grub/splash.xpm.gz 13 hiddenmenu 14 title CentOS 6 (2.6.32-696.el6.x86_64) 15 root (hd0,0) 16 kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=48532582-c271-4c0a-b55f-395fe16cd8aa rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet console=ttyS0 17 initrd /initramfs-2.6.32-696.el6.x86_64.img
三、編輯/etc/inittab
在最後一行加入內容 S0:12345:respawn:/sbin/agetty ttyS0 115200
[root@clsn6 ~]# echo 'S0:12345:respawn:/sbin/agetty ttyS0 115200' >>/etc/inittab
四、以上操做都完成後,重啓虛擬機
[root@clsn6 ~]# reboot
如下操做在kvm宿主機上執行
一、檢查虛擬機的狀態
[root@kvm ~]# virsh list --all Id 名稱 狀態 ---------------------------------------------------- 11 clsn7 running 21 clsn6 running
二、進行鏈接測試
[root@kvm ~]# virsh console clsn6 鏈接到域 clsn6 換碼符爲 ^] # 注:退出virsh console鏈接的方法,使用組合鍵Ctrl+]便可 CentOS release 6.9 (Final) Kernel 2.6.32-696.el6.x86_64 on an x86_64 clsn6 login: root Password: Last login: Mon Jan 22 05:44:25 on ttyS0 [root@clsn6 ~]# who root ttyS0 2018-01-22 05:50 # 登錄成功,查看登錄接口爲以前設置的ttyS0
KVM qcow二、raw、vmdk等鏡像格式說明:http://blog.csdn.net/zhengmx100/article/details/53887162
# 建立一塊qcow2的虛擬硬盤(僅測試使用,無實際意義) [root@kvm data]# qemu-img create -f qcow2 clsn.qcow2 2G [root@kvm data]# ls -l
查看當前虛擬機硬盤信息
[root@kvm ~]# qemu-img info /data/clsn.raw image: /data/clsn.raw file format: raw virtual size: 10G (10737418240 bytes) disk size: 1.1G
raw轉qcow2格式:
# 參數說明 [root@kvm data]# qemu-img --help |grep convert qemu-img convert [-f fmt] [-O output_fmt] filename output_filename
轉換原有磁盤格式
[root@kvm data]# qemu-img convert -f raw -O qcow2 clsn.raw clsn.qcow2
修改clsn7 虛擬機配置文件
[root@kvm data]# virsh edit clsn7 修改前: <disk type='file' device='disk'> <driver name='qemu' type='raw'/> <source file='/data/clsn.raw'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </disk> 修改後: <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/data/clsn.qcow2'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </disk>
刪除原磁盤文件
[root@kvm data]# \rm clsn.raw
啓動虛擬機
[root@kvm data]# virsh start clsn7 [root@kvm data]# virsh list --all Id 名稱 狀態 ---------------------------------------------------- 22 clsn7 running
進入硬盤存放目錄
[root@kvm ~]# cd /data
建立一塊新的硬盤
[root@kvm data]# qemu-img create -f qcow2 clsn7-add01.qcow2 5G Formatting 'clsn7-add01.qcow2', fmt=qcow2 size=5368709120 encryption=off cluster_size=65536 lazy_refcounts=off
查看建立的硬盤信息
[root@kvm data]# qemu-img info clsn7-add01.qcow2 image: clsn7-add01.qcow2 file format: qcow2 virtual size: 5.0G (5368709120 bytes) disk size: 196K cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false
爲虛擬機添加硬盤
[root@kvm data]# virsh attach-disk clsn7 /data/clsn7-add01.qcow2 vdb --live --cache=none --subdriver=qcow2 # 成功附加磁盤
參數說明:
參數 |
參數說明 |
vdb |
第二塊硬盤 |
--live |
熱添加 |
--subdriver |
驅動類型 |
調整已添加硬盤的大小
[root@kvm data]# virsh --help |grep disk attach-disk #附加磁盤設備 detach-disk #分離磁盤設備
將已掛載的磁盤卸載下來
[root@kvm data]# virsh detach-disk clsn7 vdb 成功分離磁盤
調整磁盤大小
# 使用參數 [root@kvm data]# qemu-img --help |grep resize resize [-q] filename [+ | -]size
增長1G容量
[root@kvm data]# qemu-img resize clsn7-add01.qcow2 +1G Image resized. [root@kvm data]# qemu-img info clsn7-add01.qcow2 image: clsn7-add01.qcow2 file format: qcow2 virtual size: 6.0G (6442450944 bytes) disk size: 260K cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false
從新講磁盤添加到虛擬機
[root@kvm data]# virsh attach-disk clsn7 /data/clsn7-add01.qcow2 vdb --live --cache=none --subdriver=qcow2
如下在虛擬機中操做
格式化磁盤
[root@clsn7 ~]# mkfs.xfs /dev/vdb
掛載磁盤
[root@clsn7 ~]# df -h |grep /dev/vdb /dev/vdb 6.0G 33M 6.0G 1% /opt
使用 xfs_growfs 刷新磁盤的信息
[root@clsn7 ~]# xfs_growfs --help xfs_growfs: invalid option -- '-' Usage: xfs_growfs [options] mountpoint
注意:raw格式的磁盤沒法建立快照
建立快照
[root@kvm data]# virsh snapshot-create clsn7 已生成域快照 1516607756
查看主機快照列表
[root@kvm data]# virsh snapshot-list clsn7 名稱 生成時間 狀態 ------------------------------------------------------------ 1516607756 2018-01-22 15:55:56 +0800 running # 注:該名稱爲unix時間戳(格林威治時間)
查看快照信息
[root@kvm data]# virsh snapshot-info clsn7 --snapshotname 1516607756
登錄虛擬機,進行刪除操做
[root@clsn7 /]# ls -1|egrep -v 'proc|sys|run' |rm -rf
還原快照
[root@kvm data]# virsh snapshot-revert clsn7 --snapshotname 1516607756
刪除快照
[root@kvm data]# virsh snapshot-delete clsn7 --snapshotname 1516607756
快照配置文件位置
[root@kvm data]# cd /var/lib/libvirt/qemu/snapshot/ [root@kvm snapshot]# tree . └── clsn7 └── 1516607756.xml
複製一個虛擬機,需修改如 MAC 地址,名稱等全部主機端惟一的配置。
虛擬機的內容並無改變:virt-clone 不修改任何客戶機系統內部的配置,它只複製磁盤和主機端的修改。因此像修改密碼,修改靜態 IP 地址等操做都在本工具複製範圍內。如何修改此類型的配置,請參考 virt-sysprep。
克隆經常使用命令:
[root@kvm ~]# virt-clone --auto-clone -o clsn7 WARNING 設置圖形設備端口爲自動端口,以免相互衝突。 正在分配 ‘clsn-clone.ra 4% [- ] 1.5 MB/s | 464 MB 01:50:18 ETA
參數說明:
參數 |
參數說明 |
--auto-clone |
從原始客戶機配置中自動生成克隆名稱和存儲路徑。 |
-o ORIGINAL_GUEST, --original ORIGINAL_GUEST |
原始客戶機名稱;必須爲關閉或者暫停狀態。 |
一、設置橋接網絡
[root@kvm ~]# virsh iface-bridge eth0 br0 使用附加設備 br0 生成橋接 eth0 失敗 已啓動橋接接口 br0
查看網卡配置文件
# 查看 eth0 配置文件 [root@kvm ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 ONBOOT=yes BRIDGE="br0" # 查看 br0 配置文件 [root@kvm ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0 DEVICE="br0" ONBOOT="yes" TYPE="Bridge" BOOTPROTO="none" IPADDR="10.0.0.240" NETMASK="255.255.255.0" GATEWAY="10.0.0.254" IPV6INIT="yes" IPV6_AUTOCONF="yes" DHCPV6C="no" STP="on" DELAY="0"
二、修改虛擬機網絡配置
[root@kvm ~]# virsh edit clsn7 修改前: <interface type='network'> <mac address='52:54:00:42:bf:bc'/> <source network='default'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> 修改後: <interface type='bridge'> <mac address='52:54:00:42:bf:bc'/> <source bridge='br0'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface>
查看宿主機網橋
[root@kvm ~]# brctl show bridge name bridge id STP enabled interfaces br0 8000.000c294d551b yes eth0 virbr0 8000.5254006aaa40 yes virbr0-nic vnet0 vnet1
查看防火牆規則:
[root@kvm ~]# iptables -t nat -nvL Chain PREROUTING (policy ACCEPT 195 packets, 24665 bytes) pkts bytes target prot opt in out source destination Chain INPUT (policy ACCEPT 131 packets, 16209 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 272 packets, 24045 bytes) pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 272 packets, 24045 bytes) pkts bytes target prot opt in out source destination 0 0 RETURN all -- * * 192.168.122.0/24 224.0.0.0/24 1 328 RETURN all -- * * 192.168.122.0/24 255.255.255.255 29 1740 MASQUERADE tcp -- * * 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535 0 0 MASQUERADE udp -- * * 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535 3 252 MASQUERADE all -- * * 192.168.122.0/24 !192.168.122.0/24
三、修改kvm虛擬機網卡配置文件
[root@clsn7 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE=Ethernet BOOTPROTO=static NAME=eth0 DEVICE=eth0 ONBOOT=yes IPADDR=10.0.0.110 NETMASK=255.255.255.0 GATEWAY=10.0.0.254 DNS1=223.5.5.5
測試網絡連通性
[root@clsn7 ~]# ping 223.5.5.5 -c1 PING 223.5.5.5 (223.5.5.5) 56(84) bytes of data. 64 bytes from 223.5.5.5: icmp_seq=1 ttl=128 time=94.4 ms
在進行遷移以前須要準備一臺與KVM配置相同的機器(KVM02),部署好kvm環境。
在kvm02中安裝kvm組件
[root@kvm02 ~]# yum install libvirt* virt-* qemu-kvm* -y
配置橋接網絡
[root@kvm02 ~]# virsh iface-bridge eth0 br0 [root@kvm02 ~]# mkdir -p /data
將虛擬機關機,導出配置文件
[root@kvm data]# virsh dumpxml clsn7 >clsn7.xml
將虛擬機文件傳輸到kvm02上
[root@kvm data]# scp -rp clsn7.xml clsn.qcow2 10.0.0.201:/data
導入配置文件
[root@kvm02 ~]# virsh define clsn7.xml
啓動虛擬機
[root@kvm02 ~]# virsh start clsn7
查看虛擬機狀態
[root@kvm02 ~]# virsh list --all Id 名稱 狀態 ---------------------------------------------------- 5 clsn7 running
至此,一次KVM冷遷移就完成了
實現kvm虛擬機熱遷移核心:共享存儲。在這裏使用的時NFS共享存儲,關於nfs的詳情參考:http://www.cnblogs.com/clsn/p/7694456.html
一、安裝virt-manager所需桌面及vnc-server
[root@kvm ~]# yum groupinstall "GNOME Desktop" -y # vnc-server端 [root@kvm ~]# yum install tigervnc-server -y # virt-manager須要軟件 [root@kvm ~]# yum install openssh-askpass -y
二、配置vnc服務
複製vnc配置文件
[root@kvm ~]# vi /usr/lib/systemd/system/vncserver@.services [root@kvm ~]# \cp /usr/lib/systemd/system/vncserver@.service /usr/lib/systemd/system/vncserver@\:1.service
修改配置文件,主要修改<USER>參數。
[root@kvm ~]# egrep -v "^#|^$" /usr/lib/systemd/system/vncserver@\:1.service [Unit] Description=Remote desktop service (VNC) After=syslog.target network.target [Service] Type=forking User=root ExecStartPre=-/usr/bin/vncserver -kill %i ExecStart=/usr/bin/vncserver %i PIDFile=/root/.vnc/%H%i.pid ExecStop=-/usr/bin/vncserver -kill %i [Install] WantedBy=multi-user.target # 用戶爲root,家目錄爲root
官方提供修改方法
# Quick HowTo: # 1. Copy this file to /etc/systemd/system/vncserver@.service # 2. Replace <USER> with the actual user name and edit vncserver # parameters appropriately # ("User=<USER>" and "/home/<USER>/.vnc/%H%i.pid") # 3. Run `systemctl daemon-reload` # 4. Run `systemctl enable vncserver@:<display>.service`
設置vnc鏈接時的密碼,
[root@kvm ~]# vncpasswd Password: Verify: Would you like to enter a view-only password (y/n)? n # y爲建立只讀用戶,n爲非只讀用戶。
啓動vnc服務,設置開機自啓動
[root@kvm ~]# systemctl start vncserver@\:1.services [root@kvm ~]# systemctl enable vncserver@\:1.services
查看密碼文件及其餘配置文件位置
[root@kvm ~]# ll ~/.vnc/
三、配置NFS存儲
安裝軟件
[root@kvm ~]# yum install nfs-utils rpcbind -y
修改配置文件
[root@kvm ~]# cat /etc/exports /data 172.16.1.0/24(rw,sync,all_squash,anonuid=0,anongid=0)
啓動nfs程序
[root@kvm ~]# systemctl restart rpcbind [root@kvm ~]# systemctl restart nfs # 設置開機自啓動 [root@kvm ~]# systemctl enable rpcbind [root@kvm ~]# systemctl enable nfs
在kvm02上安裝nfs
[root@kvm02 ~]# yum install nfs-utils rpcbind -y
查看共享信息
[root@kvm02 ~]# showmount -e 172.16.1.240 Export list for 172.16.1.240: /data 172.16.1.0/24
掛載目錄
[root@kvm02 ~]# mount.nfs 172.16.1.240:/data /data # 加入開機自啓動 [root@kvm02 ~]# echo 'mount.nfs 172.16.1.240:/data /data' >>/etc/rc.local [root@kvm02 ~]# chmod +x /etc/rc.d/rc.local
vnc鏈接KVM宿主機:
圖 - 鏈接地址
圖 - 輸入vnc密碼
圖 - 使用vmm 虛擬系統管理器
添加KVM02宿主機
圖 - 添加新鏈接
注:鏈接上KVM02機器便可
圖 - 添加上kvm02主機
圖 - 主機添加完成
主機熱遷移
圖 - 遷移1
圖 - 遷移2,選擇要遷移到目的主機
圖 - 遷移過程
圖 - 遷移完成
在kvm02上查看虛擬機狀態
[root@kvm02 ~]# virsh list --all Id 名稱 狀態 ---------------------------------------------------- 7 clsn7 running
虛擬機配置查看方法:
圖 - clsn7 虛擬機配置信息
說明:在熱遷移的過程當中可能會參數丟包的狀況,通常不會超過1個包。
[C:\~]$ ping 10.0.0.110 -t 來自 10.0.0.110 的回覆: 字節=32 時間=1ms TTL=64 來自 10.0.0.110 的回覆: 字節=32 時間=13ms TTL=64 來自 10.0.0.110 的回覆: 字節=32 時間=11ms TTL=64 請求超時。 來自 10.0.0.110 的回覆: 字節=32 時間=4ms TTL=64 來自 10.0.0.110 的回覆: 字節=32 時間<1ms TTL=64 來自 10.0.0.110 的回覆: 字節=32 時間<1ms TTL=64
至此,一次熱遷移就完成了
連接克隆腳本
#!/bin/bash # kvm link clone scripts # user clsn # blog: https://www.nmtui.com # 2018-02-06 ### # init if [ $# -ne 2 ] then echo "Usage: $0 OLD_VMNAME NEW_VMNAME" exit 2 fi LOG=/var/log/messages old_vm=$1 new_vm=$2 new_xml="/tmp/${new_vm}.xml" . /etc/init.d/functions # dump old xmlfile virsh dumpxml $old_vm >$new_xml old_disk=`awk -F "'" '/source file/{print $2}' $new_xml` tmp_dir=`dirname $old_disk` new_disk=${tmp_dir}/${new_vm}.qcow2 # make link disk qemu-img create -f qcow2 -b $old_disk $new_disk &>> $LOG # make over xml info sed -i '/uuid/d' $new_xml sed -i '/mac address/d' $new_xml sed -i '2s#'$old_vm'#'$new_vm'#' $new_xml sed -i "s#$old_disk#$new_disk#g" $new_xml sed -i '/source mode/d' $new_xml # import new xml file virsh define $new_xml &>> $LOG # start new vm virsh start $new_vm &>> $LOG if [ $? -eq 0 ] then action "vmhost $new_vm start" /bin/true else action "vmhost $new_vm start" /bin/false echo "log info : $LOG" fi # END \rm $new_xml
說明:
第一步:複製虛擬磁盤文件
第二步:修改xml配置文件
1)name
2)uuid
3)虛擬磁盤存儲路徑
4)mac地址
1) 備份old_vm的配置文件,並重定向生成一個新的虛擬機配置文件 2)取出old_vm的磁盤路徑 3)建立新的連接磁盤文件 4) 修改xml配置文件 5) 導入新虛擬機 6)啓動測試
[1] https://zh.wikipedia.org/wiki/
[2] http://virtual.51cto.com/art/201303/386133.htm
[4] https://zh.wikipedia.org/wiki/基於內核的虛擬機
[6] [ kvm ] 四種簡單的網絡模型 http://www.javashuo.com/article/p-fmmyaulg-en.html
[7] http://www.javashuo.com/article/p-eahmcwen-eu.html
[8] http://wiki.ubuntu.org.cn/Kvm教程
做者:慘綠少年 出處:http://clsn.io