OpenStack虛擬機冷遷移與熱遷移

 1、虛擬機遷移分析node

openstacvk虛擬機遷移分爲冷遷移和熱遷移兩種方式。python

1.1冷遷移數據庫

冷遷移(cold migration),也叫靜態遷移。關閉電源的虛擬機進行遷移。經過冷遷移,能夠選擇將關聯的磁盤從一個數據存儲移動到另外一個數據存儲。ubuntu

好處:虛擬機不須要位於共享存儲器上,數據丟失率小。後端

缺點:須要關閉電源,業務中斷。跨域

 

1.2熱遷移:網絡

熱遷移(Live Migration),又叫動態遷移、實時遷移,即虛擬機保存/恢復,一般是將整個虛擬機的運行狀態完整保存下來,同時能夠快速的恢復到原有硬件平臺甚至是不一樣硬件平臺上。恢復之後,虛擬機仍舊平滑運行,用戶不會察覺到任何差別。tcp

好處:軟件和硬件系統的維護升級,不會影響用戶的關鍵服務,提升了服務的高可用性和 用戶的滿意度。測試

缺點:過程不可中斷,操做複雜。ui

 

1.3虛擬機遷移的場景:

場景 1:物理機器硬件系統的維護,故障修復和升級(upgrade),但運行在這臺物理機器上的虛擬機不能關機,由於用戶重要的服務跑在上面。

場景 2:物理機器軟件系統升級,打補丁(patch),爲了避免影響上面跑的虛擬機,在升級和打補丁以前,須要把虛擬機遷移到別的物理機器上。

場景 3:一個物理機器上的負載過重,須要減小一些虛擬機來釋放資源。

場景 4跨域環境下,有的域裏有的物理機上的虛擬機太多,有的域裏物理機上虛擬機太少,作一下資源平衡。

 

1.4虛擬機遷移中數據處理

虛擬機的遷移,就是數據的轉移,若是計算節點之間沒有共享存儲,因此要轉移的數據包括兩部分:

一、靜態數據:存儲在本地的虛擬機的鏡像文件,包括後端鏡像(libvirt Base)和虛擬機單獨的增量鏡像文件(libvirt instance disks)

二、動態數據:內存裏虛擬機的運行時數據,內存裏的數據是動態變化的數據,虛擬機裏運行的負載的大小直接影響遷移的時間長短。

 

1.5虛擬機遷移中存儲

共享存儲與非共享存儲

虛擬機的數據存在共享磁盤上(Shared storage-based live migration),遷移只須要完成內存數據的遷移。

 

虛擬機的數據存在本地磁盤(block migration),須要對鏡像文件和內存數據同時遷移。

 

注意:本文使用的系統是ubuntu18.04,OpenStack版本是Pike。其餘系統略有出入

 

2、冷遷移

冷遷移實現方法有多種,例若有快照來遷移實例、實例文件遷移。以文件遷移爲例,完成冷遷移。

2.1虛擬機文件冷遷移步驟:

一、關閉虛擬機

二、找到虛擬機位於/var/lib/nova/instances下文件

三、將虛擬機的文件所有copy到目標主機的相同位置下

四、修改用戶組

五、更新數據庫中host,node字段爲目標主機的名字

六、重啓目標主機的nova-compute服務

 

2.2操做記錄

顯示運行的虛機

 

關閉虛機

 

將文件copy到目標主機的對應位置下

 

 

修改權限

  

 

修改數據庫中的字段

update instances set host='compute15', node='compute15' where uuid='3483d9f1-4015-48d9-9837-b67ca82dd54d';

 

 

查詢虛機所在的主機

 

啓動虛機

 

3、熱遷移

熱遷移是在不停機的狀況下完成遷移,步驟比起冷遷移要複雜。

 

3.1熱遷移步驟:

一、遷移前的條件檢查

二、遷移前的預處理

三、遷移過程

四、遷移後的處理

 

3.1.1遷移前的條件檢查

動態遷移要成功執行,一些條件必須知足,因此在執行遷移前必須作一些條件檢查。

一、權限檢查,執行遷移的用戶是否有足夠的權限執行動態遷移。

二、參數檢查,傳遞給 API 的參數是否足夠和正確,如是否指定了 block-migrate 參數。

三、檢查目標物理主機是否存在。

四、檢查被遷移的虛擬機是不是 running 狀態。

五、檢查源和目的物理主機上的 nova-compute service 是否正常運行。

六、檢查目的物理主機和源物理主機是不是同一臺機器。

七、檢查目的物理主機是否有足夠的內存(memory)

八、檢查目的和源物理主機器 hypervisor hypervisor 的版本是否相同。

 

3.1.2遷移前的預處理

在真正執行遷移前,作一些準備工做

一、在目的物理主機上得到和準備虛擬機掛載的塊設備(volume)

二、在目的物理主機上設置虛擬機的網絡(networks)

三、目的物理主機上設置虛擬機的防火牆(fireware)

 

3.1.3遷移過程

條件知足而且作完了預處理工做後,就能夠執行動態遷移了。主要步驟以下:

一、調用 libvirt python 接口 migrateToURI,來把源主機遷移到目的主機。

二、以必定的時間間隔(0.5)循環調用 wait_for_live_migration 方法,來檢測虛擬機遷移 的狀態,一直到虛擬機成功遷移爲止。

 

3.1.4遷移後的處理

當虛擬機遷移完成後,要作一些善後工做。

一、在源物理主機上 detach volume

二、在源物理主機上釋放 security group ingress rule

三、在目的物理主機上更新數據庫裏虛擬機的狀態。

四、在源物理主機上刪除虛擬機。

上面四步正常完成後,虛擬機就成功的從源物理主機成功地遷移到了目的物理主機了。

 

3.2熱遷移配置:

熱遷移須要libvirt遠程登陸和傳輸,因此開啓libvirtTCP鏈接方式

virsh -c qemu+tcp://172.171.8.14/system

例如:qemu+tcp://172.16.0.15/system,服務端只須要配置

 

修改/etc/libvirt/libvirtd.conf:

listen_tls = 0          listen_tcp = 1          tcp_port = "16509"       listen_addr = "0.0.0.0" auth_tcp = "none"

 

  

 修改libvirtd的配置文件/etc/default/libvirtd:

# Start libvirtd to handle qemu/kvm: start_libvirtd="yes" # options passed to libvirtd, add "-l" to listen on tcp libvirtd_opts="-d -l --config /etc/libvirt/libvirtd.conf"

 

 

以上修改後,執行

service libvirt-bin restart netstat -anpt | grep libvirt

 

能夠看到libvirtd監聽在TCP 16509端口。

 

配置nova.conf

計算節點的/etc/nova/nova.conf文件中添加以下的內容,使得compute服務支持熱遷移。

live_migration_flag=VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE

 

重啓nova-compute

service nova-compute restart

 

修改用戶組

查看目標主機的用戶組信息

id nova

 

 修改全部計算節點爲相同的用戶組id

usermod -u *** nova usermod -u *** libvirt-qemu groupmod -g *** nova groupmod -g *** kvm

  

openstack遷移命令

查看全部實例

nova list

 

查看須要遷移虛擬機實例

nova show [實例id]

 

查看可用的計算節點

nova-manage service list

  

查看目標節點資源

nova-manage service describe_resource computer1

 

開始遷移,正常無任何回顯

nova live-migration  [實例id]  [計算節點] 

 

3.3操做記錄

查看虛擬機

 

 

查看虛擬機所在計算節點

 

 

遷移

 

 

查看遷移後的虛擬機所在節點

 

 

在遷移過程當中,dashboard中會出現正在遷移的任務

 

3.4 大型鏡像測試

OpenLab平臺鏡像遷移

建立虛擬機,鏡像是ubuntu1.8G

 

 

遷移以前ubuntu所在的主機爲compute14

 

 

遷移中 

 

遷移以後ubuntu所在的主機爲compute15

 

 

運行測試

建立虛擬機ubuntu_two,所在主機爲compute14

 

遷移以前的界面

 

遷移過程

 

  

遷移以後的虛擬機所在的主機爲compute15

 

 

遷移過程很快,2min左右,遷移以後界面仍然是以前的界面

 

相關文章
相關標籤/搜索