zookeeper學習筆記(一)——概述
1. 概述
Zookeeper是一個開源的分佈式的,爲分佈式應用提供協調服務的Apache項目。zookeeper從設計模式的角度來理解:是一個基於觀察者設計模式的分佈式服務管理框架,她負責存儲和觀察大家都關心的數據,然後接收觀察者的註冊,一旦這些數據的狀態發生變化,zookeeper就將負責通知已經在zookeepr上註冊的那些觀察者做出相應的反應。
2. zookeeper的特點
1)Zookeeper:它是一個由一個leader,多個follower組成的集羣。;
2)集羣中只要由半數以上的節點存活,zookeeper就能夠正常工作;
3)全局數據一致性:每個Server保存一份相同的數據副本,Client無論連接到哪個Server,拿到的數據都是一致的;
4)更新請求順序進行,來自同一個client的更新請求按照其發送順序依次進行;
5)數據更新原子性,一次數據要麼更新成功,要麼失敗;
6)實時性:在一定的時間範圍內,Client能夠讀到最新的數據。
3. 數據結構
zookeeper的數據模型結構與Linux的文件系統的結構非常類似,整體上可以看作是一個樹的結構,每個節點成爲一個znode
。每一個znode
默認能夠存儲1MB的數據,每個znode
都可以通過其路徑唯一標識。
就像Linux的文件系統一樣,我們能夠自由的增加刪除znode
也可以在一個znode
下增加刪除子節點,注意哦,znode
是可以存儲數據的。具體操作已在其他的隨筆中有記錄了。
4. zookeeper的應用場景
zookeeper提供的服務包括:統一命名服務、統一配置管理、統一集羣管理、服務器節點動態上下線、軟負載均衡等等~~
1)統一命名服務:在分佈式的環境下,經常需要對應用/服務進行統一的命名服務,便於識別。例如:IP地址不容易記住,而域名就比較好記了。
2)統一配置管理:
(1)分佈式環境下,配置文件同步非常常見:
- 一般要求一個集羣中,所有的節點配置信息一致,比如kafka集羣;
- 對於配置文件修改之後,希望能夠快速同步到集羣的各個節點上去;
(2)配置管理可以交給zookeeper實現:
可以將配置信息 寫入zookeeper的一個
znode
上各個客戶端監聽這個
znode
一旦
znode
中的數據被修改,zookeeper將通知各個客戶端服務器。
3)統一集羣管理
(1)分佈式環境中,實時掌握每個節點的狀態是必要的,可以根據節點的狀態做出一些調整
(2)zookeeper可以實時的監控節點的狀態變化:
- 可以將節點信息寫入zookeeper的一個znode
- 簡體這個znode可以獲取它的實時變化
4)服務器動態上下線
5. Zookeeper中的配置文件zoo.cfg中參數
1).tickTime =2000:通信心跳數,Zookeeper服務器與客戶端心跳時間,單位毫秒
Zookeeper使用的基本時間,服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每個tickTime時間就會發送一個心跳,時間單位爲毫秒。
它用於心跳機制,並且設置最小的session超時時間爲兩倍心跳時間。(session的最小超時時間是2tickTime)
2).initLimit =10:LF初始通信時限
集羣中的Follower跟隨者服務器與Leader領導者服務器之間初始連接時能容忍的最多心跳數(tickTime的數量),用它來限定集羣中的Zookeeper服務器連接到Leader的時限。
3).syncLimit =5:LF同步通信時限
集羣中Leader與Follower之間的最大響應時間單位,假如響應超過syncLimit tickTime,Leader認爲Follwer死掉,從服務器列表中刪除Follwer。
4).dataDir:數據文件目錄+數據持久化路徑
主要用於保存Zookeeper中的數據。
5).clientPort =2181:客戶端連接端口
監聽客戶端連接的端口。