Zookeeper

1、相關概念

  • 分佈式系統:是一個硬件或軟件組件分佈在網絡中的不一樣的計算機上,彼此間僅經過消息傳遞進行通訊和協做的系統。
  • 特徵:分佈性、併發性、缺少全局時鐘、故障必然會發生
  • 典型問題:通訊異常、網絡分區、三態(成功、失敗、超時)、節點故障

CAP:java

  • P:分區容錯性;
    • CP:一致性;
    • AP:可用性

BASE:node

  • BA:基本可用
  • S:軟狀態
  • E:最終一致性

保證分佈式系統的一致性多種協議:算法

  • 2PC:2 Phase-Commit,請求和執行
  • 3PC:3 Phase-Commit,CanCommit->PreCommit->DoCommit
  • Paxos:Leslie Lamport,1990年提出
  • Google Chubby:分佈式鎖服務,GFS/BigTable都用到了chubby,分佈式協做、元數據存儲、Master選舉

HDFS/HBase, Zookeeper:apache

  • zookeeper是一個開源的分佈式協調服務,由知名互聯網公司Yahoo建立,它是Chubby的開源實現;換句話將,zk是一個經典的分佈式數據一致性解決方案,分佈式應用程序能夠基於它實現數據的發佈/訂閱、負載均衡、名稱服務、分佈式協調/通知、集羣管理、Master選舉、分佈式鎖和分佈式隊列

2、zk中的基本術語

  • 集羣角色:Leader, Follower, Oberserver
    • Leader:選舉產生,提供讀/寫服務;
    • Follower:參與選舉,可被選舉,提供讀服務;
    • Observer:參與選舉,不可被選舉,提供讀服務
  • 會話:zk中,客戶端<-->服務端,tcp長鏈接
  • 數據節點(ZNode):即zk數據模型中的數據單元;zk的數據都存儲於內存中,數據模型爲樹狀結構(ZNode Tree);每一個ZNode都會保存本身的數據於內存中;
    • 持久節點:僅顯式刪除才消失
    • 臨時節點:會話停止即自動消失
  • 版本(version):zk會爲每一個ZNode維護一個稱爲Stat的數據結構,記錄了當前ZNode的三個數據版本
    • version:當前版本
    • cversion:當前ZNode的子節點的版本
    • aversion:當前ZNode的ACL的版本
  • ACL:zk使用ACL機制進行權限控制
    • CREATE , READ , WRITE, ADMIN
  • 事件監聽器(Watcher):zk上由用戶指定的觸發機制,在某些事件產生時,zk可以將其通知給相關的客戶端
  • ZAB協議:Zookeeper Atomic Boradcast, zk原子廣播協議;用於在支持Leader奔潰恢復機制,從新選舉Leader,並且還確保數據的完整性和一致性
    • ZAB協議中存在三種狀態:
      • Looking
      • Following
      • Leading
    • 四個階段:
      • 選舉:election
      • 發現:discovery
      • 同步:sync
      • 廣播:broadcast

3、部署zookeeper

三種部署方式:單機模式、僞分佈式模式、分佈式模式vim

安裝jdk服務器

# yum install java-1.7.0-openjdk-devel -y
# vim /etc/profile.d/java.sh
export JAVA_HOME=/usr
# . /etc/profile.d/java.sh
# java -version

一、單機模式

~]# wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz
~]# mkdir /data/zookeeper/ -pv
~]# tar xf zookeeper-3.4.9.tar.gz -C /usr/local/
~]# cd /usr/local/
local]# ln -sv zookeeper-3.4.9 zookeeper
local]# cd zookeeper/conf/
conf]# cp zoo_sample.cfg zoo.cfg
conf]# vim zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper
clientPort=2181
#maxClientCnxns=60
server.1=192.168.0.17:2888:3888
#autopurge.snapRetainCount=3
#autopurge.purgeInterval=1
conf]# cd ../bin/
bin]# ./zkServer.sh start
  • 四字命令:監控zk
~]# telnet localhost 2181
ruok
stat
srvr
conf
cons
wchs
envi
...
  • cli命令
~]# cd /usr/local/zookeeper/bin/
bin]# ./zkCli.sh
create
ls
ls2
stat
delete
rmr
get
set
...
  • 配置參數
基本配置參數:
clinetPort=2181
dataDir=/data/zookeeper
dataLogDir:事務日誌文件路徑;
tickTime
存儲配置參數:
preAllocSize:爲事務日誌預先分配的磁盤空間量,默認65535KB
snapCount:每多少次事務後執行一次快照操做,每事務的平均大小在100字節左右
autopurge.snpRetainCount:保留自動快照數
autopurge.purgeInterval:自動purge操做的時間間隔,0表示不啓動
fsync.warningthiresholdms:zk進行事務日誌的fsync操做時消耗的時長報警閾值
weight.X=N:判斷quorum時投票權重,默認爲1
網絡配置參數:
maxClientCnxns:每客戶端IP的最大併發鏈接數
clientPortAddress:zk監聽的IP地址
minSessionTimeout:會話的最短超時時長
maxSessionTimeout:會話的最大超時時長
集羣配置參數:
initLimit:Follower連入Leader並完成數據同步的時長
syncLimit:心跳檢測的最大延遲
leaderServers:默認zk的leader接受讀寫請求,額外還要負責協調各Follower發來的事務等,所以,爲使得Leader集中處理zk集羣內部信息,建議不讓Leader直接提供服務
cnxTimeout:Leader選舉期間,各服務器建立TCP鏈接的超時時長
ellectionAlg:選舉算法,目前僅支持FastLeaderElection算法一種
server.id=[hostname]:port:port[:observer]:集羣內各服務器的屬性參數
    第一個port:follwer與leader進行通訊和數據同步時所使用的端口
    第二個port:leader選舉時使用的端口
    observer:定義指定的服務器爲observer

二、分佈式模式

  • zk1:
###############node01:###############
~]# echo 1 > /data/zookeeper/myid
~]# vim /usr/local/zookeeper/conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper
clientPort=2181
server.1=192.168.0.17:2888:3888
server.2=192.168.0.18:2888:3888
server.3=192.168.0.19:2888:3888
~]# /usr/local/zookeeper/bin/zkServer.sh start
  • zk2:
###############node02:###############
~]# echo 2 > /data/zookeeper/myid
~]# vim /usr/local/zookeeper/conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper
clientPort=2181
server.1=192.168.0.17:2888:3888
server.2=192.168.0.18:2888:3888
server.3=192.168.0.19:2888:3888
~]# /usr/local/zookeeper/bin/zkServer.sh start
  • zk3:
###############node03:###############
~]# echo 3 > /data/zookeeper/myid
~]# vim /usr/local/zookeeper/conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper
clientPort=2181
server.1=192.168.0.17:2888:3888
server.2=192.168.0.18:2888:3888
server.3=192.168.0.19:2888:3888
~]# /usr/local/zookeeper/bin/zkServer.sh start

注意:運行爲集羣模式時,每一個節點在其數據目錄中應該有一個myid文件,其內容僅爲server的id網絡

4、典型應用場景

  • 數據發佈/訂閱
  • 負載均衡
  • 命名服務
  • 分佈式協調/通知
  • 集羣管理
  • Master選舉
相關文章
相關標籤/搜索