zookeeper 簡單說 就是 一句原語 團結和睦一直對外
通過一個hadoop的namenode的HA例子引入,上小圖
zookeeper 1注冊 2監聽事件 3 回調函數
值得注意的是回調函數是 zkfc自己的,是zkfc當初注冊在zk cluster上的
client用戶端發出一個請求給其中一個follower,follower沒有權限處理,再彙報給leader,leader收到半數之上的同意後,正式通過請求,leader向所有follower釋出,開始執行生效。其他client請求資訊,follower會和leader做下sync,然後把結果傳回給client。leader通過消息隊列的方式確定所有follower都知道有一個事物生效了。每一個follower有一個自己的消息隊列。最終一緻。
選leader的過程
每個server都會有個 server_id(my_id)和zxid.
事務zxid優先級高于s_id.
傳遞性
過半機制
角色模型
叢集狀态
選舉模式 安其内
廣播模式 壤其外
Server狀态
LOOKING:目前Server不知道leader是誰,正在搜尋
LEADING:目前Server即為選舉出來的leader
FOLLOWING:leader已經選舉出來,目前Server與之同步
主從分工
上司者(leader)
負責進行投票的發起和決議,更新系統狀态
學習者(learner)
包括跟随者(follower)和觀察者(observer),follower用于接受用戶端請求并向用戶端傳回結果,在選主過程中參與投票
Observer
可以接受用戶端連接配接,将寫請求轉發給 leader,但observer不參加投票過程,隻同步leader 的狀态,observer的目的是為了擴充系統,提高讀取 速度
用戶端(client)
請求發起方
會話session
用戶端與叢集節點建立TCP連接配接後獲得一個session
如果連接配接的Server出現問題,在沒有超過Timeout時間時,可以連接配接其他節點
同一session期内的特性不變
Session是由誰來建立的?
Leader:産生一個唯一的session,放到消息隊列,讓所有server知道
(過半)