openstack熱遷移和冷遷移

轉自: http://www.cnblogs.com/pycode/p/6494848.htmlcss

 

遷移類型:

*非在線遷移 (有時也稱之爲‘遷移’)。也就是在遷移到另外的計算節點時的這段時間虛擬機實例是處於宕機狀態的。在此狀況下,實例須要重啓才能工做。html

*在線遷移 (或 '真正的在線遷移')。實例幾乎沒有宕機時間。用於當實例須要在遷移時保持運行。在線遷移有下面幾種類型:python

* 基於共享存儲的在線遷移。全部的Hypervisor均可以訪問共享存儲。 * 塊在線遷移。無須共享存儲。但諸如CD-ROM之類的只讀設備是沒法實現的。 * 基於卷的在線遷移。實例都是基於卷的而不是臨時的磁盤,無須共享存儲,也支持遷移(目前僅支持基於libvirt的hypervisor)。

什麼是熱遷移

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

openstack熱遷移

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)。
  • 遷移
    條件知足而且作完了預處理工做後,就能夠執行動態遷移了。主要步驟以下:
    • 調用 libvirt python 接口 migrateToURI,來把源主機遷移到目的主機。
      dom.migrateToURI(CONF.live_migration_uri % dest,logical_sum,None,CONF.live_migration_bandwidth)
      live_migration_uri:這個 URI 就是在 3.2.2 裏介紹的 libvirtd 進程定義的。
      live_migration_bandwidth:這個參數定義了遷移過程當中所使用的最大的帶寬。
    • 以必定的時間間隔(0.5)循環調用 wait_for_live_migration 方法,來檢測虛擬機遷移 的狀態,一直到虛擬機成功遷移爲止。
  • 遷移後的處理
    當虛擬機遷移完成後,要作一些善後工做。
    • 在源物理主機上 detach volume。

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

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

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

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

Live Migration 的實現

熱遷移條件:

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

  • 也能夠經過dashboard 節點遷移
    用節點遷移須要使用admin管理員用戶執

冷遷移配置

冷遷移須要啓動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 
 
 
轉自: http://www.cnblogs.com/pycode/p/6494848.html
相關文章
相關標籤/搜索