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),須要對鏡像文件和內存數據同時遷移。
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遠程登陸和傳輸,因此開啓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.3操做記錄
查看虛擬機
查看虛擬機所在計算節點
遷移
查看遷移後的虛擬機所在節點
在遷移過程當中,dashboard中會出現正在遷移的任務
3.4 大型鏡像測試
OpenLab平臺鏡像遷移
建立虛擬機,鏡像是ubuntu,1.8G
遷移以前ubuntu所在的主機爲compute14
遷移中
遷移以後ubuntu所在的主機爲compute15
運行測試
建立虛擬機ubuntu_two,所在主機爲compute14
遷移以前的界面
遷移過程
遷移以後的虛擬機所在的主機爲compute15
遷移過程很快,2min左右,遷移以後界面仍然是以前的界面