OpenStack虛擬機冷遷移與熱遷移


1、虛擬機遷移分析

openstack虛擬機遷移分為冷遷移和熱遷移兩種方式。

1|11.1冷遷移:


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

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

缺點:需要關閉電源,業務中斷。

1|21.2熱遷移:


熱遷移(Live Migration),又叫動態遷移、實時遷移,即虛擬機保存/恢復,通常是將整個虛擬機的運行狀態完整保存下來,同時可以快速的恢復到原有硬件平台甚至是不同硬件平台上。恢復以后,虛擬機仍舊平滑運行,用戶不會察覺到任何差異。

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

缺點:過程不可中斷,操作復雜。

1|31.3虛擬機遷移的場景:


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

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

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

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

1|41.4虛擬機遷移中數據處理


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

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

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

1|51.5虛擬機遷移中存儲


共享存儲與非共享存儲

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

 

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

 

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

 

2|0二、冷遷移


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

2|12.1虛擬機文件冷遷移步驟:


1、關閉虛擬機

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

3、將虛擬機的文件全部copy到目標主機的相同位置下

4、修改用戶組

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

6、重啟目標主機的nova-compute服務

2|22.2操作記錄


顯示運行的虛機

 

關閉虛機

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

 

修改權限

  

修改數據庫中的字段

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

 

查詢虛機所在的主機

 啟動虛機

 

3|0三、熱遷移


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

3|13.1熱遷移步驟:


1、遷移前的條件檢查

2、遷移前的預處理

3、遷移過程

4、遷移后的處理

3.1.1遷移前的條件檢查

動態遷移要成功執行,一些條件必須滿足,所以在執行遷移前必須做一些條件檢查。

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

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

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

4、檢查被遷移的虛擬機是否是 running 狀態。

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

6、檢查目的物理主機和源物理主機是否是同一台機器。

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

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

3.1.2遷移前的預處理

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

1、在目的物理主機上獲得和准備虛擬機掛載的塊設備(volume)。

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

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

3.1.3遷移過程

條件滿足並且做完了預處理工作后,就可以執行動態遷移了。主要步驟如下:

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

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

3.1.4遷移后的處理

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

1、在源物理主機上 detach volume。

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

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

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

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

3|23.2熱遷移配置:


熱遷移需要libvirt遠程登錄和傳輸,所以開啟libvirt的TCP連接方式

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|33.3操作記錄


查看虛擬機

 

查看虛擬機所在計算節點

 

遷移

 

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

 

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

3|43.4 大型鏡像測試


OpenLab平台鏡像遷移

創建虛擬機,鏡像是ubuntu,1.8G

 

遷移之前ubuntu所在的主機為compute14

 

遷移中 

遷移之后ubuntu所在的主機為compute15

 

運行測試

創建虛擬機ubuntu_two,所在主機為compute14

遷移之前的界面

遷移過程

 

遷移之后的虛擬機所在的主機為compute15

 

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

 

以上內容來源:https://www.cnblogs.com/goldsunshine/p/9588017.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM