前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >生产技巧:如何不停机修改Zookeeper日志路径?

生产技巧:如何不停机修改Zookeeper日志路径?

作者头像
用户1516716
发布2018-12-21 15:04:36
1.1K0
发布2018-12-21 15:04:36
举报
文章被收录于专栏:A周立SpringCloudA周立SpringCloud

偶然看到2017年8月写的工作日志,希望对大家的工作有参考价值。

由于Kafka集群的运维兄弟没对线上环境Zookeeper做处理,因此 zookeeper.out 文件会不断增大,没几天时间,文件已经有6G。故而需要做一些改进,避免这种情况。

目前,咪咕Kafka及Zookeeper是分离部署的(即:未使用Kafka本身自带的Zkper),故而要想修改Zookeeper的日志,需如下操作:

准备工作

1 执行如下命令,找到Kafka/Zookeeper:

代码语言:javascript
复制
ps -ef|grep kafka    # 如果是找zookeeper进程,那么就把kafka替换成zookeeper

结果展示如下:

代码语言:javascript
复制
migu     141395      1 91 Jan08 ?        9-23:31:12 /usr/java/jdk1.8.0_131/bin/java -Xms30g -Xmx30g -XX:PermSize=64m -XX:MaxPermSize=128m -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+DisableExplicitGC -Djava.awt.headless=true -Xloggc:/usr/local/kafka/bin/../logs/kafkaServer-gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M

由结果可知,Kafka目录为 /usr/local/kafka ,同理,也可找到Zookeeper目录为 /usr/local/zookeeper

2 执行如下命令,查看Zookeeper状态:

代码语言:javascript
复制
[root@5fe1601 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: follower

如上所示,该实例是一个 follower需注意,如果Zookeeper集群只有3个实例,那么日志修改务必先修改 follower 节点的配置,再修改 leader 节点的配置,否则可能会导致问题。

修改日志

下面我们来修改日志输出:

1 在 conf/log4j.properties 中,找到:

代码语言:javascript
复制
# Define some default values that can be overridden by system properties
zookeeper.root.logger=INFO, CONSOLE

改为:

代码语言:javascript
复制
# Define some default values that can be overridden by system properties  
zookeeper.root.logger=INFO,ROLLINGFILE

这样,日志就会打印到 ${zookeeper.log.dir}/${zookeeper.log.file} ,即: ./zookeeper.log 。也可根据需要,修改 zookeeper.log.dirzookeeper.log.file 的值,在文件 conf/log4j.properties 中。

2 修改 bin/zkEvn.sh ,找到:

代码语言:javascript
复制
if [ "x${ZOO_LOG4J_PROP}" = "x" ]  
then  
    ZOO_LOG4J_PROP="INFO,CONSOLE"  
fi

修改为:

代码语言:javascript
复制
if [ "x${ZOO_LOG4J_PROP}" = "x" ]  
then  
    ZOO_LOG4J_PROP="INFO,ROLLINGFILE"  
fi

3 【可选】此时,如果重启Zookeeper,就会发现在当前目录生成 zookeeper.log 文件,但此时已然会生成一个 zookeeper.out 文件,内容为空。虽然不影响使用,但是不优雅,如何解决该问题呢?只需在 bin/zkServer.sh 中:

3.1 注释如下内容:

代码语言:javascript
复制
# _ZOO_DAEMON_OUT="$ZOO_LOG_DIR/zookeeper.out"

3.1 将如下内容:

代码语言:javascript
复制
nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
    -cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &

修改为:

代码语言:javascript
复制
nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
    -cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" >&1 < /dev/null &

3.3 执行如下命令,重启Zookeeper:

代码语言:javascript
复制
zkServer.sh restart

这样,Zookeeper就不会再向zookeeper.out文件中打印日志了。

4 同样的操作,修改Zookeeper集群中的其他Zookeeper实例,注意:建议在最后修改 leader 节点 ,避免修改日志中途有额外的选举操作,影响线上性能。

参考文档

  • Zookeeper 日志输出到指定文件夹:https://www.cnblogs.com/zhwbqd/p/3957018.html
  • Zookeeper Log4j日志输出修改:http://yangyoupeng-cn-fujitsu-com.iteye.com/blog/1922459
  • Zookeeper在线迁移:http://blog.csdn.net/lirenzuo/article/details/71080063
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-11-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 A周立SpringCloud 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 准备工作
  • 修改日志
  • 参考文档
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档