• Docker容器zookeeper解析和读取快照和事务日志


    环境信息

    项目 版本 备注
    操作系统 windows10 当前Docker运行在Windows操作系统上
    Docker Desktop 3.3.1 使用该软件来管理Docker
    Docker Engine 20.10.5 Docker核心引擎
    zookeeper镜像 3.5.9 用docker pull zookeeper:3.5.9 拉取的

    1.寻找文件的位置

    首先,我们用 docker exec -it zk容器ID或者名字 bash 登入容器内:

    如上图所示,我们成功登入了正在运行 zk容器。

    1.1 寻找配置文件 zoo.cfg

    find / -name zoo.cfg
    

    如下图所示,我们找到了配置文件zoo.cfg的保存路径:

    1.2 寻找快照和事务日志路径

    然后,我们来cat /conf/zoo.cfg查看一下配置信息:

    如图所示:

    • dataDir: 如果只有这个配置,那么对应的 事务日志文件 和 快照文件 都在该配置所在的目录下。
    • dataLogDir: 如果有该配置,那么会把事务日志 存放在该配置所在的目录中。

    于是,我们顺藤摸瓜,找到了快照和事务日志的存储路径:

    1. 快照文件 保存在 /data 目录下
    2. 事务日志文件 保存在 /datalog 目录下

    既然已经找到对应的 事务日志文件 和 快照文件 ,那么接下来就需要进行解析了。

    2. 解析文件

    2.1 验证java已安装

    zookeeper是使用java语言进行开发的,里面有提供 事务日志文件 和 快照文件的解析的工具。在zk容器内,java是默认安装好的,可用通过java --version来验证:

    2.2 寻找jar包路径

    网上很多文章都提到了:

    • 解析事务日志需要用到类 org.apache.zookeeper.server.LogFormatter
    • 解析快照需要用到类 org.apache.zookeeper.server.SnapshotFormatter

    而这两个类都在 zookeeper-3.5.9.jar 中,使用命令 find / -name "zookeeper-3.5.9.jar 寻找jar包所在路径:

    如上图所示,我们找到了 jar 包保存在 /apache-zookeeper-3.5.9-bin/lib/ 目录下。

    于是,我们进入该目录 cd /apache-zookeeper-3.5.9-bin/lib/

    2.3 尝试查看事务日志文件

    ★ 使用 ls -al /datalog/version-2 查看事务日志文件目录:

    如上图所示,事务日志文件名称是 log.最大的事务id 的格式。

    ★ 运行解析事务日志的命令(注意:执行当前命令的工作目录是jar包所在的目录):

    java -classpath zookeeper-3.5.9.jar:zookeeper-jute-3.5.9.jar:slf4j-api-1.7.25.jar org.apache.zookeeper.server.LogFormatter /datalog/version-2/log.1
    

    打印的事务日志文件的内容如下:

    root@bbeb695a7013:/apache-zookeeper-3.5.9-bin/lib# java -classpath zookeeper-3.5.9.jar:zookeeper-jute-3.5.9.jar:slf4j-api-1.7.25.jar org.apache.zookeeper.server.LogForma
    tter /datalog/version-2/log.1
    SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
    SLF4J: Defaulting to no-operation (NOP) logger implementation
    SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
    ZooKeeper Transactional Log File with dbid 0 txnlog format version 2
    7/1/21, 11:53:24 AM UTC session 0x10001a2a3910000 cxid 0x0 zxid 0x1 createSession 30000
    
    7/1/21, 11:55:46 AM UTC session 0x10001a2a3910000 cxid 0x2 zxid 0x2 closeSession null
    EOF reached after 2 txns.
    
    • session 0x10001a2a3910000:sessionId
    • cxid 0x0:客户端id,会递增的
    • zxid 0x1:事务id,会递增
    • createSession 30000:建立客户端连接,超时时间30s

    2.4 尝试查看快照文件

    ★ 使用 ls -al /data/version-2 查看快照文件目录:

    如上图所示,快照文件名称是 snapshot.最大的事务id 的格式。

    ★ 运行解析快照文件的命令(注意:执行当前命令的工作目录是jar包所在的目录):

    java -classpath zookeeper-3.5.9.jar:zookeeper-jute-3.5.9.jar:slf4j-api-1.7.25.jar org.apache.zookeeper.server.SnapshotFormatter /data/version-2/snapshot.1
    

    解析快照文件成功,打印的内容如下:

    root@bbeb695a7013:/apache-zookeeper-3.5.9-bin/lib# java -classpath zookeeper-3.5.9.jar:zookeeper-jute-3.5.9.jar:slf4j-api-1.7.25.jar org.apache.zookeeper.server.SnapshotFormatter /data/version-2/snapshot.0
    SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
    SLF4J: Defaulting to no-operation (NOP) logger implementation
    SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
    ZNode Details (count=5):
    ----
    /
      cZxid = 0x00000000000000
      ctime = Thu Jan 01 00:00:00 UTC 1970
      mZxid = 0x00000000000000
      mtime = Thu Jan 01 00:00:00 UTC 1970
      pZxid = 0x00000000000000
      cversion = 0
      dataVersion = 0
      aclVersion = 0
      ephemeralOwner = 0x00000000000000
      dataLength = 0
    ----
    /zookeeper
      cZxid = 0x00000000000000
      ctime = Thu Jan 01 00:00:00 UTC 1970
      mZxid = 0x00000000000000
      mtime = Thu Jan 01 00:00:00 UTC 1970
      pZxid = 0x00000000000000
      cversion = 0
      dataVersion = 0
      aclVersion = 0
      ephemeralOwner = 0x00000000000000
      dataLength = 0
    ----
    /zookeeper/config
      cZxid = 0x00000000000000
      ctime = Thu Jan 01 00:00:00 UTC 1970
      mZxid = 0x00000000000000
      mtime = Thu Jan 01 00:00:00 UTC 1970
      pZxid = 0x00000000000000
      cversion = 0
      dataVersion = 0
      aclVersion = -1
      ephemeralOwner = 0x00000000000000
      dataLength = 0
    ----
    /zookeeper/quota
      cZxid = 0x00000000000000
      ctime = Thu Jan 01 00:00:00 UTC 1970
      mZxid = 0x00000000000000
      mtime = Thu Jan 01 00:00:00 UTC 1970
      pZxid = 0x00000000000000
      cversion = 0
      dataVersion = 0
      aclVersion = 0
      ephemeralOwner = 0x00000000000000
      dataLength = 0
    ----
    Session Details (sid, timeout, ephemeralCount):
    

    快照文件,包含某一时刻,每个节点的快照信息。

    参考文档

    • zookeeper 解析和读取快照和事务日志 阅读

    花絮

    1、当classpath中只引用 zookeeper-3.5.9.jar时:

    root@bbeb695a7013:/apache-zookeeper-3.5.9-bin/lib# java -classpath zookeeper-3.5.9.jar org.apache.zookeeper.server.LogFormatter /datalog/version-2/log.1
    Error: Unable to initialize main class org.apache.zookeeper.server.LogFormatter
    Caused by: java.lang.NoClassDefFoundError: org/apache/jute/InputArchive
    

    找不到org.apache.jute中的类。

    2、当classpath中引用 zookeeper-3.5.9.jarzookeeper-jute-3.5.9.jar 时 (使用:分隔多个jar)

    root@bbeb695a7013:/apache-zookeeper-3.5.9-bin/lib# java -classpath zookeeper-3.5.9.jar:zookeeper-jute-3.5.9.jar org.apache.zookeeper.server.LogFormatter /datalog/version
    -2/log.1
    Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
            at org.apache.zookeeper.server.LogFormatter.<clinit>(LogFormatter.java:41)
    Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
            at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
            at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
            at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
            ... 1 more
    

    找不到类org.slf4j.LoggerFactory

  • 相关阅读:
    HDU
    HDU
    HDU
    Weights and Measures (贪心+dp)
    Weights and Measures (贪心+dp)
    HDU-1009-FatMouse' Trade(贪心)
    or2?Scum!(周期性求解)
    希希的多项式(推递推式)
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
  • 原文地址:https://www.cnblogs.com/kendoziyu/p/14980200.html
Copyright © 2020-2023  润新知