zookeeper安装以及配置和注意事项

1,安装 

    

1
2
3
4
wget 
tar zxvf zookeeper-3.4.9.tar.gz 
cd zookeeper-3.4.9/conf
cp zoo_sample.cfg zoo.cfg

    修改zoo.cfg配置文件

    如下

1
2
3
4
5
6
7
8
9
10
11
12
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

 

1
2
3
export ZOOKEEPER_HOME=/opt/zookeeper/zookeeper-3.4.9/
export PATH=$ZOOKEEPER_HOME/bin:$PATH
export PATH

    添加myid 文件

    在dataDir目录下,添加myid,文件内容要与配置文件中server.1的数字一样,仅仅是数字

 安装java8

1
yum install java1.8

    启动zookeeper,并查看状态

1
2
zkServer.sh start
zkServer.sh status

2,集群配置注意事项

    一般来讲,3到5个zookeeper投票者(leader,follower),必须是单数,因为数量过半才能保证正常运行,公式N=2F+1  其中F是可以容错的数量

    配置observer(观察者)(跟follower没什么区别,只是不参与投票),为了减少选举过程中和资源,一般客户端都是连接observer,

    配置如下:

    要指定相关的机器是observer,并且在集群配置里注明   

1
2
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来定期清理

1
2
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进入死循环,因为选举的第一步就是先断掉所有连接,所以,客户端要用调用的方式,而不是无限的重新连接,或者客户端只连接observer(观察者),因为observer不参与投票,但是leader和follower在正常的投票,一旦新的leader被选出来,那么就不会有无线重新连接的情况出现













本文转自wks9751CTO博客,原文链接: http://blog.51cto.com/wks97/1923341,如需转载请自行联系原作者




上一篇:ubuntu1604使用之旅——网络配置


下一篇:《中国人工智能学会通讯》——2.5 智能汽车人机交互与人机协同技术 的研究进展