1. 程式人生 > >zookeeper安裝以及配置和註意事項

zookeeper安裝以及配置和註意事項

zk

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安裝以及配置和註意事項