ZooKeeper

ZooKeeper簡介

  • ZooKeeper 是一個開源的分布式協調服務,分布式應用程序可以基于 ZooKeeper 實現諸如數據發布/訂閱、負載均衡、命名服務、分布式協調/通知、集群管理、Master 選舉、分布式鎖和分布式隊列等功能。
  • ZooKeeper集群
    ZooKeeper集群的數量一般為奇數,對于2n+1臺server,只要有n+1臺(大多數)server可用,整個系統保持可用。
    ZooKeeper集群當中,集群中的服務器角色有兩種Leader和Learner,Learner角色又分為Observer和Follower,具體功能如下:

Leader 既可以為客戶端提供寫服務又能提供讀服務。除了 Leader 外,Follower 和 Observer 都只能提供讀服務。
Follower 和 Observer 唯一的區別在于 Observer 機器不參與 Leader 的選舉過程,也不參與寫操作的“過半寫成功”策略,因此 Observer 機器可以在不影響寫性能的情況下提升集群的讀性能。


示意圖
  • Session

Session 是指客戶端會話,在講解客戶端會話之前,我們先來了解下客戶端連接。在ZooKeeper 中,一個客戶端連接是指客戶端和 ZooKeeper 服務器之間的TCP長連接。
ZooKeeper 對外的服務端口默認是2181,客戶端啟動時,首先會與服務器建立一個TCP連接,從第一次連接建立開始,客戶端會話的生命周期也開始了,通過這個連接,客戶端能夠通過心跳檢測和服務器保持有效的會話,也能夠向 ZooKeeper 服務器發送請求并接受響應,同時還能通過該連接接收來自服務器的 Watch 事件通知。
Session 的 SessionTimeout 值用來設置一個客戶端會話的超時時間。當由于服務器壓力太大、網絡故障或是客戶端主動斷開連接等各種原因導致客戶端連接斷開時,只要在 SessionTimeout 規定的時間內能夠重新連接上集群中任意一臺服務器,那么之前創建的會話仍然有效。

  • 數據節點(ZNode)
    在談到分布式的時候,一般節點指的是組成集群的每一臺機器。而ZooKeeper 中的數據節點是指數據模型中的數據單元,稱為 ZNode。ZooKeeper 將所有數據存儲在內存中,數據模型是一棵樹(ZNode Tree),由斜杠(/)進行分割的路徑,就是一個ZNode,如 /hbase/master,其中 hbase 和 master 都是 ZNode。每個 ZNode 上都會保存自己的數據內容,同時會保存一系列屬性信息。
    在 ZooKeeper 中,ZNode 可以分為持久節點和臨時節點兩類。
    持久節點
    所謂持久節點是指一旦這個 ZNode 被創建了,除非主動進行 ZNode 的移除操作,否則這個 ZNode 將一直保存在 ZooKeeper 上。
    臨時節點
    臨時節點的生命周期跟客戶端會話綁定,一旦客戶端會話失效,那么這個客戶端創建的所有臨時節點都會被移除。另外,ZooKeeper 還允許用戶為每個節點添加一個特殊的屬性:SEQUENTIAL。一旦節點被標記上這個屬性,那么在這個節點被創建的時候,ZooKeeper 就會自動在其節點后面追加上一個整型數字,這個整型數字是一個由父節點維護的自增數字。

  • 狀態信息
    每個 節點除了存儲數據內容之外,還存儲了 節點本身的一些狀態信息。用 get 命令可以同時獲得某個 節點的內容和狀態信息。
    在 ZooKeeper 中,version 屬性是用來實現樂觀鎖機制中的寫入校驗的(保證分布式數據原子性操作)。

  • ACL

ZooKeeper 采用 ACL(AccessControlLists)策略來進行權限控制,類似于 UNIX 文件系統的權限控制。
ZooKeeper 定義了 5 種權限,如下:


示意圖

本文參考
https://blog.csdn.net/weijifeng_/article/details/79775738#1
http://developer.51cto.com/art/201809/583184.htm
https://blog.csdn.net/qiangcuo6087/article/details/79042035

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容