故障轉移群集的Hyper-V放置策略
Windows Server 故障轉移群集為 Hyper-V 基礎架構提供了一個至關重要的技術,不僅可以提供可用性,而且可以提供可移植性。虛擬化和私有云環境的一個重要概念在于破除負載與底層物理資源之間的捆綁關系,而故障轉移群集通過使用實時遷移技術在不同物理宿主機之間不停機移動和放置虛擬機,真正實現了這一點。這里將提供一些有關放置的***實踐,幫您對群集上使用的不同 Hyper-V 場景進行優化。
默認故障轉移策略
如果有節點遇到故障,虛擬機將被分散到其他群集節點上。在老版本 Windows Server 中,任何資源都可以分散到承載虛擬機數量最少的群集節點中。在 Windows Server 2012 中,這種邏輯進行了改進,可以根據宿主機的內存數量這一最常見的約束性資源,決定虛擬機的分散方式。每個虛擬機都可以放置到空閑內存資源最多的節點中,并且會針對每個虛擬機的資源需求進行評估,例如檢查虛擬機是否支持 NUMA。
如果承載多個虛擬機的群集節點崩潰,群集服務將尋找優先級***的虛擬機,然后檢查其他所有節點,確定擁有空閑內存最多的節點。隨后會在這個節點上啟動該虛擬機。這個過程可以針對所有虛擬機重復進行,從優先級***的虛擬機開始按照優先級高低執行,直到所有虛擬機都重新放置。
虛擬機優先級
在 Windows Server 2012 中,群集中運行的每個虛擬機都可以分配優先級:高、中,或低。這樣即可確保在群集運行中,高優先級的虛擬機可以得到最妥善的放置。同時通過使用這種方式可以確保組織最重要的服務或最關鍵的基礎架構角色可比其他不那么重要的負載更快速的上線。
如果承載多個虛擬機的群集節點崩潰,那么首先將啟動高優先級虛擬機,隨后是中等優先級虛擬機,***才是低優先級的。相同的邏輯還將應用于其他群集的運營,例如并發實時遷移或節點維護模式,這種情況下優先級高的虛擬機總是可以首先移動。
***的所有者
從老版本 Windows Server 開始,就可以針對每個虛擬機配置故障轉移節點順序***項。如果環境要求某些重要的虛擬機必須留在某些節點上,這一特性就顯得非常有用。例如,通常虛擬機都需要盡量留在主要數據中心(***所有者)內運行,只有在主要站點不可用時,虛擬機才在備份數據中心內運行,實現災難恢復。
如果承載了多個虛擬機的群集節點崩潰,高優先級虛擬機會嘗試移動到***所有者列表中的***個節點。如果該節點不可用,那么虛擬機會繼續嘗試移動到***所有者列表中的下一個節點。如果所有***所有者都不可用,那么就會移動到可能的所有者列表中的***個節點。
可能的所有者
在老版本 Windows 中,每個虛擬機還有可能的所有者設置。該設置使得虛擬機可以在不存在可用***所有者的情況下也能移動到其他群集節點并啟動。某些環境要求就算沒有可用的***所有者,也要在其他宿主機上運行虛擬機,此時這個功能就變得非常有用。在多站點群集中,位于備份站點的宿主機可以分配為可能的所有者,但不能作為***所有者。在這樣的場景中,只有主站點沒有可用的節點(***所有者)的情況下,虛擬機才會故障轉移到輔助站點。
如果承載了多個虛擬機的群集節點崩潰,高優先級虛擬機會嘗試移動到***所有者列表中的***個節點。如果所有***所有者都不可用,那么就會移動到可能的所有者列表中的***個節點。如果可能的所有者列表中的***個節點不可用,則會移動到列表中的下一個節點。如果***所有者和可能的所有者列表中都沒有可用節點,虛擬機將會移動到任何其他節點,但保持離線狀態。取決于故障回復策略,只要相應節點變得可用,虛擬機還可以重新回到***所有者或可能的所有者,然后嘗試啟動。
故障恢復
在 Windows Server 2012 中,每個虛擬機還有一個選項非常重要,可以將虛擬機重新移動到***所有者或可能的所有者,并從最***的所有者嘗試啟動。如果希望確保將某些虛擬機保留到相同宿主機上,并且在從崩潰中恢復后重新將這些虛擬機移動到這些宿主機中,該功能就非常有用。
如果群集節點從崩潰中恢復,并重新加入群集關系,那么任何沒有在***所有者上運行的虛擬機都將可以獲得通知,該節點已經可用于進行放置。該過程首先從可能的所有者上運行的優先級***的虛擬機(或者位于其他節點上的離線虛擬機)開始,每個虛擬機都將判斷該節點是否是***宿主機,隨后在自己的***所有者上執行實時遷移(或啟動操作)。
保持模式
在高度虛擬化的環境中還會遇到一個問題:“引導風暴”,如果同時啟動大量虛擬機就容易遇到這種問題。虛擬機的啟動要比標準的正常運行狀態需要更多宿主機資源,因此啟動大量虛擬機有時候可能會使得宿主機過載,影響宿主機的性能,甚至導致宿主機崩潰(如果某些宿主機沒有設置資源保留就可能出現在這種情況)。作為一項安全措施,在故障轉移或節點重啟動過程中,并發啟動的虛擬機數量會受到限制(高優先級的首先啟動),其他虛擬機會在隊列中等待啟動。就算這些虛擬機是在同時啟動,依然會分階段錯峰進行,以確保不會對宿主機造成太大壓力。此外還可以通過配置一些選項避免遇到“引導風暴”。
保持模式最早出現在 Windows Server 2008 R2 中,可以讓虛擬機保留在***一次刻意放置(可能是由系統管理員決定的,或者 System Center Virtual Machine Manager 的放置策略決定的)后所分配的宿主機上。如果整個群集崩潰,每個虛擬機都會等待之前自己所在節點上線,然后開始啟動。當然這個過程也是高優先級虛擬機首先開始。這樣既可防止整個群集的所有虛擬機試圖在上線的***個節點上啟動,有助于避免“引導風暴”。群集服務將等待一個默認設置的時間段,等待原始節點重新加入群集。如果節點在這個時間段內沒有加入群集,虛擬機會被放置到最***的所有者上,這樣既可確保虛擬機依然可以上線,同時使得新宿主機有機會首先啟動自己的虛擬機。
自動啟動
有些時候,如果群集故障轉移或崩潰,我們可能會希望某些不重要的虛擬機先不要啟動,這樣其他虛擬機就有更多機會進行故障轉移,并盡可能快速地上線。老版本 Windows Server 就具備自動啟動屬性,如果該屬性被禁用,虛擬機在放置到節點上之后將不能自動啟動。
在高度虛擬化的環境中,這一特性會顯得非常有用,因為必須確保宿主機和關鍵的基礎架構虛擬機能夠正常運行,不用擔心這些群集中承載的并不需要持續可用的虛擬機所造成的資源約束或“引導風暴”。這些虛擬機可以稍后由管理員或自動化腳本啟動。
Anti-Affinity
Windows Server 2012 之前就已存在最終放置策略,但主要考慮的是其他虛擬機,而非宿主機。群集屬性 AntiAffinityClassName(AACN)使得您可以對虛擬機添加自定義的標簽,這樣不同虛擬機就可以共享或使用不同的 AACN。共享同一個 AACN 的虛擬機可以自動將其分散到不同的宿主機。這樣有助于在同一套基礎架構角色中跨越群集中的不同節點對租戶或虛擬機進行隔離。例如,讓所有虛擬化的 DNS 服務器或來賓群集節點位于同一臺宿主機上,一旦該節點崩潰就會造成單點故障,因此將這些虛擬機分散在不同的宿主機上,有助于為服務提供持續可用性。
假設有一個包含四個節點和四個虛擬機的群集,每個虛擬機的 AntiAffinityClass-Name 都設置為“藍色”,那么默認情況下,每個節點都可以承載“藍色”虛擬機。如果使用相同 AACN 的“藍色”虛擬機的數量超過群集中的節點總數,那么每個節點上就可能有超過一個“藍色”虛擬機,但這些虛擬機依然會盡可能保持更廣泛的平均分散。
結論
通過使用這些策略,就可以對 Windows Server 2012 故障轉移群集中的虛擬機放置進行優化。永遠要記得為虛擬機配置優先級,這樣高優先級虛擬機就可以優先放置,此外還要考慮如果任何節點變為不可用,虛擬機將用怎樣的方式進行放置。