分佈式系統中的網絡分區問題

網絡分區問題

什麼是網絡分區?

網絡分區只在分佈式集羣中,節點之間由於網絡不通,導致集羣中節點形成不同的子集,子集中節點之間網絡互通,而子集與子集之間網絡不通。

如何判斷是否發生了網絡分區?

不同的集羣架構網絡分區的形態會有不同,可以從集中式架構和非集中式架構兩方面考慮。

集中式架構下的網絡分區

集中式架構中,Master節點通常以一主多備的形式部署,Slave和Master節點相連接,Master節點的主和備之間會通過心跳互相通信。

集中式架構中的網絡分區主要是主節點與備節點之間網絡不通,且一部分Slave節點只能與主Master節點聯通,另一部分只能與備Master節點聯通。

非集中式架構下的網絡分區

非集中式架構中,節點是對稱的,網絡分區的形態是形成不同子集,子集內節點間可以互相通信,而子集之間不能通信。

上述兩種架構中,要判斷是否形成了網絡分區,最樸素的方式就是判斷節點之間心跳是否超時,然後將心跳可達的節點歸屬到一個子集中。

網絡分區問題的處理方法

在檢測到網絡分區後,我們可以有不同的解決辦法。

  • 激進的辦法,一旦發現節點不可達,則將節點從集羣中刪掉,並在新集羣中選出新的主。
  • 保守的辦法,一旦發現某些節點不可達,則直接停止自己的服務,這樣可以避免雙主問題,但是使用這種方式,容易導致系統中所有的節點都停止服務,真個系統完全不可用。

Static Quorum方法

Static Quorum是一種固定票數的策略,在系統啓動前,先設置一個固定票數,當發生網絡分區後,如果一個分區中節點數大於等於這個固定的票數,則該分區爲活動分區。

爲了保證分區分區後,不會出現多個活動分區,引發雙主或者多主問題,需要對固定票數的取值做一些約束,即:固定票數≤ 總節點數≤2* 固定票數 - 1。

這種方法的優點是簡單易實現,缺點是:

  1. 分區數較少時,該方法工作得很好,但是當活動分區特別多時,由於各個分區的票數分散,不容易找出一個滿足條件的分區,沒有活動分區也就意味着集羣不可用了。
  2. 由於票數是固定不變的,所以不適用於集羣中有動態節點加入的場景。

Keep Majority方法

Keep Majority是指保留具有大多數節點的子集羣。由於不限定每個分區的節點數超過一個固定的票數,所以可以應用於動態節點加入的場景。

這種方法不適用於生產多分區的場景,隨着分區數量增加,節點分散,也很難在衆多分區中出現1個節點數 w≥n/2 的分區。

仲裁機制方法

設置仲裁機制的核心是引入一個第三方組件或者節點作爲仲裁者,該仲裁者和集羣中的所有節點相連,集羣中所有節點都將自己的心跳信息報這個這個中心節點。因此該中心節點用於全局心跳信息,可以根據全局心跳情況信息判斷出有多少個分區。

基於共享資源的方法

基於共享資源方法的核心,就類似於分佈式鎖機制。即哪個子集羣獲得共享資源鎖,就保留這個子集。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章