Zookeeper 基礎

Apache ZooKeeper is an effort to develop and maintain an open-source server which enables highly reliable distributed coordination.

Zookeeper 直譯過來是 動物園管理員 說白了就是用來管理Hadoop(大象),Hive(蜜蜂) 的分佈式協調服務

Zookeeper 提供兩種服務
–>管理(存儲,讀取)用戶程序提交的數據;
–>爲用戶程序提供數據節點監聽服務;


注意 關閉防火牆 SSH免密登陸
Zookeeper適合安裝在奇數臺機器上
需要修改配置文件:

#  心跳間隔週期(毫秒)
tickTime=2000
# initLimit參數配置初始化連接時, follower和leader之間的最長心跳時間
initLimit=10
# 配置leader和follower之間發送消息, 請求和應答的最大時間長度
syncLimit=5
# 數據目錄
dataDir=/home/ning/data/zookeeper
# 客戶端連接的端口
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888

http://shift-alt-ctrl.iteye.com/blog/1845568

需要在配置文件中設置的目錄中新建名爲 myid 的文件 內容爲當前機器ID

例如 node1 機器在配置文件中ID 爲1 則在myid文件中 內容爲 1

在 bin 目錄中

./zkServer.sh start

來進行啓動

./zkServer.sh status

來進行查看節點狀態

Zookeeper集羣的角色: Leader 和 follower (Observer)

zookeeper的選舉機制(全新集羣paxos)
以一個簡單的例子來說明整個選舉的過程.
假設有五臺服務器組成的zookeeper集羣,它們的id從1-5,同時它們都是最新啓動的,也就是沒有歷史數據,在存放數據量這一點上,都是一樣的.假設這些服務器依序啓動,來看看會發生什麼.
1) 服務器1啓動,此時只有它一臺服務器啓動了,它發出去的報沒有任何響應,所以它的選舉狀態一直是LOOKING狀態
2) 服務器2啓動,它與最開始啓動的服務器1進行通信,互相交換自己的選舉結果,由於兩者都沒有歷史數據,所以id值較大的服務器2勝出,但是由於沒有達到超過半數以上的服務器都同意選舉它(這個例子中的半數以上是3),所以服務器1,2還是繼續保持LOOKING狀態.
3) 服務器3啓動,根據前面的理論分析,服務器3成爲服務器1,2,3中的老大,而與上面不同的是,此時有三臺服務器選舉了它,所以它成爲了這次選舉的leader.
4) 服務器4啓動,根據前面的分析,理論上服務器4應該是服務器1,2,3,4中最大的,但是由於前面已經有半數以上的服務器選舉了服務器3,所以它只能接收當小弟的命了.
5) 服務器5啓動,同4一樣,當小弟.

非全新集羣的選舉機制(數據恢復)
那麼,初始化的時候,是按照上述的說明進行選舉的,但是當zookeeper運行了一段時間之後,有機器down掉,重新選舉時,選舉過程就相對複雜了。
需要加入數據id、leader id和邏輯時鐘。
數據id:數據新的id就大,數據每次更新都會更新id。
Leader id:就是我們配置的myid中的值,每個機器一個。
邏輯時鐘:這個值從0開始遞增,每次選舉對應一個值,也就是說: 如果在同一次選舉中,那麼這個值應該是一致的 ; 邏輯時鐘值越大,說明這一次選舉leader的進程更新.
選舉的標準就變成:
1、邏輯時鐘小的選舉結果被忽略,重新投票
2、統一邏輯時鐘後,數據id大的勝出
3、數據id相同的情況下,leader id大的勝出
根據這個規則選出leader。

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