小編給大家分享一下KVM虛擬機(jī)如何實(shí)現(xiàn)在線熱遷移功能,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)新互聯(lián)建站是一家專業(yè)提供融水企業(yè)網(wǎng)站建設(shè),專注與成都做網(wǎng)站、成都網(wǎng)站建設(shè)、HTML5建站、小程序制作等業(yè)務(wù)。10年已為融水眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。
一、KVM虛擬機(jī)的遷移方式及需要注意的問(wèn)題
KVM虛擬機(jī)的遷移有兩種方法:
1、靜態(tài)遷移(冷遷移):對(duì)于冷遷移,就是在虛擬機(jī)關(guān)閉狀態(tài)下,將虛擬機(jī)的磁盤(pán)文件及.xml配置文件(這兩個(gè)文件組成了一個(gè)虛擬機(jī))復(fù)制到要遷移到的目標(biāo)主機(jī)上,然后在目標(biāo)主機(jī)上使用“virsh define *.xml”命令重新定義虛擬機(jī)即可。
2、動(dòng)態(tài)遷移(熱遷移):對(duì)于熱遷移,比較常用,通常是這臺(tái)服務(wù)器上正在跑著一些業(yè)務(wù),而這些業(yè)務(wù)又不允許中斷,那么就需要使用熱遷移了,這篇博文將詳細(xì)寫(xiě)出熱遷移的步驟。
1、冷遷移
通常我們存放虛擬機(jī)磁盤(pán)的目錄都是掛在的一個(gè)nfs文件系統(tǒng)的磁盤(pán),而這個(gè)磁盤(pán)通常是LVM文件系統(tǒng)。所以需要進(jìn)行冷遷移時(shí),只要在目標(biāo)主機(jī)上掛載這個(gè)nfs文件系統(tǒng),就可以看到要遷移的那個(gè)虛擬機(jī)的磁盤(pán)文件,通常以.qcow2或.raw結(jié)尾的,然后,只需將虛擬機(jī)的.xml配置文件發(fā)送到目標(biāo)服務(wù)器上,然后重新定義一下即可通過(guò)“virsh list --all”命令查看到遷移過(guò)來(lái)的虛擬機(jī)。
2、熱遷移
如果源宿主機(jī)和目的宿主機(jī)共享存儲(chǔ)系統(tǒng),則只需要通過(guò)網(wǎng)絡(luò)發(fā)送客戶機(jī)的 vCPU 執(zhí)行狀
態(tài)、內(nèi)存中的內(nèi)容、虛機(jī)設(shè)備的狀態(tài)到目的主機(jī)上。否則,還需要將客戶機(jī)的磁盤(pán)存儲(chǔ)發(fā)到目的主
機(jī)上。共享存儲(chǔ)系統(tǒng)指的是源和目的虛機(jī)的鏡像文件目錄是在一個(gè)共享的存儲(chǔ)上的。
在基于 共享存儲(chǔ)系統(tǒng) 時(shí),KVM 動(dòng)態(tài)遷移的具體過(guò)程為:
1、遷移開(kāi)始時(shí),客戶機(jī)依然在宿主機(jī)上運(yùn)行,與此同時(shí),客戶機(jī)的內(nèi)存頁(yè)被傳輸?shù)侥康闹鳈C(jī)上。
2、QEMU/KVM 會(huì)監(jiān)控并記錄下遷移過(guò)程中所有已被傳輸?shù)膬?nèi)頁(yè)的任何修改,并在所有內(nèi)存頁(yè)都傳輸完成后即開(kāi)始傳輸在前面過(guò)程中內(nèi)存頁(yè)的更改內(nèi)容。
3、QEMU/KVM 會(huì)估計(jì)遷移過(guò)程中的傳輸速度,當(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ī)上,最后傳輸過(guò)來(lái)的內(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)遷移的過(guò)程是完成不了的,這時(shí)候只能靜態(tài)遷移。
3、遷移的注意事項(xiàng)
無(wú)論是冷遷移還是熱遷移,注意事項(xiàng)大都差不多。
遷移前目標(biāo)服務(wù)器的要求如下:
最好遷移的服務(wù)器cpu品牌一樣;
64位只能在64位宿主機(jī)間遷移,32位可以遷移32位和64位宿主機(jī);
宿主機(jī)中的虛擬機(jī)名字不能沖突;
目的宿主機(jī)和源宿主機(jī)軟件配置盡可能的相同,如 有相同的橋接網(wǎng)卡,資源池等;
兩臺(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ī)控制。
小結(jié):
1、靜態(tài)遷移
拷貝鏡像文件和虛擬機(jī)配置文件;
重新定義此虛擬機(jī)。
2、動(dòng)態(tài)遷移
創(chuàng)建共享存儲(chǔ);
兩臺(tái)機(jī)器掛載共享存儲(chǔ)(手工掛載;使用資源池);
啟動(dòng)動(dòng)態(tài)遷移;
創(chuàng)建遷移后的虛擬機(jī)配置文件;
重新定義虛擬機(jī)。
二、kvm虛擬機(jī)熱遷移配置實(shí)例
1、環(huán)境準(zhǔn)備:
我這里的環(huán)境如下:
三臺(tái)Linux服務(wù)器,其中兩臺(tái)是KVM服務(wù)器,IP是192.168.20.2和192.168.20.3。一臺(tái)是NFS服務(wù)器,IP是192.168.20.4,用來(lái)做共享存儲(chǔ)(要求三臺(tái)服務(wù)器可互相ping通);
兩臺(tái)KVM虛擬機(jī)必須都有KVM環(huán)境。
我這的KVM環(huán)境是現(xiàn)成的,這里就不展示了,如果沒(méi)有KVM環(huán)境,可以參考博文:KVM虛擬化基礎(chǔ)管理進(jìn)行搭建(很簡(jiǎn)單,yum安裝一些包,啟動(dòng)“l(fā)ibvirtd”服務(wù)即可,可能需要重啟服務(wù)器)。
2、配置NFS共享存儲(chǔ)
nfs服務(wù)器192.168.20.4配置如下:
[root@nfs ~]# yum -y install nfs-utils rpcbind #安裝所需軟件包 [root@localhost ~]# systemctl enable nfs #設(shè)置NFS開(kāi)機(jī)自啟 [root@localhost ~]# systemctl enable rpcbind #設(shè)置rpcbind開(kāi)機(jī)自啟 [root@nfs ~]# mkdir -p /nfsshare #創(chuàng)建需要共享的目錄 [root@nfs ~]# vim /etc/exports #編輯NFS的配置文件,默認(rèn)為空 /nfsshare *(rw,sync,no_root_squash) #第一列代表共享的目錄 #第二列的星號(hào)代表允許所有網(wǎng)絡(luò)訪問(wèn); #rw代表讀寫(xiě)權(quán)限;sync代表同步寫(xiě)入磁盤(pán); #no_root_squash表示當(dāng)前客戶機(jī)以root身份訪問(wèn)時(shí)賦予本地root權(quán)限 #(默認(rèn)是root_squash,將作為nfsnobody用戶對(duì)待),若不加no_root_squash, #可能會(huì)導(dǎo)致被降權(quán),而無(wú)法進(jìn)行讀寫(xiě)(wr)。 [root@nfs ~]# systemctl restart rpcbind #啟動(dòng)該服務(wù) [root@nfs ~]# systemctl restart nfs #啟動(dòng)該服務(wù) [root@nfs ~]# netstat -anpt | grep rpc #確認(rèn)服務(wù)已啟動(dòng) [root@nfs ~]# showmount -e #查看本機(jī)共享的目錄 Export list for nfs: /nfsshare * [root@nfs ~]# firewall-cmd --add-service=rpc-bind --permanent [root@nfs ~]# firewall-cmd --add-service=nfs --permanent [root@nfs ~]# firewall-cmd --add-service=mountd --permanent [root@nfs ~]# systemctl restart firewalld #重啟防火墻,使配置生效
NFS服務(wù)器至此配置完成!?。?/p>
我這里的遷移操作依賴于桌面圖形化環(huán)境,若需要使用命令遷移,可以下載這個(gè)文檔進(jìn)行參考,我沒(méi)有研究過(guò)使用命令遷移。
兩臺(tái)KVM服務(wù)器配置如下(兩臺(tái)kvm主機(jī)都需要進(jìn)行下面的配置):
1.安裝rpcbind軟件包,并啟動(dòng)rpcbind服務(wù),為了使用showmount查詢工具,所以將nfs-utils也一起裝上:
[root@localhost ~]# yum -y install nfs-utils rpcbind [root@localhost ~]# systemctl enable rpcbind [root@localhost ~]# systemctl start rpcbind [root@kvm ~]# showmount -e 192.168.20.4 #查詢nfs服務(wù)器共享的目錄 Export list for 192.168.20.4: /nfsshare * [root@kvm ~]# mount -t nfs 192.168.20.4:/nfsshare /kvm/disk/ #進(jìn)行掛載 [root@kvm ~]# df -hT /kvm/disk/ 文件系統(tǒng) 類型 容量 已用 可用 已用% 掛載點(diǎn) 192.168.20.4:/nfsshare nfs4 50G 33M 50G 1% /kvm/disk #在其中一臺(tái)服務(wù)器上寫(xiě)入一個(gè)測(cè)試文件,看看在其他服務(wù)器上是否可以看到 [root@kvm1 ~]# touch /kvm/disk/test #在其中一個(gè)kvm服務(wù)器上創(chuàng)建測(cè)試文件 [root@kvm2 ~]# ls /kvm/disk #保證在第二臺(tái)kvm服務(wù)器的目錄下也可以看到 test
至此,就保證了兩臺(tái)kvm服務(wù)器使用的目錄都是同一塊磁盤(pán)存儲(chǔ)的(注意:兩臺(tái)kvm虛擬機(jī)的掛載nfs文件系統(tǒng)的目錄路徑必須一致,我這里兩臺(tái)kvm虛擬機(jī)都是掛載到了/kvm/disk/目錄下,否則會(huì)在后面的操作中發(fā)生錯(cuò)誤)。
3、在兩個(gè)kvm服務(wù)器上分別創(chuàng)建存儲(chǔ)卷:
[root@kvm1 ~]# virt-manager #打開(kāi)虛擬機(jī)控制臺(tái)
下面對(duì)話框中,目標(biāo)路徑是KVM本機(jī)的“/kvm/disk”,主機(jī)名寫(xiě)的是nfs服務(wù)器的IP地址,源路徑是nfs服務(wù)器共享的目錄。
以上操作同樣需要在第二臺(tái)KVM上進(jìn)行操作,最好定義的存儲(chǔ)池名字等都一致。以免發(fā)生不必要的麻煩。
3、在kvm1上新建一個(gè)虛擬機(jī)以便進(jìn)行遷移測(cè)試
:
自行上傳一個(gè)centos的iso系統(tǒng)文件,這里需要指定要安裝的iso文件:
至此,正常的自行安裝虛擬機(jī)即可。
4、將新建的虛擬機(jī)網(wǎng)絡(luò)配置為Bridge模式,可以ping通外網(wǎng)
以下操作主要是為了模擬虛擬機(jī)為公網(wǎng)用戶提供服務(wù)中進(jìn)行熱遷移。
1)kvm1操作如下:
[root@kvm ~]# systemctl stop NetworkManager #停止此服務(wù) [root@kvm ~]# virsh iface-bridge ens33 br0 #執(zhí)行此命令時(shí),若提示以下信息,不用在意,因?yàn)槠湟呀?jīng)存在了 使用附加設(shè)備 br0 生成橋接 ens33 失敗 已啟動(dòng)橋接接口 br0 [root@kvm ~]# ls /etc/sysconfig/network-scripts/ | grep br0 ifcfg-br0 #確定有此文件就行 [root@kvm ~]# virsh destroy centos7.0 #關(guān)閉新建的虛擬機(jī) 域 centos7.0 被刪除 [root@kvm ~]# virsh edit centos7.0 #編輯虛擬機(jī)的配置文件,定位到interface#將此處改為bridge #刪除Mac地址這行 #將此處更改為這樣 #保存退出即可 [root@kvm1 ~]# virsh start centos7.0 域 centos7.0 已開(kāi)始
開(kāi)啟虛擬機(jī)后,配置虛擬機(jī)的網(wǎng)卡配置文件,默認(rèn)網(wǎng)卡文件為ifcfg-eth0:
重啟網(wǎng)絡(luò)服務(wù),并且確認(rèn)IP地址:
現(xiàn)在可以在虛擬機(jī)上執(zhí)行“ping www.baidu.com” 命令,使其持續(xù)ping公網(wǎng)。
2)kvm2操作如下:
[root@kvm ~]# systemctl stop NetworkManager #停止此服務(wù) [root@kvm ~]# virsh iface-bridge ens33 br0 #執(zhí)行此命令時(shí),若提示以下信息,不用在意,因?yàn)槠湟呀?jīng)存在了 使用附加設(shè)備 br0 生成橋接 ens33 失敗 已啟動(dòng)橋接接口 br0 [root@kvm ~]# ls /etc/sysconfig/network-scripts/ | grep br0 ifcfg-br0 #確定有此文件就行 #由于kvm2沒(méi)有虛擬機(jī),所以只需將網(wǎng)絡(luò)更改為橋接模式即可,。 #以上配置是為了防止虛擬機(jī)遷移到這臺(tái)服務(wù)器后,無(wú)法和公網(wǎng)進(jìn)行聯(lián)系。
5、開(kāi)始準(zhǔn)備對(duì)新建的centos 7進(jìn)行熱遷移
1)kvm1服務(wù)器上進(jìn)行以下操作:
[root@kvm1 ~]# virt-manager #打開(kāi)虛擬機(jī)控制臺(tái)
填寫(xiě)如下,填寫(xiě)完成后,單擊“連接”:
會(huì)提示需要安裝以下軟件包:
進(jìn)行安裝:
[root@kvm1 ~]# yum -y install openssh-askpass
根據(jù)彈出的對(duì)話框提示,輸入“yes”:
輸入目標(biāo)主機(jī)的root密碼:
6、開(kāi)始進(jìn)行熱遷移
等待遷移完成,這個(gè)過(guò)程很快:
遷移完成:
現(xiàn)在去目標(biāo)kvm服務(wù)器上,打開(kāi)新遷移過(guò)去的虛擬機(jī)(會(huì)發(fā)現(xiàn)ping命令還在繼續(xù),壓根就沒(méi)有中斷過(guò)):
可以自行使用“virsh list --all”分別在兩臺(tái)kvm服務(wù)器上進(jìn)行確認(rèn),這個(gè)虛擬機(jī)是否真的遷移到第二臺(tái)kvm服務(wù)器上了。
以上是“KVM虛擬機(jī)如何實(shí)現(xiàn)在線熱遷移功能”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!