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

编写代码边撸猫 2019-01-02 12:43:11 ⋅ 572 阅读

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

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

准备工作

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

 
  1. ps -ef|grep kafka    

  2. # 如果是找zookeeper进程,那么就把kafka替换成zookeeper

结果展示如下:

 
  1. 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状态:

 
  1. [root@5fe1601 bin]# ./zkServer.sh status

  2. ZooKeeper JMX enabled by default

  3. Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg

  4. Mode: follower

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


修改日志

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

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

 
  1. # Define some default values that can be overridden by system properties

  2. zookeeper.root.logger=INFO, CONSOLE

改为:

 
  1. # Define some default values that can be overridden by system properties  

  2. zookeeper.root.logger=INFO,ROLLINGFILE

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

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

 
  1. if [ "x${ZOO_LOG4J_PROP}" = "x" ]  

  2. then  

  3.    ZOO_LOG4J_PROP="INFO,CONSOLE"  

  4. fi

修改为:

 
  1. if [ "x${ZOO_LOG4J_PROP}" = "x" ]  

  2. then  

  3.    ZOO_LOG4J_PROP="INFO,ROLLINGFILE"  

  4. fi

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

3.1 注释如下内容:

 
  1. # _ZOO_DAEMON_OUT="$ZOO_LOG_DIR/zookeeper.out"

3.1 将如下内容:

 
  1. nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}"

  2. "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \

  3.    -cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &

修改为:

 
  1. nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}"


  2. "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \

  3.    -cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" >&1 < /dev/null &

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

 
  1. 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


---------------END----------------

后续的内容同样精彩

长按关注“IT实战联盟”哦




全部评论: 0

    我有话说:

    「转载」微服务分布式架构中,如何实现日志链路跟踪?

    背景 开发排查系统问题用得最多的手段就是查看系统日志,在分布式环境中一般使用ELK来统一收集日志,但是在并发大时使用日志定位问题还是比较麻烦,我们来看下面的图     上图

    QQ停止为欧洲用户提供服务/哈罗单车获7亿美元融资,共享单车三足鼎立已成/快手们被中央点名,融资前景如何?

    QQ停止为欧洲用户提供服务;哈罗单车获7亿美元融资,共享单车三足鼎立已成;快手们被中央点名,融资前景如何?

    大厂技术大佬:用大白话给你解释Zookeeper的选举机制

    Zookeeper 是一个分布式服务框架,主要是用来解决分布式应用中遇到的一些数据管理问题如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。 我们可以简单把 

    SpringBoot+zk+dubbo架构实践(二):SpringBoot 集成 zookeeper

    啰嗦,本篇完成两件事:1、搭建SpringBoot 框架;2、基于spring boot框架访问zookeeper

    GoLand 2020.3.2 发布,bug 修复版本

    GoLand 2020.3.2 已经发布,主要包含各种 bug 修复。 部分更新内容 支持在带有 M1 芯片的 Mac 上正常使用调试器。 如果之前已配置,则需要升级到 2020.3.2 后就

    58技术:基于Elastic Stack的海量日志分析平台实践

    背景 随着58集团业务的飞速发展,日志数量也呈现指数级增长。传统的日志处理方案,已不再适用,此时急需一套功能强大、稳定可靠的日志处理系统。 ​为解集团燃眉之急,DB部门自2018年初着手调研解决方案

    xrkmonitor 字符云监控系统 v3.3 日志系统增强

    该版本主要增强日志系统功能,包括引入通用日志文件监控插件,核心代码上日志系统新增日志数和日志类型统计图表,日志系统按配置大小自动滚动日志;插件架构上,插件配置项通过引用排序权重可实现排序显示,插件的

    你可能知道的CRUD

      本系列旨在系统学习提升Mysql技能,更完整内容可以参考阿里新零售数据库设计与实战 DB引擎 你可能知道的CRUD INSERT 情况一 Duplicate key 当批量更新,如果

    极速后台框架 FastAdmin v1.2.0.20210125 新增插件 API 文档生成

    FastAdmin 更新日志 v1.2.0.20210125_beta 新增自定义插件API文档生成 新增登录和鉴权状态显示 新增自定义测试提交参数 优化安装脚本 优化cookie加密 修复系统

    如何加密传输和存储用户密码

    为什么写这篇文章近期,Github被爆出,在内部日志中记录了明文密码。虽然据说影响面很小(因为日志外部访问......

    关于MySQL 通用查询日志和慢查询日志分析

    MySQL中的日志包括:错误日志、二进制日志、通用查询日志、慢查询日志等等。这里主要介绍下比较常用的两个功能:通用查询日志和慢查询日志。

    Google技术:你了解Google最新发布的JS代码规范 的最佳实践

    Google为了那些还熟悉代码规范的人发布了一个JS代码规范。其中列出了编写简洁易懂的代码所应该做的最佳实践。

    Apache ZooKeeper 3.7.0 发布,分布式服务框架

    Apache ZooKeeper 是 Apache 软件基金会的一个软件项目,它为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。ZooKeeper 曾经是 Hadoop 的一个子项目

    数据生成工具 ZenData 发布 1.5 版本,新增 CSV 和 Excel 输出格式,字段定义支持表达式

    随着DevOps的日益流行,越来越多的团队开始关注持续集成和持续交付。在这种大背景下,自动化测试就越来越重要了。那么问题来了,如何能够实现大规模、工程化的自动化测试呢?这里面会涉及到诸多的问题,比如

    京东技术如何实现靠谱的分布式锁?(附SharkLock的设计选择)

    分布式锁,是用来控制分布式系统中互斥访问共享资源的一种手段,从而避免并行导致的结果可控。

    Plumelog 3.3-RELEASE 已经发布,分布式日志组件

    简介Plumelog 一个简单易用的java分布式日志组件,码云GVP(最有价值开源项目)。 一.系统介绍 无入侵的分布式日志系统,基于log4j、log4j2、logback搜集日志

    「轻阅读」如何设计移动端屏适配方案

    在众多的移动设备中,前端开发人员如何在不同屏幕大小,不同程度的高清屏下去百分百的还原设计稿,从来都