目錄
??靜態(tài)遷移(冷遷移)
??動(dòng)態(tài)遷移(熱遷移)
??遷移注意事項(xiàng)
??靜態(tài)遷移
??動(dòng)態(tài)遷移
??遷移幫助命令
??遷移實(shí)例
??冷遷移
??熱遷移
??錯(cuò)誤總結(jié)
??????博客主頁:大蝦好吃嗎的博客
? ? ??專欄地址:KVM虛擬化專欄
靜態(tài)遷移(冷遷移)
????????對(duì)于靜態(tài)遷移,你可以在宿主機(jī)上保存一個(gè)完整的客戶機(jī)鏡像快照,然后在宿主機(jī)中關(guān)閉或者暫停該客戶機(jī),然后將該客戶機(jī)的鏡像文件復(fù)制到另一臺(tái)宿主機(jī)中,使用在源主機(jī)中啟動(dòng)該客戶機(jī)時(shí)的命令來啟動(dòng)復(fù)制過來的鏡像。
動(dòng)態(tài)遷移(熱遷移)
????????如果源宿主機(jī)和目的宿主機(jī)共享存儲(chǔ)系統(tǒng),則只需要通過網(wǎng)絡(luò)發(fā)送客戶機(jī)的 vCPU 執(zhí)行狀態(tài)、內(nèi)存中的內(nèi)容、虛機(jī)設(shè)備的狀態(tài)到目的主機(jī)上。否則,還需要將客戶機(jī)的磁盤存儲(chǔ)發(fā)到目的主機(jī)上。共享存儲(chǔ)系統(tǒng)指的是源和目的虛機(jī)的鏡像文件目錄是在一個(gè)共享的存儲(chǔ)上的。
在基于共享存儲(chǔ)系統(tǒng)時(shí),KVM 動(dòng)態(tài)遷移的具體過程為:
1、遷移開始時(shí),客戶機(jī)依然在宿主機(jī)上運(yùn)行,與此同時(shí),客戶機(jī)的內(nèi)存頁被傳輸?shù)侥康闹鳈C(jī)上。
2、QEMU/KVM 會(huì)監(jiān)控并記錄下遷移過程中所有已被傳輸?shù)膬?nèi)存頁的任何修改,并在所有內(nèi)存頁都傳輸完成后即開始傳輸在前面過程中內(nèi)存頁的更改內(nèi)容。
3、QEMU/KVM 會(huì)估計(jì)遷移過程中的傳輸速度,當(dāng)剩余的內(nèi)存數(shù)據(jù)量能夠在一個(gè)可以設(shè)定的時(shí)間周期(默認(rèn) 30 毫秒)內(nèi)傳輸完成時(shí),QEMU/KVM 會(huì)關(guān)閉源宿主機(jī)上的客戶機(jī),再將剩余的數(shù)據(jù)量傳輸?shù)侥康闹鳈C(jī)上,最后傳輸過來的內(nèi)存內(nèi)容在目的宿主機(jī)上恢復(fù)客戶機(jī)的運(yùn)行狀態(tài)。
4、至此,KVM 的動(dòng)態(tài)遷移操作就完成了。遷移后的客戶機(jī)盡可能與遷移前一致,除非目的主機(jī)上缺少一些配置,比如網(wǎng)橋等。
注意:當(dāng)客戶機(jī)中內(nèi)存使用率非常大而且修改頻繁時(shí),內(nèi)存中數(shù)據(jù)不斷被修改的速度大于KVM能夠傳輸?shù)膬?nèi)存速度時(shí),動(dòng)態(tài)遷移的過程是完成不了的,這時(shí)候只能靜態(tài)遷移。關(guān)于實(shí)時(shí)遷移的效率,業(yè)界不少人提出了改進(jìn)的建議,比如通過使用內(nèi)存壓縮技術(shù),減少需要傳輸?shù)膬?nèi)存的大小
遷移注意事項(xiàng)
1、最好遷移的服務(wù)器cpu品牌一樣
2、64位只能在64位宿主機(jī)間遷移,32位可以遷移32位和64位宿主機(jī)
3、宿主機(jī)名字不能沖突
4、目的宿主機(jī)和源宿主機(jī)軟件配置盡可能的相同,如 有相同的橋接網(wǎng)卡,資源池等。
5、兩臺(tái)遷移的主機(jī) cat /proc/cpuinfo |grep nx 的設(shè)置是相同的NX,全名為“No eXecute”,即“禁止運(yùn)行”,是應(yīng)用在CPU的一種技術(shù),用作把存儲(chǔ)器區(qū)域分隔為只供存儲(chǔ)處理器指令集,或只供數(shù)據(jù)使用。任何使用NX技術(shù)的存儲(chǔ)器,代表僅供數(shù)據(jù)使用,因此處理器的指令集并不能在這些區(qū)域存儲(chǔ)。這種技術(shù)可防止大多數(shù)的緩沖溢出攻擊,即一些惡意程序,把自身的惡意指令集放在其他程序的數(shù)據(jù)存儲(chǔ)區(qū)并運(yùn)行,從而把整臺(tái)計(jì)算機(jī)控制。
靜態(tài)遷移
1.拷貝鏡像文件和虛擬機(jī)配置文件
2.重新定義此虛擬機(jī)
動(dòng)態(tài)遷移
1.創(chuàng)建共享存儲(chǔ)
2.兩臺(tái)機(jī)器掛載共享存儲(chǔ)(手工掛載;使用資源池)
3.啟動(dòng)動(dòng)態(tài)遷移
4.創(chuàng)建遷移后的虛擬機(jī)配置文件
5.重新定義虛擬機(jī)
遷移幫助命令
virsh migrate --help
?
[--domain] <string> 域名,id 或 uuid
[--desturi] <string> 客戶端(常規(guī)遷移)或者源(p2p 遷移)中看到到目的地主機(jī)連接 URI
--live 熱遷移
--offline 離線遷移
--p2p 點(diǎn)對(duì)點(diǎn)遷移
--direct 直接遷移--tunnelled 管道遷移
--persistent 目的地中的持久 VM
--undefinesource 在源中取消定義 VM
--suspend 部啟用目的地主機(jī)中的域
--copy-storage-all 使用全磁盤復(fù)制的非共享存儲(chǔ)進(jìn)行遷移
--copy-storage-inc 使用增值復(fù)制(源和目的地共享同一基礎(chǔ)映像)的非共享存儲(chǔ)進(jìn)行遷移
--change-protection 遷移結(jié)束前不得對(duì)域進(jìn)行任何配置更改
--unsafe 即使不安全也要強(qiáng)制遷移
--verbose 顯示遷移進(jìn)程
--compressed 實(shí)時(shí)遷移過程中壓縮重復(fù)的頁
--auto-converge force convergence during live migration
--rdma-pin-all support memory pinning during RDMA live migration
--abort-on-error 在遷移過程中忽略軟錯(cuò)誤
--migrateuri <string> 遷移 URI, 通??墒÷?--graphicsuri <string> 無空隙圖形遷移中使用的圖形 URI
--listen-address <string> listen address that destination should bind to forincoming migration
--dname <string> 在遷移過長(zhǎng)中重新命名為一個(gè)新名稱(如果支持)
--timeout <number> 如果 live 遷移超時(shí)(以秒計(jì))則強(qiáng)制虛擬機(jī)掛起
--xml <string> 包含為目標(biāo)更新的 XML 的文件名
--migrate-disks <string> comma separated list of disks to be migrated
遷移實(shí)例
????????冷遷移時(shí)把kvm1中的配置文件,通過scp命令傳到kvm2中;熱遷移時(shí)需要把配置輸入到nfs服務(wù)器中,導(dǎo)入本地目錄,達(dá)到開機(jī)狀態(tài)還可以繼續(xù)遷移。拓?fù)鋱D如下:
冷遷移
????????顧名思義,關(guān)機(jī)后遷移,類似與克隆。
????????先查看都有哪些虛擬機(jī),下面正好打開一臺(tái)myvm02,連接進(jìn)入在當(dāng)前目錄創(chuàng)建一個(gè)文件,輸入一些內(nèi)容,等遷移完成的時(shí)候查看。
[root@kvm1 ~]# virsh list --all
Id ? Name ? ? ? ? ? ? ? ? ? ? ? ? ? State
----------------------------------------------------
4 ? ? myvm02 ? ? ? ? ? ? ? ? ? ? ? ? running
- ? ? vm01 ? ? ? ? ? ? ? ? ? ? ? ? ? shut off
- ? ? vm02 ? ? ? ? ? ? ? ? ? ? ? ? ? shut off
?
?
[root@kvm1 ~]# virsh console myvm02
Connected to domain myvm02
Escape character is ^]
?
CentOS Linux 7 (Core)
Kernel 3.10.0-1160.el7.x86_64 on an x86_64
?
localhost login: root
Password:
[root@localhost ~]# hostnamectl set-hostname 8-10
[root@localhost ~]# bash
[root@8-10 ~]# vi test.txt
hello world
關(guān)機(jī)后查看確定是否關(guān)機(jī)
[root@kvm1 ~]# virsh shutdown myvm02
Domain myvm02 is being shutdown
?
[root@kvm1 ~]# virsh list --all
????????通過scp命令把磁盤文件復(fù)制到kvm2上,因?yàn)榇疟P較大,需要稍等片刻。不知道磁盤文件的使用virsh dumpxml myvm02找磁盤文件。
[root@kvm1 ~]# scp /kvm/img/vm02.qcow2 192.168.8.20:/kvm/img
把myvm02虛擬機(jī)配置文件導(dǎo)出,傳到kvm2中
[root@kvm1 ~]# virsh dumpxml myvm02 > /tmp/vm02.xml
[root@kvm1 ~]# scp /tmp/vm02.xml root@192.168.8.20:/etc/libvirt/qemu/
????????打開kvm2,從新定義虛擬機(jī),查看myvm02已經(jīng)存在,開機(jī)測(cè)試查看 是否有test文件,到此冷遷移完成。
[root@kvm2 ~]# virsh define /etc/libvirt/qemu/vm02.xml
Domain myvm02 defined from /etc/libvirt/qemu/vm02.xml
?
[root@kvm2 ~]# virsh list --all
Id ? Name ? ? ? ? ? ? ? ? ? ? ? ? ? State
----------------------------------------------------
- ? ? myvm02 ? ? ? ? ? ? ? ? ? ? ? ? shut off
?
[root@kvm2 ~]# virsh start myvm02
Domain myvm02 started
?
CentOS Linux 7 (Core)
Kernel 3.10.0-1160.el7.x86_64 on an x86_64
?
8-10 login: root
Password:
Last login: Mon Apr 24 17:21:09 on ttyS0
[root@8-10 ~]# cat test.txt
hello world
熱遷移
????????熱遷移要求較高,磁盤文件需要做nfs共享,虛擬網(wǎng)卡配置為網(wǎng)橋模式方便測(cè)試,這里將配置從nfs開始,后面創(chuàng)建池、卷、虛擬機(jī)。
打開nfs服務(wù)器
[root@nfs ~]# yum -y install nfs-utils rpcbind
#省略安裝內(nèi)容
[root@nfs ~]# mkdir /nfsdir
[root@nfs ~]# vim /etc/exports
/nfsdir *(rw,sync,no_root_squash)
?
[root@nfs ~]# systemctl start nfs rpcbind
[root@nfs ~]# systemctl enable nfs rpcbind
測(cè)試nfs
打開另外兩臺(tái)kvm
[root@kvm1 ~]# showmount -e 192.168.8.30
Export list for 192.168.8.30:
/nfsdir *
配置本地地址解析
[root@kvm1 ~]# vim /etc/hosts
192.168.8.10 kvm1
192.168.8.20 kvm2
[root@kvm1 ~]# scp /etc/hosts root@192.168.8.20:/etc/
配置kvm1網(wǎng)絡(luò)
[root@kvm1 ~]# cd /etc/sysconfig/network-scripts/
[root@kvm1 network-scripts]# cp ifcfg-ens33 ifcfg-br10
[root@kvm1 network-scripts]# vim ifcfg-ens33
TYPE=Ethernet
NAME=ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE=br10
[root@kvm1 network-scripts]# vim ifcfg-br10
DEVICE=br10
TYPE=Bridge
BOOTPROTO=static
NAME=br10
ONBOOT=yes
IPADDR=192.168.8.10
GATEWAY=192.168.8.2
DNS1=8.8.8.8
[root@kvm1 network-scripts]# systemctl restart network
配置kvm2網(wǎng)絡(luò)
[root@kvm2 ~]# cd /etc/sysconfig/network-scripts/
[root@kvm2 network-scripts]# cp ifcfg-ens33 ifcfg-br10
[root@kvm2 network-scripts]# vim ifcfg-ens33
TYPE=Ethernet
NAME=ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE=br10
[root@kvm2 network-scripts]# vim ifcfg-br10
DEVICE=br10
TYPE=Bridge
BOOTPROTO=static
NAME=br10
ONBOOT=yes
IPADDR=192.168.8.20
GATEWAY=192.168.8.2
DNS1=8.8.8.8
[root@kvm2 network-scripts]# systemctl restart network
創(chuàng)建kvm1與kvm2之間互信
kvm1
[root@kvm1 ~]# ssh-keygen -t rsa
#直接按回車
[root@kvm1 ~]# ssh-copy-id 192.168.8.20 #傳給對(duì)端kvm2
kvm2
[root@kvm2 ~]# ssh-keygen -t rsa
#直接按回車
[root@kvm2 ~]# ssh-copy-id 192.168.8.10 #傳給對(duì)端kvm1
測(cè)試時(shí),使用ssh 加對(duì)端ip無交互即可登錄對(duì)端主機(jī)。
????????開始創(chuàng)建存儲(chǔ)池,兩臺(tái)都需要?jiǎng)?chuàng)建,如果做動(dòng)態(tài)遷移,虛擬機(jī)需要在nfs共享目錄內(nèi)。下面創(chuàng)建的池名為nfspool(自己定義)類型是netfs 源主機(jī)是nfs服務(wù)器ip,源地址是nfs服務(wù)器中的共享目錄,而目標(biāo)地址就是kvm主機(jī)的存放目錄。(這條命令就相當(dāng)于掛載目錄)
[root@kvm1 ~]# mkdir /kvm/nfspool
[root@kvm1 ~]# virsh pool-define-as --name nfspool --type netfs --source-host 192.168.8.30 --source-path /nfsdir --target /kvm/nfspool
Pool nfspool defined
[root@kvm1 ~]# virsh pool-start nfspool
Pool nfspool started
kvm2操作跟上面一樣
[root@kvm2 ~]# mkdir /kvm/nfspool
[root@kvm2 ~]# virsh pool-define-as --name nfspool --type netfs --source-host 192.168.8.30 --source-path /nfsdir --target /kvm/nfspool
Pool nfspool defined
[root@kvm2 ~]# virsh pool-start nfspool
Pool nfspool started
????????現(xiàn)在池中是沒有卷的,先創(chuàng)建一個(gè)卷,這里就在kvm1中創(chuàng)建了,因?yàn)槭菕燧d上了,創(chuàng)建的卷會(huì)在nfs服務(wù)器中共享到kvm2中。下面命令表示在nfspool池中創(chuàng)建一個(gè)nfs_vm01.qcow2的卷,大小為10G,文件類型為qcow2 。
[root@kvm1 ~]# ls /kvm/nfspool/
[root@kvm1 ~]# virsh vol-create-as nfspool nfs_vm01.qcow2 10G --format qcow2
Vol nfs_vm01.qcow2 created
[root@kvm1 ~]# virsh vol-list nfspool
Name Path
------------------------------------------------------------------------------
nfs_vm01.qcow2 /kvm/nfspool/nfs_vm01.qcow2
現(xiàn)在查看kvm2,上面是有磁盤文件的。
[root@kvm2 ~]# ls /kvm/nfspool/
nfs_vm01.qcow2
安裝一臺(tái)虛擬機(jī)到共享池,創(chuàng)建的是后就需要等一會(huì)了,注意設(shè)置時(shí)區(qū),root密碼等。
[root@kvm1 ~]# virt-install -n vm001 -r 1024 --vcpus 1 -l /kvm/iso/centos.iso --disk /kvm/nfspool/nfs_vm01.qcow2 -w bridge=br10 --nographics -x "console=ttyS0"
????????到這里是不是覺得上面的操作很熟悉,沒錯(cuò)就是繼續(xù)NFS的存儲(chǔ)池,這里nfs服務(wù)器省略了創(chuàng)建LVM卷,生產(chǎn)環(huán)境中還是不能省略的。因?yàn)槲疫@里nfs目錄中沒有虛擬機(jī)所以需要?jiǎng)?chuàng)建遷移的虛擬機(jī)。它的工作原理簡(jiǎn)單來說,在kvm1共享目錄中的虛擬機(jī),也在kvm2共享目錄中,因?yàn)槭菕燧d的nfs服務(wù),當(dāng)要維護(hù)kvm1的時(shí)候需要停止它的服務(wù),這時(shí)可以把虛擬機(jī)轉(zhuǎn)換kvm2中開啟,關(guān)閉kvm1的虛擬機(jī),而服務(wù)時(shí)不會(huì)停,后面測(cè)試用ping訪問。
登錄虛擬機(jī),獲取地址。
localhost login: root
Password:
[root@localhost ~]# dhclient
[root@localhost ~]# ip a show ens3
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:40:41:ed brd ff:ff:ff:ff:ff:ff
inet 192.168.8.132/24 brd 192.168.8.255 scope global dynamic ens3
valid_lft 1797sec preferred_lft 1797sec
????????切換會(huì)kvm1,實(shí)現(xiàn)遷移。遷移前使用win端ping虛擬機(jī)ip,切記添加-t參數(shù)一直ping,查看切換的同時(shí)會(huì)不會(huì)有延遲。
[root@kvm1 ~]# virsh migrate vm001 --live --unsafe qemu+ssh://192.168.8.20/system
可以看到下圖中有一個(gè)請(qǐng)求超時(shí),但馬上就好了。
查看kvm1中的虛擬機(jī),vm001已經(jīng)關(guān)閉。?
[root@kvm1 ~]# virsh list --all
Id ? Name ? ? ? ? ? ? ? ? ? ? ? ? ? State
----------------------------------------------------
- ? ? myvm02 ? ? ? ? ? ? ? ? ? ? ? ? shut off
- ? ? vm001 ? ? ? ? ? ? ? ? ? ? ? ? shut off
- ? ? vm01 ? ? ? ? ? ? ? ? ? ? ? ? ? shut off
- ? ? vm02 ? ? ? ? ? ? ? ? ? ? ? ? ? shut off
查看kvm2中的虛擬機(jī),vm001已經(jīng)遷移過來了,并且是開啟狀態(tài)。文章來源:http://www.zghlxwxcb.cn/news/detail-465359.html
[root@kvm2 ~]# virsh list --all
Id ? Name ? ? ? ? ? ? ? ? ? ? ? ? ? State
----------------------------------------------------
1 ? ? myvm02 ? ? ? ? ? ? ? ? ? ? ? ? running
4 ? ? vm001 ? ? ? ? ? ? ? ? ? ? ? ? running
錯(cuò)誤總結(jié)
????????下面這個(gè)錯(cuò)誤表示地址解析不到kvm2,想到了沒有給他們兩臺(tái)地址解析,這個(gè)文檔上面已經(jīng)添加了。文章來源地址http://www.zghlxwxcb.cn/news/detail-465359.html
[root@kvm1 ~]# virsh migrate vm001 --live --unsafe qemu+ssh://192.168.8.20/system
error: Unable to resolve address 'kvm2' service '49152': Name or service not known
到了這里,關(guān)于【KVM虛擬化】· 虛擬機(jī)的冷遷移和熱遷移的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!