轉自: http://www.cnblogs.com/pycode/p/6494848.htmlcss
*非在線遷移 (有時也稱之爲‘遷移’)。也就是在遷移到另外的計算節點時的這段時間虛擬機實例是處於宕機狀態的。在此狀況下,實例須要重啓才能工做。html
*在線遷移 (或 '真正的在線遷移')。實例幾乎沒有宕機時間。用於當實例須要在遷移時保持運行。在線遷移有下面幾種類型:python
* 基於共享存儲的在線遷移。全部的Hypervisor均可以訪問共享存儲。 * 塊在線遷移。無須共享存儲。但諸如CD-ROM之類的只讀設備是沒法實現的。 * 基於卷的在線遷移。實例都是基於卷的而不是臨時的磁盤,無須共享存儲,也支持遷移(目前僅支持基於libvirt的hypervisor)。
熱遷移(Live Migration,又叫動態遷移、實時遷移),即虛擬機保存/恢復(Save/Restore):將整個虛擬機的運行狀態完整保存下來,同時能夠快速的恢復到原有硬件平臺甚至是不一樣硬件平臺上。恢復之後,虛擬機仍舊平滑運行,用戶不會察覺到任何差別。nginx
OpenStack有兩種在線遷移類型:live migration和block migration。Livemigration須要實例保存在NFS共享存儲中,這種遷移主要是實例的內存狀態的遷移,速度應該會很快。Block migration除了實例內存狀態要遷移外,還得遷移磁盤文件,速度會慢些,可是它不要求實例存儲在共享文件系統中。
NFS容許一個系統在網絡上與他人共享目錄和文件。經過使用NFS,用戶和程序能夠像訪問本地文件同樣訪問遠端系統上的文件。數據庫
權限檢查,執行遷移的用戶是否有足夠的權限執行動態遷移。swift
參數檢查,傳遞給 API 的參數是否足夠和正確,如是否指定了 block-migrate 參數。api
檢查目標物理主機是否存在。ruby
檢查被遷移的虛擬機是不是 running 狀態。bash
檢查源和目的物理主機上的 nova-compute service 是否正常運行。markdown
檢查目的物理主機和源物理主機是不是同一臺機器。
檢查目的物理主機是否有足夠的內存(memory)。
檢查目的和源物理主機器 hypervisor 和 hypervisor 的版本是否相同。
在真正執行遷移前,必須作一下熱身,作一些準備工做。
* 在目的物理主機上得到和準備虛擬機掛載的塊設備(volume)。
* 在目的物理主機上設置虛擬機的網絡(networks)。 * 目的物理主機上設置虛擬機的防火牆(fireware)。
在源物理主機上 detach volume。
在源物理主機上釋放 security group ingress rule。
在目的物理主機上更新數據庫裏虛擬機的狀態。
在源物理主機上刪除虛擬機。
上面四步正常完成後,虛擬機就成功的從源物理主機成功地遷移到了目的物理主機了
熱遷移條件:
1.計算節點之間能夠經過主機名互相訪問
2.計算節點和控制節點的nova uid和gid保持一致 3.vncserver_proxyclient_address和vncserver_listen 監聽的是本地IP 4.必須有共享存儲,實例存放在共享存儲中,且每一個計算節點均可以訪問共享存儲。不然只能使用塊遷移
添加live_migration_flag
修改nova的配置文件,在[libvirt] 段下 添加以下字段
live_migration_flag="VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_PERSIST_DEST,VIR_MIGRATE_TUNNELLED"
修改libvirt配置
配置versh免密碼鏈接,修改/etc/libvirt/libvirtd.conf
添加以下配置
listen_tls = 0 listen_tcp = 1 tcp_port = "16509" listen_addr = "172.16.201.8" #根據本身的計算節點IP改寫 auth_tcp = "none"
修改/etc/sysconfig/libvirtd 添加以下參數
LIBVIRTD_CONFIG=/etc/libvirt/libvirtd.conf LIBVIRTD_ARGS="--listen"
重啓libvirt
systemctl restart libvirtd.service
查看監聽端口:
[root@compute1 ~]# netstat -lnpt | grep libvirtd tcp 0 0 172.16.206.6:16509 0.0.0.0:* LISTEN 9852/libvirtd
測試:
在compute1節點上:
virsh -c qemu+tcp://compute2/system 在compute2節點上 virsh -c qemu+tcp://compute1/system 若是能無密碼鏈接上去,表示配置沒問題
nova list
nova show f3d749ba-98e1-4624-9782-6da729ad164c
查看可用的計算節點
nova-manage service list
查看目標節點資源
nova-manage service describe_resource computer1
開始遷移,正常無任何回顯
nova live-migration 8da00f69-05f6-4425-9a8a-df56b79a474f computer1
冷遷移須要啓動nova帳戶,並配置ssh 免密碼認證
usermod -s /bin/bash nova su - nova ssh-keygen -t rsa #生成密鑰 cp -fa id_rsa.pub authorized_keys
將密鑰複製到全部計算節點的/var/lib/nova/.ssh下,並設置權限爲nova用戶
編輯/etc/nova/nova.conf的配置文件,修改下面參數
allow_resize_to_same_host=True scheduler_default_filters=RetryFilter,AvailabilityZoneFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter
在計算節點重啓nova服務
systemctl restart openstack-nova-compute
在controller節點重啓nova 相關服務
systemctl restart openstack-nova-api.service openstack-nova-scheduler.service