Proxmox VE 提供了完整的虛擬機遷移功能,並且具有 Online 不停機與 Offline 離線兩種遷移模式,相當靈活。
需求情境
在實務上,我們會把 PVE 伺服器的網路至少分成兩個區塊,一個是對外服務的網路,一個是 PVE 伺服器與 Storage 儲存伺服器的專用網路。
以我的 PVE 搭配 FreeNAS 為例,會是這樣:
服務與儲存專用網路區隔
這個時候需要注意一件事,當我們使用 PVE 提供的虛擬機遷移功能時,預設會使用 vmbr0 這個介面進行資料記憶體狀態等資訊傳送,記憶體越大資料量越大,若採取的是 Local Disk 參數遷移,則要抄寫的資料更多。
除非使用者有手動修改過以下檔案,才有可能 vmbr0 不是預設:
- /etc/hosts
- /etc/interfaces
- /etc/pve/corosync.conf
遷移將會使用預設 vmbr0 介面
通常我會讓對外服務的網路跟 vmbr0 共用,另建一個 vmbr10 給連接 Storage 儲存伺服器專用,vmbr0 使用 1G,vmbr10 使用 10G。
問題來了
到上面的最後一張圖為止,看起來沒什麼問題?不,問題可大了。
回想一下,vmbr0 所用的可是只有 1G 而已,這表示當我們進行虛擬機遷移的時候,走的是 vmbr0 只有 1G 的頻寬,時間與速度都落差極大,完全無法使用到 10Gbe 這邊的高速網路效益。
那該怎麼辦呢?難道重裝 PVE,安裝後把 vmbr0 留著做為與 Storage 儲存伺服器連接專用,另建 vmbr10 提供服務區解決?
不,更不妥,官方文件上明白寫道「請不要把 Cluster 的網路 (vmbr0) 與 Storage 的網路混在一起」。
那到底該怎麼辦?
解決方法
別擔心,PVE 有解決方案,只要會開 Shell 命令列下指令,就能搞定。
以本文提到的主機為例,我們想要讓遷移的行為發生在 10G 的線路,這樣才能充份加速遷移的效率。
- vmbr0 服務區:172.16.x.x (1G)
- vmbr10 儲存區:10.100.x.x (10G)
請登入 PVE Node 節點的 Shell 命令列,以指令操作。
指定網路介面進行線上遷移
關鍵指令就是最後的 --migration_network 參數,透過它可以指定要使用的網路介面。qm migrate <虛擬機ID> <目標節點> --online --migration_network x.x.x.0/xx
以下的案例就是強迫遷移時不走預設的 172.16.x.x 介面,改走 10.100.x.x 以獲得更快的效能。
指定網路介面進行遷移
開始執行時,PVE 會顯示這次的遷移設定,圖中的第一行輸出就顯示了指定使用 10.100.x.x 介面,即可確認是走 10G 這邊的網路了。
至此,我們解決了因為 10G 不是預設網路介面,而導致無法提升遷移時的效能問題。
新的問題
等等,故事好像少了些東西...難道為了 10G,我每次移機都要用指令嗎?
當然不是,
請用文字編輯器開啟 /etc/pve/datacenter.cfg。
修改遷移使用之預設網路
指定預設遷移網路參數
從此以後主機遷移,預設都會走這裡所指定的網路介面,包括在 WebUI 上的操作也是。migration: secure,network=x.x.x.0/xx
WebUI 遷移已走預設網路介面
從上圖的紅色標示中可以確認,這次的遷移的確已經改走我們所指定的專用網路,再也不需要為了要更好的遷移效能而大費週章的進入 Shell 命令列下參數,還要小心翼翼的輸入指令擔心打錯引發災難。
提醒:
進階修改請小心服用,建議先做備份再進行,以策安全。
參考資料
- qm(1)
https://pve.proxmox.com/pve-docs/qm.1.html
- Cluster Manager - guest_migration
https://pve.proxmox.com/pve-docs/chapter-pvecm.html#_guest_migration