zookeeper安裝以及配置和註意事項
1,安裝
wget tar zxvf zookeeper-3.4.9.tar.gz cd zookeeper-3.4.9/conf cp zoo_sample.cfg zoo.cfg
修改zoo.cfg配置文件
如下
tickTime=2000 initLimit=10 syncLimit=5 dataDir=/opt/zookeeper/zookeeper-3.4.9/data dataLogDir=/opt/zookeeper/zookeeper-3.4.9/logs clientPort=2181 autopurge.snapRetainCount=3 autopurge.purgeInterval=1 server.1=zk1:2888:3888:observer server.2=zk2:2888:3888 server.3=zk3:2888:3888 server.4=zk4:2888:3888
編輯環境變量vim /etc/profile
export ZOOKEEPER_HOME=/opt/zookeeper/zookeeper-3.4.9/ export PATH=$ZOOKEEPER_HOME/bin:$PATH export PATH
添加myid 文件
在dataDir目錄下,添加myid,文件內容要與配置文件中server.1的數字一樣,僅僅是數字
安裝java8
yum install java1.8
啟動zookeeper,並查看狀態
zkServer.sh start zkServer.sh status
2,集群配置註意事項
一般來講,3到5個zookeeper投票者(leader,follower),必須是單數,因為數量過半才能保證正常運行,公式N=2F+1 其中F是可以容錯的數量
配置observer(觀察者)(跟follower沒什麽區別,只是不參與投票),為了減少選舉過程中和資源,一般客戶端都是連接observer,
配置如下:
要指定相關的機器是observer,並且在集群配置裏註明
peerType=observer server.1=zk1:2888:3888:observer
3,內存
zk在讀寫數據的時候,不要用swap交換分區,因為zookeeper都是把數據放在內存中,如果發生和磁盤交換的話,性能會大打折扣,修改啟動腳本,配置jvm,配置原則物理內存的80%
vim zkServer.sh
case $1 in
start)
echo -n "Starting zookeeper ... "
if [ -f "$ZOOPIDFILE" ]; then
if kill -0 `cat "$ZOOPIDFILE"` > /dev/null 2>&1; then
echo $command already running as process `cat "$ZOOPIDFILE"`.
exit 0
fi
fi
nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
-cp "$CLASSPATH" $JVMFLAGS -Xmx512m -Xms512m $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &
4,磁盤
zk 對磁盤要求比較高,因為會做磁盤鏡像備份snapshot到磁盤,第一要用高速磁盤,第二要定期處理,雖然配置裏有自動清理,但是會遇到zk使用高峰,建議自己寫crontab來定期清理
autopurge.snapRetainCount=3#保留最新的3個鏡像數據 autopurge.purgeInterval=1#每隔1小時清理一次
5,最後說下投票機制
當有節點宕機了,所有服務都將進入選舉模式,先斷掉連接,然後開始選舉,過程是server1掛了,server2 server3進入選舉,每個server都會先投自己,選票結構(id,zxid),那麽server2(2,0),server3(3,0),然後再把自己的選票發給所有的server,當每個server收到別人發來的選票會進行對比,對比順序是先從zxid 開始(zxid是代表了數據的新舊,比如3>2,那麽3就是最新的),如果zxid相同,在對比id,這是server2收到來自server3的選票(3,0),zxid相同,但是id比自己大,這是server2會更新自己的選票server2(3,0),再發給所有的server,進入下一輪選舉,這是server3(3,0),沒變化,所以不用更新,server2(3,0),那麽這時server3變成leader,如果參與投票的機器比較多,那麽就按照這個機制進行多輪投票
運維經驗,這裏有個問題,如果在zk宕機選舉過程中,clint不斷的嘗試重新,會導致zk進入死循環,因為選舉的第一步就是先斷掉所有連接,所以,客戶端要用調用的方式,而不是無限的重新連接
zookeeper安裝以及配置和註意事項