因此,我在本地环境中使用official docker image在docker上设置Zookeeper。现在,我希望这个Zookeeper设置能够通过将Zookeeper数据目录作为卷挂载到我的容器中来持久化节点及其值。
这很简单,但让我困惑的是,Zookeeper在容器中的数据目录在/data,而数据日志目录在/datalog。理想情况下,除了datalog目录之外,我还希望Zookeeper持久化data文件夹中的节点和值。但是,我发现虽然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容器中?
我实际上可以将Zookeeper环境变量设置为/data并将其挂载为docker卷,但我的问题是为什么Zookeeper数据为空,而ZOO_DATA_LOG_DIR目录不为空。
发布于 2019-12-05 18:00:12
也许您应该在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;2181dataDir是zookeeper存储内存中数据库快照的位置,在失败的情况下将引用这些快照。
由于dataDir为/data,因此我在卷中安装了/data目录,因此条目为:
volumes:
- zkdata:/datahttps://stackoverflow.com/questions/52378898
复制相似问题