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