KVM遷移
遷移簡介
-
遷移:
系統的遷移是指把源主機上的操作系統和應用程序移動到目的主機,並且能夠在目的主機上正常運行。在沒有虛擬機的時代,物理機之間的遷移依靠的是系統備份和恢復技術。在源主機上實時備份操作系統和應用程序的狀態,然後把存儲介質連接到目標主機上,最後在目標主機上恢復系統。隨着虛擬機技術的發展,系統的遷移更加靈活和多樣化。最終我們遷移的目的就是:
- 簡化系統維護管理
- 高系統負載均衡
- 增強系統錯誤容忍度
- 優化系統電源管理
遷移的種類:
- P2P :物理機之間的遷移
- V2P :虛擬機遷到物理機
- P2V :物理機遷到虛擬機
- V2V :虛擬機遷到虛擬機
kvm遷移大致分爲兩種:
- 靜態遷移(冷遷移)
- 動態遷移(熱遷移)
熱遷移 —Live Migration
動態遷移(Live Migration):也叫在線遷移(Online Migration)。就是在保證虛擬機上服務正常運行的同時,將一個虛擬機系統從一個物理主機移動到另一個物理主機的過程。該過程不會對最終用戶造成明顯的影響,從而使得管理員能夠在不影響用戶正常使用的情況下,對物理服務器進行離線維修或者升級。與靜態遷移不同的是,爲了保證遷移過程中虛擬機服務的可用,遷移過程僅有非常短暫的停機時間。遷移的前面階段,服務在源主機的虛擬機上運行,當遷移進行到一定階段,目的主機已經具備了運行虛擬機系統的必須資源,經過一個非常短暫的切換,源主機將控制權轉移到目的主機,虛擬機系統在目的主機上繼續運行。對於虛擬機服務本身而言,由於切換的時間非常短暫,用戶感覺不到服務的中斷,因而遷移過程對用戶是透明的。動態遷移適用於對虛擬機服務可用性要求很高的場合。
熱遷移的優勢:
- 首先是可伸縮性比較強, IT 管理者可以在合理時間段讓運行某些關鍵業務的服務器適當減少工作量,以便進行更新操作系統,給應用程序打補丁等。而到了服務高峯期,又可以彈性地進行大負載量的運算。虛擬機遷移過程完全透明,幾乎不影響使用。
- 其次,現在的數據中心都追求環保節能, 工作量負載大的應用程序必然會令服務器能耗增加,有了虛擬機熱遷移技術,當一臺物理服務器負載過大時,系統管理員可以將其上面的虛擬機遷移到其他服務器,可有效減低數據中心服務器的總體能耗,再通過冷卻系統將數據中心的溫度保持在正常水平。
Kvm 動態遷移注意事項:
- 源宿主機和目的宿主機直接儘量用網絡共享的存儲系統來保存客戶機磁盤鏡像。例如 NFS , ISCSI , Glusterfs 等。
- 爲了提高動態遷移的成功率,儘量在同類型 cpu的主機上面進行動態遷移,儘管 kvm 動態遷移也支持從 Intel 平臺遷移到 amd 平臺。 但,從安全性,穩定度考慮不建議這樣去操作!!!
- 64 位的客戶機只能運行在 64 宿主機之間的遷移,而 32 位客戶機可以在 32 宿主機和 64 位宿主機之間遷移。
- 在進行動態遷移時,被遷移客戶機的名稱是唯一的,在目的宿主機上不能有與源宿主機被遷移客戶機同名的客戶機存在。
- 目的宿主機和源宿主機的軟件儘可能的相同。也就是同爲 Vmware , KVM , Xen 等。
靜態遷移
靜態遷移:也叫做常規遷移、離線遷移(Offline Migration)。就是在虛擬機關機或暫停的情況下從一臺物理機遷移到另一臺物理機。因爲虛擬機的文件系統建立在虛擬機鏡像上面,所以在虛擬機關機的情況下,只需要簡單的遷移虛擬機鏡像和相應的配置文件到另外一臺物理主機上;如果需要保存虛擬機遷移之前的狀態,在遷移之前將虛擬機暫停,然後拷貝狀態至目的主機,最後在目的主機重建虛擬機狀態,恢復執行。這種方式的遷移過程需要顯式的停止虛擬機的運行。從用戶角度看,有明確的一段停機時間,虛擬機上的服務不可用。這種遷移方式簡單易行,適用於對服務可用性要求不嚴格的場合。
實驗環境
主機名 | IP地址 |
---|---|
kvm01 | 192.168.83.6 |
kvm02 | 192.168.83.7 |
nfs | 192.168.83.3 |
修改主機名並且設置能夠通過主機名通信
[root@localhost ~]# hostnamectl set-hostname kvm01
[root@localhost ~]# bash
[root@kvm01 ~]# cat /etc/hosts
添加:
192.168.83.6 kvm01
192.168.83.7 kvm02
靜態遷移
將kvm虛擬機csdn_vm-01的配置文件和磁盤文件拷貝到kvm02,需要注意的是,如果拷貝過去後磁盤的路徑和網卡的信息與之前的不一樣的話記得修改配置文件相應的參數就可以了
[root@kvm01 ~]# virsh list --all
Id 名稱 狀態
----------------------------------------------------
- csdn_vm-01 關閉
[root@kvm01 ~]# scp /etc/libvirt/qemu/csdn_vm-01.xml root@192.168.83.7:/etc/libvirt/qemu/ `#配置文件信息`
root@192.168.83.7's password:
csdn_vm-01.xml 100% 4395 5.6MB/s 00:00
[root@kvm01 ~]# scp /kvm/data/vm-storage-01.qcow2 [email protected]:/kvm//data/ `#磁盤文件信息`
[email protected]'s password:
拷貝完成後去kvm02主機啓動kvm虛擬機
[root@kvm02 ~]# virsh define /etc/libvirt/qemu/csdn_vm-01.xml
定義域 csdn_vm-01(從 /etc/libvirt/qemu/csdn_vm-01.xml)
[root@kvm02 ~]# virsh list --all
Id 名稱 狀態
----------------------------------------------------
- csdn_vm-01 關閉
[root@kvm02 ~]# virsh start csdn_vm-01
域 csdn_vm-01 已開始
[root@kvm02 ~]#
動態遷移
要進行動態遷移是需要用到nfs或者iscsi等網絡共享服務,我們採用nfs
首先配置nfs服務器提供共享,共享目錄爲/storage/kvm_data
[root@nfs ~]# yum -y install nfs-utils
[root@nfs ~]# mkdir /storage/kvm_data -p
[root@nfs ~]# vim /etc/exports
/storage/kvm_data *(rw,sync,no_root_squash)
[root@nfs ~]# systemctl restart nfs
[root@nfs ~]# showmount -e 192.168.83.3
Export list for 192.168.83.3:
/storage/kvm_data *
配置kvm服務器搭建nfs共享存儲池,兩臺kvm配置相同
創建存儲卷,只需要在kvm01上操作就可以了
設置主機網絡爲bridge橋接兩臺操作相同,爲了確保虛擬機在熱遷移時網絡可用性
[root@kvm01 ~]# systemctl stop NetworkManager
[root@kvm01 ~]# virsh iface-bridge ens33 br0
使用附加設備 br0 生成橋接 ens33 失敗
已啓動橋接接口 br0
[root@kvm01 ~]# ifconfig br0
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.83.6 netmask 255.255.255.0 broadcast 192.168.83.255
inet6 fe80::20c:29ff:fe0d:3aac prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:0d:3a:ac txqueuelen 1000 (Ethernet)
RX packets 70 bytes 5484 (5.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 58 bytes 6786 (6.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
創建存儲卷
在kvm01上創建虛擬機

安裝虛擬時開啓網絡連接,可以看到自動獲取的IP地址和kvm01、02屬於同一網段
環境準備好了以後接下來進行虛擬機熱遷移
通過kvm01的virt-manager連接另外一臺kvm02
安裝依賴環境
KVM01和KVM02都安裝一下
[root@kvm01 kvm-vm]# yum -y install openssh-askpass
如果連接是出現以下報錯,yum安裝openssh-askpass,兩臺都要安裝
輸入kvm02的root用戶密碼
KVM性能優化
- KVM爲什麼要調優
性能的損耗是關鍵。KVM採用全虛擬化技術,全虛擬化要有一個軟件來模擬硬件層,故有一定的損耗,特別是I/O,因此需要優化。KVM性能優化主要在CPU、內存、I/O這幾方面。當然對於這幾方面的優化,也是要分場景的,不同的場景其優化方向也是不同的。 - KVM優化思路及步驟
KVM的性能已經很不錯了,但還有一些微調措施可以進一步提高KVM性能。- CPU優化
要考慮CPU的數量問題,所有guestcpu的總數目不要超過物理機CPU的總數目。如果超過,則將對性能帶來嚴重影響,建議選擇複製主機CPU配置,如圖所示:
- 內存優化
內存分配的最小單位是page(頁面),默認大小是4KB。可以將host主機內容相同的內存合併,以節省內存的使用,特別是在虛擬機操作系統都一樣的情況下,肯定會有很多內容相同的內存值,開啓了KSM,則會將這些內存合併爲一個,當然這個過程會有性能損耗,所以開啓與否,需要考慮使用場景。
而KSM對KVM環境有很重要的意義,當KVM上運行許多相同系統的客戶機時,客戶機之間將有許多內存頁是完全相同的,特別是只讀的內核代碼頁完全可以在客戶機之間共享,從而減少客戶機佔用的內存資源,能同時運行更多的客戶機。
- CPU優化
KSM簡介
-
KSM(Kernel Shard Memory)即共享內存或相同頁內存合併技術,在linux系統中對於KVM虛擬化就是內存合併,簡單說,就是把相同的內存合併,這樣可以讓你的物理機跑更多的虛擬機
-
KSM允許內核在多個進程(包括虛擬機)之間共享完全相同的內存頁,KSM讓內核掃描檢查正在運行中的程序並且比較他們的內存,若發現相同的內存頁,就將相同的內存頁合併成單一的內存頁,標識爲“寫時複製”。
如果有進程試圖去修改被標識爲“寫時複製”的合併的內存頁時,就爲該進程複製出一個新的內存頁供其使用。 -
通過/sys/kernel/mm/ksm目錄下的文件可查看內存頁共享的情況:
KSM主要有兩個服務:ksmd和ksmtuned。查看是否開啓KSM功能
[root@kvm01 ksm]# grep KSM /boot/config-3.10.0-693.el7.x86_64
CONFIG_KSM=y
返回y表示開啓了KSM,ksm在linux2.6內核以後默認已經開啓
ksm配置文件信息,配置文件路徑在/sys/kernel/mm/ksm目錄下
文件名 | 作用 |
---|---|
full_scans | 已經對所有可合併的內存區域掃描過的次數。 |
pages_shared | 正在使用中的共享內存頁數量 |
pages_sharing | 有多少內存頁正在使用被合併的共享頁,不包括合併內存頁本身。這是實際節省的內存頁數量。 |
pages_to_scan | 在ksmd進程休眠之前會去掃描的內存頁的數量。 |
pages_unshared | 無重複內容而不可以被合併的內存頁數量。 |
pages_volatile | 因爲內容很容易變化而不被合併的內存頁數量。 |
run | 控制ksmd是否運行。0:停止運行但是保存合併的內存頁;1:馬上運ksmd;2:停止運行,並且分立已經合併的所有內存頁。 |
sleep_millisecs | ksmd進程的休眠時間。其中pages_to_scan、sleep_millisecs、run三個文件是可讀寫的,其他文件是隻讀的。 |
臨時開啓ksm
[root@kvm01 ~]# cd /sys/kernel/mm/ksm/
[root@kvm01 ksm]# ls
full_scans pages_to_scan stable_node_chains
max_page_sharing pages_unshared stable_node_chains_prune_millisecs
merge_across_nodes pages_volatile stable_node_dups
pages_shared run
pages_sharing sleep_millisecs
[root@kvm01 ksm]# cat run
0
[root@kvm01 ksm]# echo 1 > run #臨時開啓ksm
KSM會影響系統性能甚到高達10%-50%,以效率換空間,如果系統的內存很寬裕,則無須開啓KSM,如果想盡可能多地並行運行KVM客戶機,則可以打開KSM。
對內存設置限制
如果有多個虛擬機,爲了防止某個虛擬機無節制的使用內存資源,導致其它虛擬機無法正常使用,就需要對內存的使用進行限制。
查看當前虛擬機csdn_vm-01內存的限制,單位爲KB
[root@kvm01 ksm]# virsh memtune --help
命令選項解釋
OPTIONS
[–domain] 域名,id 或 uuid
–hard-limit 最大內存,以整數計(默認 KiB)
–soft-limit 競爭時的內存,以整數計(默認爲 KiB)
–swap-hard-limit 最大內存加 swap,以整數計(默認 KiB)
–min-guarantee 最小確定內存,以整數計(默認 KiB)
–config 影響下一次引導
–live 影響運行的域
–current 影響當前域
[root@kvm01 ksm]# virsh memtune csdn_vm-01
hard_limit : 無限制
soft_limit : 無限制
swap_hard_limit: 無限制
[root@kvm01 ksm]# virsh memtune csdn_vm-01 --hard-limit 1024000 --live
錯誤:無法更改內存參數
錯誤:Requested operation is not valid: domain is not running
需要虛擬機在運行狀態下設置
[root@kvm01 ksm]# virsh start csdn_vm-01
域 csdn_vm-01 已開始
[root@kvm01 ksm]# virsh memtune csdn_vm-01 --hard-limit 1024000 --live
磁盤I/O優化
在實際的生產環境中,爲了避免過度消耗磁盤資源而對其它的虛擬機造成影響,我們希望每臺虛擬機對磁盤資源的消耗是可以控制的。比如多個虛擬機往硬盤中寫數據,誰可以優先寫,就可以調整I/O的權重weight,權重越高寫入磁盤的優先級越高。
對磁盤的I/O控制有兩種方式:
1)在整體中的權重,範圍在100-1000
2)限制具體的I/O。
查看虛擬機權重值
[root@kvm01 ksm]# virsh blkiotune csdn_vm-01
weight : 1000
device_weight :
device_read_iops_sec:
device_write_iops_sec:
device_read_bytes_sec:
device_write_bytes_sec:
設置權重爲500
[root@kvm01 ksm]# virsh blkiotune csdn_vm-01 --weight 500
[root@kvm01 ksm]# virsh blkiotune csdn_vm-01
weight : 500
device_weight :
device_read_iops_sec:
device_write_iops_sec:
device_read_bytes_sec:
device_write_bytes_sec: