如何通过卷将Docker设置中的Zookeeper数据持久化?

时间:2018-09-18 04:21:28

标签: docker apache-zookeeper

因此,我正在使用official docker image在docker上的本地环境中设置Zookeeper。现在,我想要的Zookeeper设置是通过将Zookeeper数据目录作为卷安装在我的容器中,从而能够持久保存节点及其值。

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

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数据为空而不是datalog目录为<。 / p>

1 个答案:

答案 0 :(得分:0)

可能您应该在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