Window下Redis的安裝和部署詳細教程
672
2022-05-29
群及仲裁的用意
群集仲裁的目的之一是防止群集出現網絡分區的時候導致群集腦裂,腦裂是群集出現分區(或者叫分組)的結果,群集分區意味著兩個分區都認為對方已經不存在或者失效,于是會爭奪群集資源的控制權。腦裂的后果是兩個分區各自同時且獨立讀寫共享磁盤而導致磁盤數據混亂。
仲裁的目的之二是限制群集所能承受的最大故障數,仲裁要求群集有多數投票存在,否則群集將失效,比如一個5節點的群集可以忍受最多兩個節點同時發生故障。
群集投票
投票算法基于投票結果少數服從多數,群集中各個節點需要心跳機制來通報彼此的"健康狀態”,每收到一個節點的"通報"代表一票。對于三個節點(假設三個節點為A,B,C)的群集,正常運行時,每個節點都會有三票。當結點A心跳出現故障但仍在運行,B和C心跳正常,這時整個群集就會分裂成兩個分區。節點A在一個分區,B和C在另外一個分區。這時必須剔除一個分區才能保障群集的健康運行。按照投票算法,B和C在一個分區,有兩票,A只有一票,B和C組成的群集獲得控制權,A被剔除。
群集節點、磁盤見證資源、文件共享資源都可以分配投票權,可以在群集管理器里進行投票權的分配。一個群集節點可以分配一個投票,同樣,一個磁盤見證或者文件共享見證資源也可以分配一個投票。
擁有投票權不代表就能參與投票仲裁,必須要確保投票的有效性。在群集管理器里可以查看到是否分配投票權以及是否具有有效的投票,只有已分配的投票才有效,如圖1所示。
圖1 群集投票權和有效投票
仲裁見證
如果群集只有兩個節點,因為每個節點上都只有一票,所以投票算法就起不了作用,群集分區后每個區都各一個有效投票導致群集腦裂。同理,如果群集節點是偶數,而且剛好群集分區后遇到剛好各占半數節點的情況時導致群集腦裂。為了防止此類的情況發生,需要引入第三個設備:仲裁見證。仲裁見證的目的和生活中的增加投票的例子類似,共享磁盤和共享文件夾資源都可以充當仲裁見證,共享磁盤被用于仲裁時也叫做仲裁磁盤。用于仲裁的見證的磁盤和共享文件也能分配一個投票,當在兩結點的群集里節點間心跳出現問題時,兩個節點同時去爭取仲裁見證這一票,最早到達的請求先被滿足。在分區后偶數節點對半分的群集也是如此,所以先獲得仲裁見證的節點和分區就獲得超過半數的投票,另一個節點或者分區就會被剔除。
在Windows Server群集里,默認為每個節點分配投票權,當群集服務器節點為奇數且不巧出現網絡分區時,因為投票結果可以形成多數節點分區,因此群集會剔除少數節點分區的節點。但是如果群集節點為偶數且出現網絡分區時,群集可能出現節點對半分的情況,這時候就最好能為群集配置仲裁見證。
仲裁模型
目前,群集支持4種仲裁模型,包括節點多數、節點和磁盤多數、節點和文件共享多數以及僅磁盤(傳統模型)。節點多數模型只為群集節點分配投票,節點和磁盤(文件共享)多數模型既為群集節點也為群集磁盤(文件共享)分配投票,僅磁盤這種模型是傳統的模型。這4種仲裁模型的投票數和仲裁說明對應表如下:
仲裁模型
有投票權的組件(投票數)
仲裁(v是投票數,v/2向下取整)
節點多數
節點(節點數)
v/2 + 1
節點和磁盤多數
節點和磁盤(節點數+1)
v/2 + 1
節點和文件共享多數
節點文件共享 (節點數+1)
v/2 + 1
僅磁盤(傳統)
磁盤見證資源 (1)
v
見證資源
共享磁盤和共享文件夾都可以作為仲裁見證資源,但是兩者略有不同,磁盤見證除了可以為仲裁提供投票,作為仲裁見證的磁盤還存儲持續更新的群集數據庫副本,幫助群集在某個節點失效的情況下維護群集正常狀態和配置信息,確保各節點保存最新的數據庫副本。而文件共享仲裁見證不能存儲群集數據庫。
群集仲裁演進
仲裁技術隨著Windows Server的迭代更新和環境的復雜程度不斷發展,從最初的群集開始到Windows Server 2016群集,仲裁模型發生了不小的變化。接下來簡單說明Windows Server群集仲裁方式的演進。
(1)僅磁盤仲裁
早期的Windows Server群集仲裁里,磁盤具有唯一的仲裁投票,如果磁盤見證資源失敗,群集也會失敗,這種仲裁模型對群集磁盤依賴過大,已經很少被采納。雖然現在在群集里面還保留了磁盤仲裁機制,但是這種仲裁機制逐漸被放棄了。只有在磁盤網絡很穩定,但是節點之間的網絡不穩定導致網絡和節點通信間歇性失敗的時候才會考慮用這種仲裁機制,這種情況已經非常鮮見。
(2)見證和節點仲裁
Windows Server群集開發組發現僅磁盤仲裁無法適應大多數環境,于是開始著手研究新的仲裁機制。從Windows Server 2008開始群集節點也具有了投票權,可以按照需要選擇為節點分配投票權,不僅如此,節點和資源見證還可以組合成更加靈活的投票模型。節點投票和磁盤投票組合成節點多數、節點和磁盤多數、節點和文件共享多數等幾種仲裁選項。
(3)動態仲裁
在Windows Server 2012 R2中引入了動態見證仲裁,群集默認配置為動態仲裁,群集基于當前群集投票節點數量進行動態投票調整。動態仲裁意味著群集在增加、刪除、關閉、開啟群集節點,或者增加刪除見證資源時,群集會動態調整投票數和投票的有效性,讓自己的有效投票數始終保持為奇數。仲裁見證投票還會基于見證資源狀態進行動態調整,如果見證資源離線或者失敗,群集會把該見證投票設置為0,意味著該見證不再參與投票。
比如在一個4節點群集里,雖然4個節點都分配了投票,但是群集為了讓自己的投票數保持為奇數,“拿走”了一個節點的投票,剩下3個有效投票,如圖2所示。
圖2 動態仲裁中的投票數和有效投票數
如果這時為群集配置磁盤見證或者文件共享見證仲裁,如圖3所示,那么群集里分配的投票將達到5個,有效的投票為4個,這時候群集為了讓自己的有效投票數保持為奇數,于是將之前“拿走”的投票“歸還”給節點。這時候4個節點加上1個見證資源仲裁,一共有5個投票,如圖4所示。
圖3群集增加共享見證
圖4動態仲裁中重新調整的投票數
如果這時手動關閉一個節點,那么群集里分配的有效投票將剩下4個,這時候群集為了讓自己的有效投票數保持為奇數,于是再“拿走”一個節點的投票,只剩下兩個節點具有有效投票。這時候兩個節點加上一個見證資源仲裁,一共有3個投票,如圖5所示。
圖5 關閉節點動態仲裁重新調整的投票數
(4)云仲裁
在Windows Server 2016中引入了云仲裁模型,如圖6所示。云仲裁模型可以使用Azure的Blob存儲作為Windows Server 2016的群集仲裁見證資源,如圖7所示。
圖6 新增云仲裁見證
圖7 配置云仲裁見證
云計算
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。