HBase Zookeeper 机器磁盘老是打满的故障分析与解决办法

本文详细介绍了如何解决ZooKeeper机器磁盘空间占用导致的ZooKeeper进程挂掉问题,包括日志分析、日志清理脚本编写以及通过调整ZooKeeper配置来优化日志管理,确保HBase集群稳定运行。
摘要由CSDN通过智能技术生成

最近连续两次发现凌晨5点的时候,zk机器磁盘打满导致zk进程挂掉,从而造成hbase集群不可用的事故。 通过分析发现,zk进程一直在写log到文件log.31001e217b, 写这个文件主要是zk将保存的状态信息的操作日志写入到文件中持久化,通过如下的命令查看该日志文件可以发现是什么运用在不停地更新zk中的状态:

export ZOOKEEPER_CLASSPATH=/usr/local/hadoop/zookeeper-release/zookeeper-3.4.5.jar:/usr/local/hadoop/zookeeper-release/lib/log4j-1.2.15.jar:/usr/local/hadoop/zookeeper-release/lib/slf4j-api-1.6.1.jar:/usr/local/hadoop/zookeeper-release/lib/slf4j-log4j12-1.6.1.jar:/usr/local/hadoop/zookeeper-release/conf/

java -cp $ZOOKEEPER_CLASSPATH  org.apache.zookeeper.server.LogFormatter /data/zookeeper/version-2/log.3100130e68 > 1.log

查看得出的信息发现,在log中有大量的storm运用更新状态信息的操作日志。
解决的办法就是设置一个crontab job来定时clean这些过期的日志文件,操作如下:

 vim clean_log.sh

#!/bin/bash
cd `dirname $0`
/usr/local/jdk/bin/java -cp /usr/local/hadoop/zookeeper-release/zookeeper-3.4.5.jar:/usr/local/hadoop/zookeeper-release/lib/slf4j-log4j12-1.6.1.jar:/usr/local/hadoop/zookeeper-release/conf:/usr/local/hadoop/zookeeper-release/lib/slf4j-api-1.6.1.jar:/usr/local/hadoop/zookeeper-release/lib/log4j-1.2.15.jar org.apache.zookeeper.server.PurgeTxnLog /data/zookeeper/ /data/zookeeper/ -n 3 > clean.log 2>&1

crontab -e

*/30 * * * * sh /data/zookeeper/version-2/clean_log.sh

即zk提供了工具类 org.apache.zookeeper.server.PurgeTxnLog 来删除指定目录下的log日志, -n 指定保留最新的n个文件, n >= 3.

通过这样设置后, zk机器会每隔30分钟清理一次日志文件。

另外,还以修改zoo.cfg的一个配置:snapCount=5000 , 每当 snapCount 个事物日志写入时,快照被创建,同时创建新的事务日志文件,默认值100,000。 这样可以避免每个生成的log文件太大,导致还没清理的时候都占满空间!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值