• zookeeper logs and snapshot


    来自:http://xstarcd.github.io/wiki/Cloud/zookeeper_log_snapshot.html

    事务日志可视化转换

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #!/bin/sh
    # scriptname: zkLog2txt.sh
    # zookeeper事务日志为二进制格式,使用LogFormatter方法转换为可阅读的日志
    if [ -z "$1" -o "$1" = "-h" ];then
        echo "Useage: $0 <LogFile> [zkDir]"
        echo "eg:
    $0 /opt/zpdata/version-2/log.3000002c7 /opt/zookeeper \
    |grep '^7/24/13'|grep -A 10 -B 10 GAEI_AF_NotifyServer|more"
        exit 0
    fi
     
    #LogFile=/dfs/zpdata/version-2/log.100000001
    LogFile=$1
    zkDir=$2
    [ -z "$zkDir" ] && zkDir=/opt/zookeeper
    [ ! -f "$LogFile" ] && echo "LogFile:$LogFile not exist!" && exit 1
    [ ! -d "$zkDir" ] && echo "zkDir:$zkDir not exist!" && exit 1
    [ ! -d "$zkDir/lib" ] && echo "zkDir:$zkDir/lib not exist!" && exit 1
     
    #java -cp $zkDir/zookeeper.jar:$zkDir/lib/slf4j-api-1.6.1.jar:$zkDir/lib/slf4j-log4j12-1.6.1.jar:$zkDir/lib/log4j-1.2.15.jar
    #org.apache.zookeeper.server.LogFormatter "$LogFile"
     
    JAVA_OPTS="$JAVA_OPTS -Djava.ext.dirs=$zkDir:$zkDir/lib"
    java $JAVA_OPTS org.apache.zookeeper.server.LogFormatter "$LogFile"

    查看zookeeper日志的方法:在zookeeper主机上执行 zkLog2txt.sh <zk日志文件>,如下:

    1
    zkLog2txt.sh /hadoop/zookeeper/version-2/log.a00000001 /opt/zookeeper|more

    日志及快照清理

    zookeeper主要存放了两类文件,一个是snapshot和log,前者是内存数的快照,后者类似mysql的binlog,将所有与修改数据相关的操作记录在log中,两类文件的目录可在配置文件中指定。

    正常运行过程中,ZK会不断地把快照数据和事务日志输出到这两个目录,并且如果没有人为操作的话,ZK自己是不会清理这些文件的,需要管理员来清理,这里介绍4种清理日志的方法。在这4种方法中,推荐使用第一种方法,对于运维人员来说,将日志清理工作独立出来,便于统一管理也更可控。毕竟zk自带的一些工具并不怎么给力,这里是社区反映的两个问题:

    文件删除脚本

    第一种,也是运维人员最常用的,写一个删除日志脚本,每天定时执行即可:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/bin/bash
    #snapshot file dir
    dataDir=/home/yinshi.nc/test/zk_data/version-2
    #tran log dir
    dataLogDir=/home/yinshi.nc/test/zk_log/version-2
    #zk log dir
    logDir=/home/yinshi.nc/test/logs
    #Leave 66 files
    count=66
    count=$[$count+1]
    ls -t $dataLogDir/log.* | tail -n +$count | xargs rm -f
    ls -t $dataDir/snapshot.* | tail -n +$count | xargs rm -f
    ls -t $logDir/zookeeper.log.* | tail -n +$count | xargs rm -f

    以上这个脚本定义了删除对应两个目录中的文件,保留最新的66个文件,可以将他写到crontab中,设置为每天凌晨2点执行一次就可以了。

    zkPurgeTxnLog工具

    第二种,使用ZK的工具类PurgeTxnLog,它的实现了一种简单的历史文件清理策略,可以在这里看一下他的使用方法:http://zookeeper.apache.org/doc/r3.4.3/api/index.html

    可以指定要清理的目录和需要保留的文件数目,简单使用如下:

    1
    2
    java -cp zookeeper.jar:lib/slf4j-api-1.6.1.jar:lib/slf4j-log4j12-1.6.1.jar:lib/log4j-1.2.15.jar:conf
    org.apache.zookeeper.server.PurgeTxnLog <dataDir> <snapDir> -n <count>

    zkCleanup.sh

    第三种,对于上面这个Java类的执行,ZK自己已经写好了脚本,在bin/zkCleanup.sh中,所以直接使用这个脚本也是可以执行清理工作的。

    1
    /usr/lib/zookeeper/bin/zkCleanup.sh /hadoop/zookeeper/version-2/ 5

    自动清理配置项

    第四种,从3.4.0开始,zookeeper提供了自动清理snapshot和事务日志的功能,通过配置 autopurge.snapRetainCount 和 autopurge.purgeInterval 这两个参数能够实现定时清理了。这两个参数都是在zoo.cfg中配置的:

    1
    2
    3
    4
    5
    # 指定清理频率,单位是小时,默认是0,表示不开启自己清理功能。
    autopurge.purgeInterval=6
     
    # 和上面的参数搭配使用,指定需要保留的文件数目,默认是保留3个。
    autopurge.snapRetainCount=5
  • 相关阅读:
    React Native解决Android的WebView无法执行injectedJavaScript代码
    Java中BitSet使用(转)
    Java StringTokenizer分割字符串
    【git】git常用命令简介
    【细说Java】方法重载的简单介绍
    【细说Java】Java封箱拆箱的一些问题
    【Java解惑】表达式问题
    【细说Java】Java的重写与隐藏
    【细说Java】揭开Java的main方法神秘的面纱
    Maven简介
  • 原文地址:https://www.cnblogs.com/sunxucool/p/5500758.html
Copyright © 2020-2023  润新知