
本文原載於 iT 邦幫忙 2021 鐵人賽系列〈突破困境:企業開源虛擬化管理平台〉第 27 天,原文連結。
在 Proxmox VE 建立好叢集後,已經可以使用遷移、複寫等等的功能以提升客體機的不停機服務時間,但這都是建基於有管理者人工進行操作所達成的效果。
若我們想要它可以自動化的處理這些移轉、接手運作等等的能力,Proxmox VE 也已經準備好了,在叢集建立完成後,即可使用 Proxmox VE 內建的高可用性 (HA,High Availability) 來打造自動化的容錯移轉機制。
高可用性的必要條件
儘管 Proxmox VE 已經內建高可用性機制,不過要啟用之前還是有幾個先決條件需要達成:
- 已建立好的叢集,且至少 3 個節點
- 客體機磁碟存放在共用儲存,或是本機儲存搭配複寫機制
- 具作業系統級或硬體級的隔離裝置 (Fence Device)

在 Proxmox VE 的叢集功能中,只要 1 個節點即可建立叢集,但要使用高可用性則至少要 3 個節點,這是為了維持叢集票數 (Vote) 能夠判斷誰是正確存活節點的重要機制,整個叢集至少要有 51% 的節點在線上,才能維持正常運作;如果低於 51%,節點會進入鎖定狀態,以保護客體機與相關設定,避免屆時造成腦裂等不可回復的問題。
隔離裝置預設會採用內建的作業系統級監測,主要是以 Watchdog (看門狗) 持續監測節點運作是否正常,若節點運作發生異常它會讓自己進入重新啟動程序,確保回復正常運作模式。
隔離機制的時間範圍預設在 60 秒至 120 秒之間,也就是說當我們設定好高可用性後,當節點發生故障,該節點上的客體機最慢會在 120 秒以內啟動容錯移轉,至其它節點上啟動運作。
共用儲存可以是 iSCSI、NFS、CIFS、ZFS over iSCSI,或者是分散式檔案系統的 Ceph、GlusterFS 等等,只要是 Proxmox VE 所支援的共用儲存類型均可。
補充:
隔離機制的時間是否可以修改為更短?目前這個數字是直接寫在程式碼裡,沒有提供可以設定的選項。
建立高可用性群組
預設並沒有啟動高可用性設定,請選取 資料中心,切換至 HA 下的 群組 頁籤,再按下 建立 按鈕。

進入高可用性群組的建立畫面後,在 ID 欄位輸入一個容易識別的名稱。
右方兩個核取方塊的功能,說明如下:
- Restricted (限定運作節點):
在勾選這個項目的情況下,當下方清單中有勾選的節點全原部故障後,如果有其它節點還正常運作但沒有被勾選的話,客體機也不會嘗試在其它未勾選的節點上啟動。 - Nofailback (不需容錯回復):
在勾選這個項目的情況下,客體機原本所在的節點發生故障而在其它節點上啟動起來運作,若原本所在的節點已經恢復上線運作,高可用性機制不會再自動將它遷移回去原本的節點。
通常我習慣的方式是僅勾選 nofailback,這樣的做法是避免故障的節點恢復上線後,馬上觸發許多客體機要遷移回原本節點,導致大量網路頻寬與磁碟讀寫效能的佔用狀況,有需要遷移回去的再經過人工判斷後,擇期手動執行。
下方的節點清單中,可以勾選這個高可用性群組要適用至那些節點,後方的 Priority 欄位是優先權設定,數字越高者會在高可用性機制運作時,優先將客體機在高優先權的節點啟動,這部份請依據客體機的資源狀況決定。

建立完成以後,可以在清單中看到已經多出了這一筆設定,如果有不同的策略,例如某些客體機特別重要,就可以建立一個可以在所有節點啟動接手運作的群組;若有一些客體機只能在某幾個特定節點才有足夠的效能運作,可以建立一個只有勾選特定節點的群組,並啟用 Restricted 選項。

建立高可用性客體機
前面將高可用性群組建立完成後,即可開始將客體機加入高可用性資源清單裡。
選取 資料中心,切換至 HA 頁籤,再按下 增加 按鈕。

進入高可用性資源增加視窗後,請在 VM 欄位中下拉選取要設定的客體機,本例選取 104 這一部客體機。

接著在 群組 欄位下拉選取這個客體機要套用的群組是那一個,可以選取剛才所建立的 faster-notes 這一個群組。

在 需求狀態 欄位中下拉選取客體機在高可用性機制啟動後,移到另一個節點需要進行的動作:
- started:高可用性機制完成後,在另一節點啟動客體機 (開機)。
- stopped:高可用性機制完成後,在另一節點保持停止 (關機)。
- ignored:高可用性機制會忽略這部客體機,不做任何處理。
- disabled:高可用性機制會停止這部客體機 (關機)。
在左方有兩個數字欄位,分別是:
- 最多重新啟動:
當客體機在新的節點啟動如果失敗,要在再次嘗試重新啟動的上限次數。 - 最多重新遷移:
當客體機在新的節點無法啟動時,要移往下一個節點的上限次數。

補充:
如果客體機是被管理者手動停止 (關機),則客體機的高可用性資源會同時被設定為 stopped。
補充:
如果客體機是被管理者手動啟動 (開機),則客體機的高可用性資源會同時被設定為 started。
高可用性機制運作實例
設定完成高可用性的群組以及加客體機加入資源後,可以來實際看看當節點發生故障時,它會怎麼運作。
我們設定的案例是 104 這部客體機的高可用性資源,並且它目前正運作於 host-111 這個節點,當此節點因為故障而當機時,可以從 Proxmox VE 管理介面的資源檢視區中看到 host-111 節點已經變成離線狀態。

接著高可用性機制就會發現這個節點已經與叢集離線,開始準備進入隔離狀態。

跟著換高可用性資源中的客體機也進入隔離狀態:

高可用性機制將該客體機移轉至 host-106 節點,並且準備將它啟動運作。

該客體機已經順利在 host-106 節點啟動成功開始運作,可於左方的資源檢視區看到 104 這部客體機已經被移到 host-106 下方。

不需容錯回復選項
若該客體機的高可用性資源設定裡沒有勾選 nofailback,如下圖:

當原本故障的 host-111 重新上線與叢集連線正常後,高可用性機制會開始做容錯回復功能,開始將客體機由 host-106 遷移回 host-111。

當遷移完成後,104 這部客體機已經回到原本的節點 host-111 繼續運作。

參考資料
- Proxmox VE 5.3 Cluster, High Availability & Others [20181223]
https://www.slideshare.net/jasoncheng7115/proxmox-ve-cluster-high-availability-others-20181223

