【zookeeper】zookeeper日常运维

这篇具有很好参考价值的文章主要介绍了【zookeeper】zookeeper日常运维。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文将分享一些zookeeper在日常使用中一些维护经验。

zookeeper清理快照

脚本或者命令清理

zookeeper长时间运行,快照逐渐增多可能造成服务器磁盘被占满的情况,但我们不能贸然用rm命令删除快照文件,如果直接删完会导致丢失好多数据,所以我们需要设置相关参数,并使用一些优雅的命令来删除文件,zookeeper自带的脚本zkCleanup.sh。
【zookeeper】zookeeper日常运维,zookeeper,zookeeper

[root@k8s-m1 bin]# ./zkCleanup.sh 
Usage:
PurgeTxnLog dataLogDir [snapDir] -n count
        dataLogDir -- path to the txn log directory
        snapDir -- path to the snapshot directory
        count -- the number of old snaps/logs you want to keep, value should be greater than or equal to 3
2023-09-01 14:44:34,660 [myid:] - ERROR [main:ServiceUtils@48] - Exiting JVM with code 1

如:保留最近20个snap文件
[root@k8s-m1 bin]# ./zkCleanup.sh -n 20

使用自带的这个脚本可以较好的删除,当然我们也可以使用一些linux命令删除n天前的数据,注意自己实际环境中的目录设置。

[root@k8s-m1 bin]# find /zookeeperData/version-2/ -name "snap*" -mtime +10 | xargs rm -f
[root@k8s-m1 bin]# find /zookeeperDataLog/version-2/ -name "log*" -mtime +10 | xargs rm -f
[root@k8s-m1 bin]# find /opt/apache-zookeeper-3.7.1-bin/logs -name "zookeeper.log.*" -mtime +10 | xargs rm –f

配置自动清理日志

从3.4.0开始,会自动清理日志了,所以这个通常不用配置。
配置autopurge.snapRetainCount和autopurge.purgeInterval参数。
保留的snapshop的数量,默认是3个,最小也是3。

autopurge.snapRetainCount=3
autopurge.purgeInterval=1

3.4.0之前的版本可以通过zookeeper的配置自行对snap进行管理。如下这三个参数分别表示一个小时清理一次,log的大小(单位是kb)和快照的数量。【zookeeper】zookeeper日常运维,zookeeper,zookeeper
另外要注意的是,zookeeper重启会自动清除zookeeper.out日志,所以如果出错要注意先备份这个文件。

watches数量多的问题

dubbo对于每个结点都会watch,导致watch数很多,随便都几千个。用wchs,wchc,wchp这些命令可以查看watches的信息,包括总数,每条路径上的watch的数量,每个client的。

[root@k8s-m1 logs]# echo wchs |nc localhost 2181

查找不能成功启动原因

zookeeper会有很多原因启动不成功,可以通过以下命令来查看启动时报的是什么异常,同时也可以查看运行过程中的异常。

[root@k8s-m1 apache-zookeeper-3.7.1-bin]# ./bin/zkServer.sh start-foreground

还可以通过下面命令查看zookeeper启动的各个参数,包括java路径等,也可以便于查找问题。

[root@k8s-m1 apache-zookeeper-3.7.1-bin]# ./bin/zkServer.sh print-cmd

配置zookeeper.out的位置及log4j滚动日志输出

有时候,zookeeper.out这个文件很大。根据zkServer.sh的代码,这个zookeeper.out实际上是nohup的输出。而nohup的输出实际上是stdout和stderr的输出,所以还是zookeepe本身的日志配置的问题,而这样输出路径和大小没法控制,因为日志文件没有轮转。所以需要修改日志输出方式。

查看bin/zkServer.sh和conf/log4j.properties这两个文件,发现zookeeper其实是有日志相关的输出的配置,只要定义相关的变量就可以了。

主要是ZOO_LOG_DIR和ZOO_LOG4J_PROP这两个环境变量,
zkServer.sh里的:

if [ ! -w "$ZOO_LOG_DIR" ] ; then
mkdir -p "$ZOO_LOG_DIR"
fi

ZOO_LOG_FILE=zookeeper-$USER-server-$HOSTNAME.log
_ZOO_DAEMON_OUT="$ZOO_LOG_DIR/zookeeper-$USER-server-$HOSTNAME.out"

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 1
      fi
    fi
    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 &

而zkServer.sh会加载zkEnv.sh。因此,其实修改下bin/zkEnv.sh里面的ZOO_LOG_DIR变量就可以了。而ZOO_LOG4J_PROP指定INFO,ROLLINGFILE日志的APPENDER。

if [ "x${ZOO_LOG_DIR}" = "x" ]
then
    ZOO_LOG_DIR="$ZOOKEEPER_PREFIX/logs"
fi

if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
    #ZOO_LOG4J_PROP="INFO,CONSOLE"
    #ZOO_LOG4J_PROP="INFO,DailyROLLINGFILE"
    ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
fi
#需要将CONSOLE改成ROLLINGFILE

log4j.properties里的:zookeeper.root.logger的值与前一个文件的ZOO_LOG4J_PROP 保持一致(注意保持一致非常重要,否则zookeeper不能正常启动),该日志配置是以日志文件大小轮转的,如果想要按照天轮转,可以修改为DaliyRollingFileAppender。

[root@k8s-m1 bin]# vim  /opt/apache-zookeeper-3.7.1-bin/conf/log4j.properties 
zookeeper.root.logger=INFO, ROLLINGFILE
#zookeeper.root.logger=INFO, DailyROLLINGFILE
.......

# Add ROLLINGFILE to rootLogger to get log file output
#
log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender
#log4j.appender.ROLLINGFILE=org.apache.log4j.DailyRollingFileAppender
log4j.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.PatternLayout
log4j.appender.ROLLINGFILE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L] - %m%n

还可以修改下conf/log4j.properties,设置滚动日志最多为10个:

# Max log file size of 10MB
log4j.appender.RFAAUDIT.MaxFileSize=10MB
log4j.appender.RFAAUDIT.MaxBackupIndex=10

Too many connections from 错误

这个错误是因为同一个IP的zookeeper socket 连接数大于60了。zookeeper server默认限制每个IP最多60个连接。
需要修改修改zoo.cfg中的如下配置:

maxClientCnxns=1000

This ZooKeeper instance is not currently serving requests 的错误提示

当集群里的结点只剩下一台,或者不足半数时,就会出现这个错误提示。
通常在,只启动第一台zookeeper时会报这个错误。

在zookeeper server的日志里,会有类似的日志:

Exception causing close of session 0x0 due to java.io.IOException: ZooKeeperServer not running

管理工具

Zookeeper官方自带的管理员工具

官方的命令行工具可以胜任绝大部分工作了。
部分操作可以参考https://blog.csdn.net/margu_168/article/details/132606402

zktop

python写的小工具

https://github.com/phunt/zktop

PrettyZoo

PrettyZoo是一款Java写的高颜值ZooKeeper客户端桌面应用,颜值非常高,支持Mac / Windows / Linux。
下载地址: https://github.com/vran-dev/PrettyZoo/releases
具备如下功能:

  • 可同时管理多个 zookeeper 连接
  • 节点数据实时同步
  • 支持 ACL 配置
  • 支持 SSH Tunnel 连接
  • 支持配置导入、导出
  • 支持节点增删改查操作
  • 支持 command line 操作模式
  • 支持节点数据格式化 JSON、XML
  • 支持节点数据高亮(JSON、XML、Properties)

更多管理工具请自行测试使用。

更多关于zookeeper的知识分享,请前往博客主页。编写过程中,能力有限难免出现差错,敬请指正文章来源地址https://www.toymoban.com/news/detail-700789.html

到了这里,关于【zookeeper】zookeeper日常运维的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 运维良药,K8S日常故障处理集锦

    问题1:K8S集群服务访问失败? 原因分析 :证书不能被识别,其原因为:自定义证书,过期等。 解决方法 :更新证书即可。 问题2:K8S集群服务访问失败? curl: (7) Failed connect to 10.103.22.158:3000; Connection refused 原因分析 :端口映射错误,服务正常工作,但不能提供服务。 解决

    2024年01月17日
    浏览(39)
  • 运维工程师一天的日常都在做什么?

    在公司负责Linux运维工作,就我一人,之前公司没有运维。 每天的日常,就是看B站,学习新的内容(主要是工位位置不好),逛一些论坛,还有接一些小活,写写脚本处理问题之类的,一个月也可以有个两千左右的额外收入。 一个月估计差不多有25天没人找我,每天都是准时

    2024年02月05日
    浏览(85)
  • 浅谈ChatGPT在一个IT运维人眼中的日常使用场景

    其实AI的概念已经存在了十多年,包括在运维领域,也从传统运维演化到了所有AIOps的概念,但一直以来对当前的AI并不是太看好,始终觉得当前的AI只是停留在“撞库”,从海量的库里去匹配触发语句,所谓的“小爱同学”,“小度小度”包括Siri等所有的智能语音助手

    2024年02月09日
    浏览(45)
  • 【运维】Kafka高可用: KRaft(不依赖zookeeper)集群搭建

    本文主要介绍了 kafka raft集群架构: 与旧架构的不同点,有哪些优势,哪些问题 架构成员有哪些,怎么规划。 三节点集群安装、启动与测试 在旧的架构中 Kafka集群包含 多个broker节点和一个ZooKeeper 集群 。如上图集群结构:4个broker节点和3个ZooKeeper节点。Kafka 集群的controller在

    2024年02月03日
    浏览(41)
  • 【运维知识大神篇】超详细的ELFK日志分析教程10(kafka集群原理+基本使用+zookeeper和kafka堆内存调优+kafka监控和压力测试+filebeat和logstash对接kafka)

    本篇文章继续给大家介绍ELFK日志分析,我们先前介绍了ELFK架构,zookeeper部署使用,kafka的部署,仅差kafka使用就将整个体系融汇贯通了。我们本篇文章将以kafka为核心,详细介绍kafka使用,最终将kafka融入ELFK架构中,大致内容见下面目录。 目录 kafka集群原理 一、专业术语 二、

    2024年02月04日
    浏览(71)
  • 【深度学习】日常笔记11

    在torch中 微分相当于高数里的求导。 在高等数学中,求导是计算一个函数在某一点处的变化率,表示该点附近的函数值对自变量的微小变化的响应。而在 Torch 中,微分操作也是计算张量函数在某一点处的变化率,即计算函数对输入张量的偏导数。 Torch 提供了丰富的自动微分

    2024年02月17日
    浏览(39)
  • 科大讯飞日常实习面试

    提问的问题 面试30min,基本就是介绍自己做过的一些项目 其中提问了java八股文: java保证线程安全的方法 需要根据具体场景选择合适的方法来保证线程安全。 java中的异步请求如何实现 你的SpringBoot项目怎么匹配在线人数 请说出spring springMVC springboot之间的关系和区别 SpringBoo

    2023年04月09日
    浏览(48)
  • 日常开发报错记录

    20230424 python3.7中报错:No module named ‘typing_extensions‘  在网上找到的解决办法:【pytorch】错误:No module named ‘typing_extensions‘ 问题解决_no module named typing_污喵王z的博客-CSDN博客 就是将缺失的文件typing_extensions.py,补充到路径:…envspy3.7Libtyping.py的同目录下,但发现github上

    2023年04月22日
    浏览(49)
  • Springboot的日常操作技巧

    1、自定义横幅 简单就一点你需要把banner.text放到classpath 路径下 ,默认它会找叫做banner的文件,各种格式的都可以 ,但是实际只能输出成符号图形 图片也行但是显示的结果就和下图一样 也可以使用代码 优先输出自定义横幅 先检查是否有横幅图片文件,.jpg.phg这样的 在检查

    2024年04月25日
    浏览(46)
  • oracle日常操作记录

    oracle日常操作记录 SQL中上下按键错误 rlwrap下载 创建用户和表空间 创建用户 授权 创建表空间 SQL行中的技巧 调用系统命令 按照用户导出和导入 表空间扩容 一、查询使用率: 新版查询表空间使用率 二、查看使用数据文件扩容到哪一步: 三、添加数据文件: Oracle启动关闭

    2024年01月20日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包