你如何备份Zookeeper?

时间:2011-06-18 05:43:52

标签: scalability apache-zookeeper

我已经读过复制数据目录会起作用。但是,这是日志和快照的组合。人们如何备份zookeeper基础设施?出口 ?转储?自定义脚本?什么是最佳实践?

5 个答案:

答案 0 :(得分:15)

Zookeeper在确定它有足够的事务并且每个新快照完全取代旧的快照后写入快照。因此,从快照时间开始的最新快照+事务日志足以恢复到当前状态。为了使计算更容易,您可以简单地备份最后3个快照(如果最新快照损坏)和事务日志来自与最早快照相对应的时间戳。以下链接有更多细节。

  1. http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_dataFileManagement
  2. http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance

答案 1 :(得分:3)

我只是有相同的要求,发现大多数可用选项要么不起作用,要么需要大量定制。

我找到的最佳选择是Guano,这是一个小型Java应用程序,从声明的节点开始递归访问树中的每个节点,并将其转储到匹配的目录结构中,因此最终得到了普通文件的目录结构结构就像实际的树。

您还可以通过要求从该树中的任何点递归还原来还原这些备份。我认为这对于备份和探索都非常好。例如,我立即使用root中的ack来查找所有带有我关心的条目的文件。

这很容易扩展到适当的备份,只需将其作为一个cron作业并添加一个zip步骤将整个备份压缩到一个存档中,并处理所需的任何轮换。

该工具有一些缺点:

  1. 由于缺少一些导入,因此它在Github上显示原始版本无法编译。有几个人已经制定了解决这个问题的PR或分叉,例如https://github.com/feldoh/guano这是我的分支,其中我也改进了文档。我现在还预先编译了jar,并将二进制文件推送到https://bintray.com/feldoh/Guano/guano
  2. 它只转储数据,这有利于探索,但会丢失元数据,如mTime或数据版本。不可否认,恢复可能应该算作更新,所以我不能说它真的是一件坏事,但它不是真正的时间点恢复。
  3. 注意:我已经制作了自己的Zookeeper编辑器,因为我遇到了类似的问题,找到了其中一个有效并满足我需求的问题。根据您阅读的时间https://github.com/feldoh/JZookeeperEdit,也可能具有导出功能。问题13/14涵盖了此计划的功能。

答案 2 :(得分:3)

Netflix为此提供了一个名为exhibitor的解决方案。它是" ZooKeeper协同进程,用于实例监控,备份/恢复,清理和可视化。"

答案 3 :(得分:2)

有一个非常好的工具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文件的示例:

zk-shell localhost:2181 --run-once 'mirror / json://!tmp!zookeeper-backup.json/'

答案 4 :(得分:0)

我们正在修改zkConfig.py脚本,这是一个在安装zookeeper时提供的项目。它允许您通过python脚本与zookeeper交互。

我们正在修改脚本以便每晚轻松转储和保存整个内容,然后备份文件。虽然我很想听听其他人对此的解决方案。