【发布时间】:2011-09-17 15:48:42
【问题描述】:
我已经读过复制数据目录是可行的。但是,这是日志和快照的组合。人们如何备份 zookeeper 基础设施?出口 ?倾倒 ?自定义脚本?最佳做法是什么?
【问题讨论】:
标签: scalability apache-zookeeper
我已经读过复制数据目录是可行的。但是,这是日志和快照的组合。人们如何备份 zookeeper 基础设施?出口 ?倾倒 ?自定义脚本?最佳做法是什么?
【问题讨论】:
标签: scalability apache-zookeeper
有一个非常棒的工具叫做zk-shell,它可以用Zookeeper 做很多事情。它有一个mirror 命令,可以递归地将整个 Zookeeper 树复制到 Zookeeper 或本地 JSON 文件。
来源和文档:https://github.com/rgs1/zk_shell
在 Centos 7 上安装:
yum install python2-pip
pip install zk_shell
将 zookeeper 树备份到本地 JSON 文件 /tmp/zookeeper-backup.json 的示例:
zk-shell localhost:2181 --run-once 'mirror / json://!tmp!zookeeper-backup.json/'
【讨论】:
我只是有同样的要求,发现大多数可用选项要么不起作用,要么需要大量定制。
我发现的最佳选择是 Guano,它是一个小型 Java 应用程序,它从声明的节点开始递归地访问树中的每个节点并将其转储到匹配的目录结构中,因此您最终会得到一个由普通文件组成的目录结构结构类似于实际的树。
您还可以通过要求它从该树中的任何点递归还原来还原这些备份。我认为这对于备份和探索都非常好。例如,我立即从根目录使用 ack 来查找所有包含我关心的条目的文件。
这很容易扩展到适当的备份,只需将其作为 cron 作业并添加 zip 步骤将整个备份压缩到存档中并处理所需的任何轮换。
该工具有一些缺点:
注意:我制作了自己的 Zookeeper 编辑器,因为我在寻找一个可以满足我需求的工作时遇到了类似的问题。根据您阅读本文的时间,https://github.com/feldoh/JZookeeperEdit 也可能具有导出功能。第 13/14 期涵盖了这个计划中的功能。
【讨论】:
Netflix 为此提供了一个名为exhibitor 的解决方案。这是一个“用于实例监控、备份/恢复、清理和可视化的 ZooKeeper 协同流程。”
【讨论】:
一旦 Zookeeper 确定它有足够的事务并且每个新快照都完全取代旧快照,它就会写入快照。所以最新的快照+快照时的事务日志就足够恢复到当前状态了。为了使计算更容易,您可以简单地备份最后 3 个快照(以防最新快照损坏)和最早快照对应的时间戳中的事务日志。以下链接包含更多详细信息。
【讨论】:
3.4.0 开始,您可以使用autopurge.snapRetainCount 和autopurge.purgeInterval 配置指令来保持您的快照和事务日志干净。现在你只需要一个 cronjob 来备份数据目录 (dataDir)。
我们正在修改 zkConfig.py 脚本,该脚本是您安装 zookeeper 时的贡献项目。它允许您通过 python 脚本与 zookeeper 交互。
我们正在修改脚本,以便每晚轻松转储和保存全部内容,然后备份文件。虽然我也很想听听其他人对此的解决方案。
【讨论】: