因此,我正在使用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>
答案 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