【问题标题】:How to persist Zookeeper data in a docker setup via a volume?如何通过卷将 Zookeeper 数据保存在 Docker 设置中?
【发布时间】:2019-12-05 18:00:11
【问题描述】:

所以,我正在使用official docker image 在 docker 上的本地环境中设置 Zookeeper。现在,我希望这个 Zookeeper 设置能够通过将 Zookeeper 数据目录作为卷挂载到我的容器中来持久保存节点及其值。

这很简单,但让我感到困惑的是,Zookeeper 在容器内的数据目录位于/data,而数据日志目录位于/datalog。理想情况下,我希望 Zookeeper 将节点和值保存在数据文件夹以及数据日志目录中。但是,我发现虽然 datalog 目录有 log.* 文件中的数据,但 data 目录没有任何与我创建的测试节点相关的数据。

bash-4.4# pwd
/datalog/version-2
bash-4.4# ls
log.1  log.3  log.5  log.8


bash-4.4# pwd
/data/version-2
bash-4.4# ls
bash-4.4# 

我的目标是通过我的docker-compose.yml 中的 Zookeeper 服务实现的 -

volumes:
  - zkdata:/datalog

但这似乎违反直觉,我正在安装事务日志目录而不是实际的数据目录。 Zookeeper 如何以及在哪里实际保存节点数据,我如何才能正确地将其作为卷安装在我的 docker 容器中?

我实际上可以将 ZOO_DATA_LOG_DIR 环境变量设置为 /data 并将其挂载为 docker 卷,但我的问题实际上是关于为什么 Zookeeper 数据为空而数据日志目录不是。

【问题讨论】:

    标签: docker apache-zookeeper


    【解决方案1】:

    您可能应该在 zookeeper 配置中看到 dataDir 路径并将该路径安装在卷中。在我的情况下,zookeeper 配置存在于 /config/zoo.cfg

    dataDir=/data
    dataLogDir=/datalog
    tickTime=2000
    initLimit=5
    syncLimit=2
    autopurge.snapRetainCount=3
    autopurge.purgeInterval=0
    maxClientCnxns=60
    standaloneEnabled=true
    admin.enableServer=true
    server.1=localhost:2888:3888;2181
    

    dataDir 是 zookeeper 存储内存数据库快照的地方,在发生故障时将被引用。

    由于 dataDir 是 /data,所以我将 /data 目录安装在卷中,因此条目将是:

    volumes:
      - zkdata:/data
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-15
      • 1970-01-01
      • 2017-06-23
      • 2021-04-23
      • 2021-11-29
      • 1970-01-01
      • 1970-01-01
      • 2018-07-28
      相关资源
      最近更新 更多