ETCD異常狀態


異常狀態

 

在機器的大量部署中失敗是很常見的。當硬件或者軟件故障時單台機器失敗。當電力故障或者網絡問題時多台機器一起失敗。多種失敗也可能一起發生;幾乎不可能列舉出所有可能的失敗場景。

在這節中,我們分類失敗的種類並討論 etcd 是如何設計來容忍這些失敗的。大部分用戶,不是所有,可以映射一個特別的失敗到一種失敗。為了應對罕見或者 不可恢復的失敗, 總是 備份 etcd 集群。

 

少數跟隨者失敗

 

當少於一半的跟隨者失敗時, etcd 集群依然可以接收請求並讓程序沒有任何大的中斷。例如,兩個跟隨者失敗將不會影響一個五個成員的 etcd 集群運作。但是,客戶端將失去到失敗成員的連通性。對於讀請求客戶端類庫應該通過自動重新連接到其他成員來對用戶隱藏這些中斷。運維人員應該預期其他成員上的系統負載會因為重新連接而提升。

 

Leader 失敗

 

當 leader 失敗時, etcd 集群自動選舉一個新的 leader 。選舉不會在 leader 失敗之后立即發生。大約需要一個選舉超時的時間來選舉新的 leader ,因為失敗選取模型是基於超時的。

在 leader 選舉的期間, 集群不能處理任何寫。在選舉期間發送的寫請求將排隊等待處理知道新的 leader 被選舉出來。

已經發送給舊有 leader 但是還沒有提交的寫請求可能會丟失。新的 leader 有能力重新寫入從之前 leader 而來的任何未提交的條目。從用戶的角度,在新的 leader 選舉之后某些寫請求可能超時。無論如何,已提交的請求從來不會丟失。

新的 leader 自動延長所有的租約(lease)。這個機制保證足浴將不會在准許的 TTL 之前過期,即使它是被舊有的 leader 准許。

 

多數失敗

 

當集群的大多數成員失敗時,etcd 集群失敗並無法接收更多寫請求。

etcd 集群僅在成員的大多數可用時可以從多數失敗中恢復。如果成員的大多數無法回來上線,那么運維必須啟動disaster recovery/災難恢復 來恢復集群。

一旦成員的大多數可以工作, etcd 集群自動選舉新的 leader 並返回到健康狀態。新的 leader 自動延長是所有租約的超時時間。這個機器確保沒有租約因為服務器端不可訪問而過期。

 

網絡分區

 

網絡分區類似少數跟隨者失敗或者 leader 失敗。網絡分區將 etcd 集群分成兩個部分; 一個有多數成員而另外一個有少數成員。多數這邊變成可用集群而少數這邊不可用。在 etcd 中沒有 “腦裂”。

如果 leader 在多數這邊,那么從多數這邊的角度看失敗是一個少數跟隨者失敗。如果 leader 在少數這邊,那么它是 leader 失敗。在少數這邊的 leader 辭職(step down)然后多數那邊選舉新的 leader。

一旦網絡分區清除,少數這邊自動承認來自多數這邊的 leader 並恢復狀態。

 

啟動期間失敗

 

集群啟動時僅僅當所有要求的成員都成功啟動才視為成功。如果在啟動期間發生任何失敗,在所有成員上刪除數據目錄並用新的集群記號(cluster-token)或者新的發現記號(discovery token)重新啟動集群。

當然,可以像恢復運行中的集群那樣恢復失敗的啟動集群。但是,它大多數情況下總是比啟動一個新的花費更多時間和資源來恢復集群,因為沒有任何數據要恢復。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM