相关约定
事务日志目录: /data0/zookeeper/log
数据目录: /data1/zookeeper/data
工作日志目录: / data0/zookeeper/logs
一、下载安装zookeeper
- sudo su
- cd /usr/local/
- wget http://www-eu.apache.org/dist/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz
- tar zxvf zookeeper-3.4.8.tar.gz
- ln -s zookeeper-3.4.8 zookeeper
二、主要配置
- mkdir /data0/zookeeper/{log,logs}
- mkdir /data1/zookeeper/data
* cd /usr/local/zookeeper- cp conf/zoo_sample.cfg conf/zoo.cfg
- vim conf/zoo.cfg
- 修改添加
* dataDir=/data1/zookeeper/data
* dataLogDir=/data0/zookeeper/log
- 追加如下3条
* autopurge.purgeInterval=2
* autopurge.snapRetainCount=24
* zk.connectiontimeout.ms=100000
- 配置server列表,格式为server.MYID=IP:2888:3888
* 例如:
server.1=10.13.56.164:2888:3888
server.2=10.13.56.165:2888:3888
server.3=10.13.56.166:2888:3888
- 根据上述指定的myid值 echo MYID > myid
* 例如10.13.56.164这台机器应 echo 1 > /data1/zookeeper/data/myid
三、工作日志存储方式修改
- vim conf/log4j.properties 并修改如下:
* zookeeper.root.logger = INFO, ROLLINGFILE
* zookeeper.log.dir=/data0/zookeeper/logs
* log4j.appender.ROLLINGFILE=org.apache.log4j.DailyRollingFileAppender
- vim bin/zkEnv.sh 并修改如下:
* ZOO_LOG_DIR="/data0/zookeeper/logs"
* ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
四、启动zookeeper
依次登录集群中各机器执行如下命令:
- bin/zkServer.sh start &
一般情况下,集群中有超过半数的实例成功启动后,zookeeper服务便可用
五、常用运维
由于zookeeper遇到未知错误后,会抛出异常并终止进程,所以为了减少运维工作,需要提供一种检测&重启的机制,在此介绍一种我使用的daemontools工具
daemontools(http://cr.yp.to/daemontools.html)是一个管理UNIX下服务的工具集。supervise监视一个服务。它启动一个服务、当服务停掉时它会重起服务。
- 安装daemontools
- mkdir /tmp/package
- chmod 755 /tmp/package
- cd /tmp/package
- wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
- tar zxvf daemontools-0.76.tar.gz
- cd ./admin/daemontools-0.76
- vim ./src/error.h 找到:extern int errno; 改成:#include <errno.h>
- ./package/install 需要root
- 监控Zookeeper
* 在/data0/service下,新建文件夹zookeeper,新建run文件:
* cd /data0/service
* mkdir zookeeper
* cd zookeeper
* vim run
* chmod 755 run
* run内容:
#!/bin/bash exec 2>&1 exec /usr/local/zookeeper/bin/zkServer.sh start
- 运行:
* supervise /data0/service/zookeeper
//或者可以用nohup以后台方式运行。如下:
* nohup supervise /data0/service/zookeeper &
如果出现
supervise: fatal: unable to acquire /service/zookeeper/supervise/lock: temporary failure
快速rm /data0/service/zookeeper/supervise 重新执行 supervise /service/zookeeper 即可
- 验证监控zookeeper是否成功:
kill zookeeper进程,查看zookeeper的进程是否自动重启