ZooKeeper是一個分布式的,開放源碼的分布式應用程序協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要組件。它是一個為分布式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分布式同步、組服務等。
一、Zookeeper的選舉機制
Zookeeper集群能保證自身的高可用,保證自身高可用的原理是,Zookeeper集群中的各個機器分為Leader和Follower兩個角色,寫入數據時,要先寫入Leader,Leader同意寫入后,再通知Follower寫入。客戶端讀取數時,因為數據都是一樣的,可以從任意一台機器上讀取數據。
這里Leader角色就存在單點故障的隱患,高可用就是解決單點故障隱患的。Zookeeper從機制上解決了Leader的單點故障問題,Leader是哪一台機器是不固定的,Leader是選舉出來的。選舉流程是,集群中任何一台機器發現集群中沒有Leader時,就推薦自己為Leader,其他機器來同意,當超過一半數的機器同意它為Leader時,選舉結束,所以Zookeeper集群中的機器數據必須是奇數。這樣就算當Leader機器宕機后,會很快選舉出新的Leader,保證了Zookeeper集群本身的高可用。
二、寫入高可用
集群中的寫入操作都是先通知Leader,Leader再通知Follower寫入,實際上當超過一半的機器寫入成功后,就認為寫入成功了,所以就算有些機器宕機,寫入也是成功的。
三、讀取高可用
zookeeperk客戶端讀取數據時,可以讀取集群中的任何一個機器。所以部分機器的宕機並不影響讀取。
zookeeper服務器必須是奇數台,因為zookeeper有選舉制度,角色有:領導者、跟隨者、觀察者,選舉的目的是保證集群中數據的一致性。
四、安裝zookeeper
1. 解壓安裝包
tar -zxvf zookeeper-3.4.12.tar.gz -C /opt/software
2. 修改配置
拷貝conf下的zoo_sample.cfg副本,改名為zoo.cfg。zoo.cfg是zookeeper的配置文件:
cp zoo_sample.cfg zoo.cfg
dataDir屬性設置zookeeper的數據文件存放的目錄:
dataDir=/data/zookeeper
指定zookeeper集群中各個機器的信息:
server.1=master:2888:3888 server.2=slave1:2888:3888 server.3=slave2:2888:3888
server后面的數字范圍是1到255,所以一個zookeeper集群最多可以有255個機器。
3. 創建myid文件
在dataDir所指定的目錄下創一個名為myid的文件,文件內容為server點后面的數字。
[root@master software]#echo 1 >> data/myid
4.分發 zookeeper 到其他機器
[root@master software]# scp -r zookeeper-3.4.12 slave1:/opt/software/ [root@master software]# scp -r zookeeper-3.4.12 slave2:/opt/software/
5. 修改其他機器上的myid文件
[root@slave1 data]# echo 2 > data/myid [root@slave2 data]# echo 3 > data/myid
6. 啟動zookeeper
需要在各個機器上分別啟動zookeeper。
[root@master bin]# ./zkServer.sh start [root@slave1 bin]# ./zkServer.sh start [root@slave2 bin]# ./zkServer.sh start
五、zookeeper命令
進入zookeeper Shell
在zookeeper根目錄下執行 bin/zkCli.sh進入zk shell模式。
zookeeper很像一個小型的文件系統,/是根目錄,下面的所有節點都叫zNode。
進入zk shell 后輸入任意字符,可以列出所有的zookeeper命令
查詢zNode上的數據:get /zookeeper
列出所有子zNode:ls /
創建一個zNode: create /znode "demonode"
刪除znode : rmr /znode
退出shell模式:quit