Migrate 操做會先將Instance停掉,也就是所謂的 冷遷移 。而 Live Migrate 是熱遷移,也就在線遷移,Instance不會停機,
Live Migrate 分兩種:
一、源和目標節點沒有共享存儲,Instance 在遷移的時候須要將其鏡像文件從源節點傳到目標節點,這叫作Block Migrate (塊遷移)
二、源和目標節點使用共享存儲,Instance的鏡像文件不須要遷移,只須要將 Instance 的狀態遷移到目標節點
源和目標節點須要知足一些條件才能支持 Live Migrate :
一、源和目標節點的CPU類型要一致
二、源和目標節點的Libvirt版本要一致
三、源和目標節點能互相識別對方的主機名稱,好比能夠在 /etc/hosts 中加入對方的條目
四、在源和目標節點的 /etc/nova/nova.conf 中指明在線遷移時使用 TCP 協議
[libvirt]
live_migration_uri = qemu+tcp://stack@%s/system
cpu_mode = none
virt_type = kvm
五、Instance 使用config Driver 保存其metadata。在block Migrate過程當中,該config driver 也須要遷移到目標節點。因爲目前libvirt 只支持 vfat 類型的config driver,因此必須在 /etc/nova/nova.conf 中指明 launch instance 時建立 config driver
[DEFAULT]
config_driver_format = vfat
六、源和目標節點的Libvirt TCP 遠程監聽服務得打開,須要在下面兩個配置文件中作一點配置
/etc/default/libvirt-bin
start_libvirtd="yes"
libvirtd_opts="-d -l"
/etc/libvirt/libvirtd.conf
listen_tls = 0
listen_tcp = 1
unix_sock_group = "libvirtd"
unix_sock_ro_perms = "0777"
unix_sock_rw_perms = "0770"
auth_unix_ro = "none"
auth_unix_rw = "none"
auth_tcp = "none"
而後重啓libvirtd 服務 service libvirt-bin restart
下面是非共享存儲操做流程
Web UI 操做
遷移的時候若是使用的不是共享存儲,須要勾選 Block Migrate
還有一個 Disk Over Commit 選項,nova在檢查目標接地那磁盤空間是否夠用時,按磁盤文件定義的大小計算,不然按照磁盤文件的實際大小計算。
在nova-compute上
一、目標節點執行遷移前的準備工做,首先將instance 的數據遷移過來,主要包括鏡像文件、虛擬網絡等資源,日誌見 n-cpu.log
二、源節點啓動遷移操做,暫停instance
三、在目標節點上Resume instance
四、在源節點上執行遷移的後處理工做,刪除instance
五、在目標節點上執行遷移的後處理工做,建立XML,在Hypervisor中定義instance ,使之下次可以正常啓動
在整個遷移過程當中,長ping instance,能夠發現也就是一個包的延時大了一些,能夠在遷移過程當中instance不會停機。
下面是共享存儲遷移流程
有不少方式能夠實現共享存儲,好比能夠將 instance 的鏡像文件放在NFS上,或者使用NAS服務器,或者分佈式文件系統。
咱們能夠使用NFS方案進行實驗,將NFS路徑掛載到 /opt/stack/data/nova/instances 目錄
共享存儲的遷移過程和 Block Migrate 基本上同樣,只是幾個環境有點區別:
一、向 nova-api 提交請求的時候,不能勾選 Block Migrate
二、由於源和目標節點都能直接訪問instance 的鏡像,因此目標節點在準備階段不須要傳輸鏡像文件,源節點在遷移後的處理階段也不須要刪除instance的目錄
三、只有instance 的狀態須要從源節點傳輸到目標節點,整個遷移速度要快不少