分佈式常見的集群選舉機制(zookeepper,kafaka,redis,eureka)

首先,如果集群中的某些節點掛了,如何保證可用性?

選舉新的節點作為leader唄(就是讓你慢慢看文章)。

1.常見的集群選舉機制:

1. 1. Zookeeper的選舉機制,

1.2. kafka的選舉機制、

1.3.redis的選舉機制、

1.4.Eureka的選舉機制

區別:

2.1

Zookeeper集群的leader選舉:

Zookeeper的leader選舉機制,是這四種集群中最複雜的選舉機制,同時也是這四種集群中最接近paxos算法的實現.

Zookeeper的選舉機制有2個觸發條件:集群啟動階段和集群運行階段leader掛機。這2種場景下選舉的流程基本一致,我們以集群運行階段leader掛機為例來進行說明。leader掛機以後,重新選舉leader,選舉的流程如下:

1,Zookeeper集群中的follower檢測到leader掛機,然後把自己的狀態置為LOOKING,開始進行leader選舉。

2,每臺服務器選舉自己為leader,然後把自己的選票通過廣播通知其他服務器。

3,每臺服務器接收來自其他服務器的選票,並進行合法性校驗,主要有兩點校驗,選舉輪次校驗和服務器的狀態的校驗。

4,處理選票。每臺服務器都會將自己的選票與其他服務器的選票進行PK,PK的規則如下:

第一個規則:首先進行ZXID的PK,大者獲勝。

第二條規則:如果ZXID相等,則進行myid的PK,大者獲勝。

經過PK以後,如果當前服務器PK失敗,則會把自己的選票重新投給勝者,然後把更新後的選票通過廣播通知其他服務器。

5,統計選票。根據超過半數的原則,每臺服務器都會統計leader的選票,如果超過半數,則結束選舉。

6,更新服務器狀態。follower把自己的狀態更新為FOLLOWING,leader把自己的狀態更新為LEADING。

分佈式常見的集群選舉機制(zookeepper,kafaka,redis,eureka)

2.2 kafka的選舉機制

Kafka選舉leader的過程是這樣的:kafka的所有broker,在Zookeeper的/controller路徑下創建臨時節點,成功創建的那個broker就會成為leader,其他的broker就會成為follower。

當leader掛機時,臨時節點會被刪除,這是其他節點通過Zookeeper的watch機制,會監聽到leader的變化,然後所有的follower會再次進行leader選舉。

kafka的選舉其實就是創建臨時節點,這和Zookeeper分佈式鎖的實現原理基本相同。

2.3.redis的選舉機制

redis的master掛掉以後,redis集群是通過主從切換來保證高可用性的。

redis主從切換有2種方式:手動切換和自動切換。

這裡我們討論自動切換,redis主從自動切換需要哨兵模式的支持,哨兵模式簡單來說就是:監控master和slave,在master出現故障的時候,自動將slave切換成master,master恢復以後,作為新master的slave對外提供服務。

(來來來,我就知道你想問哨兵模式)

哨兵模式講解:

哨兵有兩個作用

  • 通過發送命令,讓Redis服務器返回監控其運行狀態,包括主服務器和從服務器。
  • 當哨兵監測到master宕機,會自動將slave切換成master,然後通過發佈訂閱模式通知其他的從服務器,修改配置文件,讓它們切換主機。

然而一個哨兵進程對Redis服務器進行監控,可能會出現問題,為此,我們可以使用多個哨兵進行監控。各個哨兵之間還會進行監控,這樣就形成了多哨兵模式。

用文字描述一下故障切換的過程。假設主服務器宕機,哨兵1先檢測到這個結果,系統並不會馬上進行failover過程,僅僅是哨兵1主觀的認為主服務器不可用,這個現象成為主觀下線。當後面的哨兵也檢測到主服務器不可用,並且數量達到一定值時,那麼哨兵之間就會進行一次投票,投票的結果由一個哨兵發起,進行failover操作。切換成功後,就會通過發佈訂閱模式,讓各個哨兵把自己監控的從服務器實現切換主機,這個過程稱為客觀下線。這樣對於客戶端而言,一切都是透明的。

分佈式常見的集群選舉機制(zookeepper,kafaka,redis,eureka)

2.4 Eureka的選舉機制

Eureka集群中的各節點之間不存在主從關係。Eureka集群中的節點的關係是對等的,其他3種集群則都存在主從關係,這是Eureka集群的一個特色。

Eureka集群的各個server之間通過相互註冊的方式來實現集群的高可用性。數據同步的方式是增量備份,這樣可以保證每個server都是最新最全的數據。從而保證集群的高可用性。這樣即使某個server掛了,集群還可以對外提供服務。

Eureka有一個配置項:eureka.client.fetch-register,是否從Eureka server獲取註冊信息。如果我們是Eureka集群,那麼該項配置為true。這樣Eureka server直接就可以相互註冊。

分佈式常見的集群選舉機制(zookeepper,kafaka,redis,eureka)

以上就是集群中選舉機制。

記錄學習,每天進步一點點的橘子大王。


分享到:


相關文章: