zookeeper恢復模式的三個原則

  1. 當集羣正在啓動過程中,或 Leader 崩潰後,集羣就進入了恢復模式。對於要恢復的數
    據狀態需要遵循三個原則。

(1) Leader 的主動出讓原則

  1. 若集羣中 Leader 收到的 Follower 心跳數量沒有過半,此時 Leader 會自認爲自己與集羣
    的連接已經出現了問題,其會主動修改自己的狀態爲 LOOKING,去查找新的 Leader。爲了防止集羣出現腦裂。
    而其它 Server 由於有過半的主機認爲已經丟失了 Leader,所以它們會發起新的 Leader
    選舉,選出一個新的 Leader。

(2) 已被處理過的消息不能丟原則

  1. 當 Leader 收到超過半數 Follower 的 ACKs 後,就向各個 Follower 廣播 COMMIT 消息,批准各個 Server 執行該寫操作事務。當各個 Server 在接收到 Leader 的 COMMIT 消息後就會在本地執行該寫操作,然後會向客戶端響應寫操作成功。
  2. 但是如果在非全部 Follower 收到 COMMIT 消息之前 Leader 就掛了,這將導致一種後
    果:部分 Server 已經執行了該事務,而部分 Server 尚未收到 COMMIT 消息,所以其並沒有
    執行該事務。當新的 Leader 被選舉出,集羣經過恢復模式後需要保證所有 Server 上都執行
    了那些已經被部分 Server 執行過的事務。

(3) 被丟棄的消息不能再現原則

  1. 當在 Leader 新事務已經通過,其已經將該事務更新到了本地,但所有 Follower 還都沒
    有收到 COMMIT 之前,Leader 宕機了(比前面敘述的宕機更早),此時,所有 Follower 根本就不知道該 Proposal 的存在。當新的 Leader 選舉出來,整個集羣進入正常服務狀態後,之前掛了的 Leader 主機重新啓動並註冊成爲了 Follower。若那個別人根本不知道的 Proposal還保留在那個主機,那麼其數據就會比其它主機多出了內容,導致整個系統狀態的不一致。所以,該 Proposa 應該被丟棄。類似這樣應該被丟棄的事務,是不能再次出現在集羣中的,應該被清除。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章