zookeeper 是什么
zookeeper 是 hadoop 下的一個子項目,是一個針對大型分布式系統的可靠的協調系統 。
zookeeper 提供了 配置維護、名字服務、分布式同步、組服務 等功能。
zookeeper 運作原理
zookeeper 通過 Zab(Zookeeper Atomic Broadcast) 協議保持集群間的數據一致性。
Zab 協議包括兩個階段:Leader Election 和 Atomic Broadcast 。
Leader Election
- 此階段集群內會選舉出一個 leader,余下機器則會成為 follower。leader 會通過 broadcast 通知所有 follower ,當大部分機(> 1/2)器完成了與 leader 的狀態同步后,Leader Election 階段結束。
- 當 leader 失去大多數 follower 時,集群會再次進入 Leader Election 階段并選舉出新的 leader ,使集群回到正確的狀態。
Atomic Broadcast
- 此階段 leader 會通過 broadcast 與 follower 通訊,保證 leader 與 follower 具有相同的系統狀態。
zookeeper 搭建
搭建java運行環境
可參考我的另一篇筆記
java運行環境配置
下載 zookeeper
下載地址 : http://mirror.bjtu.edu.cn/apache/zookeeper/stable
這是國內的鏡像源 , 也可以到官網下載 , 此筆記編寫時 , zookeeper 穩定版本為 3.4.6
參考命令 :
wget http://mirror.bjtu.edu.cn/apache/zookeeper/stable/zookeeper-3.4.6.tar.gz
解壓 zookeeper:
參考命令:
tar -xf zookeeper-3.4.6.tar.gz
cp zookeeper-3.4.6 /usr/local/zookeeper
rm -f zookeeper-3.4.6.tar.gz
配置 zookeeper:
參考命令:
#創建相應目錄,注意目錄的權限mkdir /tmp/zookeeper
mkdir /tmp/zookeeper/data
mkdir /tmp/zookeeper/log
cp /usr/local/zookeeper/conf/zoo_sample.cfg zoo.cfg
vim /usr/local/zookeeper/conf/zoo.cfg
參考配置:
tickTime=2000 #zookeeper 服務器心跳時間,單位為ms
initLimit=10 #投票選舉新 leader 的初始化時間
syncLimit=5 #leader 與 follower 心跳檢測最大容忍時間,響應超過 tickTime * syncLimit,認為 leader 丟失該 follower
clientPort=2181 #端口
dataDir=/tmp/zookeeper/data #數據目錄
dataLogDir=/tmp/zookeeper/log #日志目錄
配置zookeeper日志
參考命令:
vim /usr/local/zookeeper/bin/zkEnv.sh
參考配置:
if [ "x${ZOO_LOG_DIR}" = "x" ]
then
ZOO_LOG_DIR="/tmp/zookeeper/log"
fi
if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
fi
配置環境變量 :
參考命令:
vim /etc/profile
新增如下配置:
export ZOOKEEPER_INSTALL=/usr/local/zookeeper
export PATH=$PATH:$ZOOKEEPER_INSTALL/bin
運行zookeeper
至此,zookeeper搭建完畢,可以嘗試運行zookeeper
參考命令:
cd /usr/local/zookeeper
bin/zkServer.sh start conf/zoo.cfg #啟動zookeeper服務,讀取配置文件為conf/zoo.cfg
bin/zkServer.sh status conf/zoo.cfg #查看指定配置的zookeeper的運行狀態
可以看到當前 zookeeper 運行狀態為 Mode:standalone , 至此,zookeeper單機運行配置完成。