ZooKeeper學習筆記(一)——概述

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:客戶端連接端口
監聽客戶端連接的端口。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章