Zookeeper-3.5.8集群搭建


大數據技術有着眾多系統需要分布式協調服務,比如Hadoop、Kafka系統,其中主從切換、維護命名空間、以及分布式協調通知等場景,需要保證數據的分布式一致性。

Zookeeper是業界最著名的分布式協調系統,下文中簡稱為ZK。ZK系統的實現基於ZAB協議(Zookeeper Atomic Broadcast),ZAB協議的核心定義了那些會改變Zookeeper服務器數據狀態的事務請求的處理方式。由於ZK實現的原理比較復雜,這里不再展開,感興趣的讀者可以閱讀《從Paxos到Zookeeper分布式一致性原理與實踐》這本書。

本文將重點討論如何搭建一套穩定的ZK集群,合理地配置ZK參數,以及更高效地使用新版本的特性。希望能給初學者帶來一些參考,也歡迎大家在留言區討論~~~

1. 初始化各個zk節點基礎環境

  • 安裝jdk
下載jdk1.8.0_144,並解壓到目錄/usr/local/ 
  • 關閉swap
#臨時生效
swapoff -a

#永久生效
echo 'swapoff -a' >> /etc/rc.d/rc.local

2. 中轉機配置一份zookeeper

從ZK官網下載zookeeper-3.5.8到中轉機,下載完成后解壓tar包。這里要注意安裝的版本號,根據Apache版本命名規范,x.y.z的y表示增加重要功能的版本號,z表示修復bug后的版本號,因此要權衡y和z的版本號。

筆者考慮到3.5是目前比較新的版本,且當前3.5最新的z版本號為8,之前的一些bug已經被修復,相對比較穩定,因此選擇了3.5.8版本。

修改zk配置文件

  • 修改zoo.cfg配置文件
cp conf/zoo_sample.cfg conf/zoo.cfg

#追加或修改以下配置
vim conf/zoo.cfg
# 配置數據保存目錄
dataDir=/data0/zookeeper
# 只保留10個快照文件(用於自動清除歷史數據)
autopurge.snapRetainCount=10
# 每隔1小時掃描一次數據目錄
autopurge.purgeInterval=1

server.1=zk1.bjehp.com:2888:3888
server.2=zk2.bjehp.com:2888:3888
server.3=zk3.bjehp.com:2888:3888
server.4=zk4.bjehp.com:2888:3888
server.5=zk5.bjehp.com:2888:3888

# 把所有的四字命令加入白名單
4lw.commands.whitelist=*
  • 修改zookeeper的日志目錄
vim bin/zkEnv.sh
ZOO_LOG_DIR="/var/log/zookeeper"
ZOO_LOG4J_PROP="INFO,ROLLINGFILE"    # 用於滾動清除系統日志
JAVA_HOME="/usr/local/jdk1.8.0_144"
  • 添加jvm內存配置
vim conf/java.env
SERVER_JVMFLAGS="-Xms2g -Xmx4g $SERVER_JVMFLAGS"  # 配置zk的JVM內存參數
  • 修改log4j
vim conf/log4j.properties
zookeeper.log.maxfilesize=64MB    # 每64MB迭代一個系統日志文件
zookeeper.log.maxbackupindex=10   # 只保留10個系統日志文件
  • 配置jmx端口
vim bin/zkServer.sh
ZOOMAIN="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=$JMXLOCALONLY -Dcom.sun.management.jmxremote.port=6999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false org.apache.zookeeper.server.quorum.QuorumPeerMain" 

3. 安裝並啟動zk服務

登錄各個zk節點,執行以下操作

安裝

拷貝中轉機的zookeeper-3.5.8安裝包到/usr/local目錄

mkdir /data0/zookeeper  
mkdir /var/log/zookeeper

#對每個zk節點配置相應的id數字,id取值范圍1~255,這里id要與zoo.cfg配置對應
vim /data0/zookeeper/myid

啟動並驗證

/usr/local/apache-zookeeper-3.5.8-bin/bin/zkServer.sh start

ll /var/log/zookeeper/
ll /data0/zookeeper/
/usr/local/apache-zookeeper-3.5.8-bin/bin/zkServer.sh status
tailf /var/log/zookeeper/zookeeper-*.log

echo mntr|nc zk.node 2181

zk節點全部啟動后,會有一個leader節點,其余四個為follower節點。

停止

/usr/local/apache-zookeeper-3.5.8-bin/bin/zkServer.sh stop

配置監控報警

  • 磁盤/內存/cpu
  • 端口存活
  • 服務是否正常

4. 總結

本文介紹了搭建zookeeper-3.5.8集群的詳細步驟,包括先關閉swap(zk需要保證數據的一致性,寫入磁盤會破壞數據的順序,數據寫入磁盤對於zk來說是個災難),配置自動清除數據文件和日志文件,配置JMX便於日后采集metric排查問題,最后介紹了zk啟停操作和驗證服務是否正常的命令。

參考資料

  1. 《從Paxos到Zookeeper分布式一致性原理與實踐》
  2. https://zookeeper.apache.org/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM