安装和配置
写在开头,4-5 是可选的,没有配置也是可以的。用单机测试成功~
1. 下载、解压
# 可以直接使用wget下载,也可以在其它地方下载完拷贝过来。这里解压到了`/usr/local`下 wget http://apache.fayea.com/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz tar -zxf zookeeper-3.4.8.tar.gz
2.修改配置文件(集群配置)
# 将原有的zoo_sample.cfg拷贝一份,取名叫`zoo.cfg`cp conf/zoo_sample.cfg conf/zoo.cfg# vim修改配置文件 cd zookeeper-3.4.8 vim conf/zoo.cfg
这里是集群配置:
- 修改了
dataDir
; - 集群:增加了最下边的集群配置
server.N
(如果不需要集群,不执行下面的步骤3.
) - 集群:需要在集群中每台机器上都这样配置。我这里是两台机器
192.168.192.128
和192.168.192.129
。
// the directory where the snapshot is stored.// do not use /tmp for storage, /tmp here is just example sakes.dataDir=/usr/local/zookeeper-3.4.8/data// There are two port numbers nnnnn.// The first followers use to connect to the leader, // and the second is for leader election.server.1=192.168.192.128:2555:3555 //192.168.192.128 这里的ip换成相应的服务器的ipserver.2=192.168.192.129:2555:3555
3.配置 myid
在 data 目录下(zoo.cfg
中的 dataDir
目录)新建一个叫 myid
的文件,文件内容对应 zoo.cfg
中的 server.x
的 x
:
vim myid
,操作的是第一台机器,server.x
的 x
是 1,所以这里文件内容是:
1
4.可选:配置 JVM 参数
首先,查看 /bin/zkServer.sh
的 start
方法可以看到:定义了变量 $JVMFLAGS
让我们设置 JVM 参数。
其次,可以在 /bin/zkEnv.sh
中看到:
if [ -f "$ZOOCFGDIR/java.env" ]then . "$ZOOCFGDIR/java.env"fi
就是说 JVM 参数最好配置在 /conf/java.env
中。
所以,我们改这里。不过这个文件不存在,先创建一个:vim java.env
,代码如下(这里我是需要改小一点):
JVMFLAGS="-Xmx300M -Xms300M"
5.可选:配置 zookeeper 日志输出格式、目录
首先,在 /conf/log4j.properties
中可以看到:
log4j.rootLogger=${zookeeper.root.logger}# Add ROLLINGFILE to rootLogger to get log file outputlog4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppenderlog4j.appender.ROLLINGFILE.Threshold=${zookeeper.log.threshold}log4j.appender.ROLLINGFILE.File=${zookeeper.log.dir}/${zookeeper.log.file}log4j.appender.ROLLINGFILE.MaxFileSize=${zookeeper.log.maxfilesize}log4j.appender.ROLLINGFILE.MaxBackupIndex=${zookeeper.log.maxbackupindex}log4j.appender.ROLLINGFILE.layout=org.apache.log4j.PatternLayoutlog4j.appender.ROLLINGFILE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L] - %m%n
还有其它配置没有全部贴出来,这里贴出来的是可以滚动存储的日志配置,可以看到 zookeeper 已经给我们准备好了,我们只需要设置相关变量就可以了:
${zookeeper.root.logger}
:级别 + 日志记录器${zookeeper.log.dir}
/${zookeeper.log.file}
:路径和日志文件名
其次,可以在 /bin/zkServer.sh
中看到:
if [ ! -w "$ZOO_LOG_DIR" ] ; thenmkdir -p "$ZOO_LOG_DIR"fiZOO_LOG_FILE=zookeeper-$USER-server-$HOSTNAME.log_ZOO_DAEMON_OUT="$ZOO_LOG_DIR/zookeeper-$USER-server-$HOSTNAME.out"case $1 instart) echo -n "Starting zookeeper ... "if [ -f "$ZOOPIDFILE" ]; thenif kill -0 `cat "$ZOOPIDFILE"` > /dev/null 2>&1; thenecho $command already running as process `cat "$ZOOPIDFILE"`. exit 1fifi nohup "$JAVA" $ZOO_DATADIR_AUTOCREATE "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" \ "-Dzookeeper.log.file=${ZOO_LOG_FILE}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \ -XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError='kill -9 %p' \ -cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null & …
-Dzookeeper.log.dir=${ZOO_LOG_DIR}
-Dzookeeper.log.file=${ZOO_LOG_FILE}
这个上面那个值就行,不改了-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}
所以,我们需要给上面这 2 个 ${***}
赋值即可。还是在 /bin/zkEnv.sh
,修改如下:
if [ "x${ZOO_LOG_DIR}" = "x" ]then ZOO_LOG_DIR="$ZOOKEEPER_PREFIX/logs" // 改为自己需要的目录 ZOO_LOG_DIR="/data/logs/zookeeper"fiif [ "x${ZOO_LOG4J_PROP}" = "x" ]then ZOO_LOG4J_PROP="INFO,CONSOLE" // 改为自己需要的 ZOO_LOG4J_PROP="INFO,ROLLINGFILE"fi
6.分别在所有机器上启动,命令如下
[root@localhost zookeeper-3.4.8]# bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.8/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
# 以上,启动成功!
7.验证状态
[root@localhost zookeeper-3.4.8]# ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.8/bin/../conf/zoo.cfg
Mode: leader
[root@localhost zookeeper-3.4.8]# ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.8/bin/../conf/zoo.cfg
Mode: follower
如果有问题,会大概显示如下:
[root@localhost zookeeper-3.4.8]# ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.8/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于