【问题标题】:How do you backup Zookeeper?你如何备份 Zookeeper?
【发布时间】:2011-09-17 15:48:42
【问题描述】:

我已经读过复制数据目录是可行的。但是,这是日志和快照的组合。人们如何备份 zookeeper 基础设施?出口 ?倾倒 ?自定义脚本?最佳做法是什么?

【问题讨论】:

    标签: scalability apache-zookeeper


    【解决方案1】:

    有一个非常棒的工具叫做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/'
    

    【讨论】:

      【解决方案2】:

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

      我发现的最佳选择是 Guano,它是一个小型 Java 应用程序,它从声明的节点开始递归地访问树中的每个节点并将其转储到匹配的目录结构中,因此您最终会得到一个由普通文件组成的目录结构结构类似于实际的树。

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

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

      该工具有一些缺点:

      1. 在 Github 上,由于缺少一些导入,原始版本无法编译。有几个人制作了解决此问题的 PR 或分叉,例如 https://github.com/feldoh/guano 这是我的分叉,我还改进了文档。我现在还预编译了 jar,并将二进制文件推送到 https://bintray.com/feldoh/Guano/guano
      2. 它只转储数据,这有利于探索,但会丢失 mTime 或数据版本等元数据。诚然,恢复可能应该算作更新,所以我不能说它真的是一件坏事,但它不是真正的时间点恢复。

      注意:我制作了自己的 Zookeeper 编辑器,因为我在寻找一个可以满足我需求的工作时遇到了类似的问题。根据您阅读本文的时间,https://github.com/feldoh/JZookeeperEdit 也可能具有导出功能。第 13/14 期涵盖了这个计划中的功能。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • Netflix Exhibitor 是 Zookeeper 的主管,并且善于维护整体。但是它不处理快照备份-仅处理事务日志-因此您只能一项一项地还原事务,而不是一次还原整个数据。对于具有大量持久(非临时)节点的 zk 数据存储来说,这不是一个合适的解决方案。见这里:mail-archives.apache.org/mod_mbox/zookeeper-user/201307.mbox/…
        【解决方案4】:

        一旦 Zookeeper 确定它有足够的事务并且每个新快照都完全取代旧快照,它就会写入快照。所以最新的快照+快照时的事务日志就足够恢复到当前状态了。为了使计算更容易,您可以简单地备份最后 3 个快照(以防最新快照损坏)和最早快照对应的时间戳中的事务日志。以下链接包含更多详细信息。

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

        【讨论】:

        • 从版本3.4.0 开始,您可以使用autopurge.snapRetainCountautopurge.purgeInterval 配置指令来保持您的快照和事务日志干净。现在你只需要一个 cronjob 来备份数据目录 (dataDir)。
        【解决方案5】:

        我们正在修改 zkConfig.py 脚本,该脚本是您安装 zookeeper 时的贡献项目。它允许您通过 python 脚本与 zookeeper 交互。

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

        【讨论】:

        • zkConfig.py 还存在吗?谷歌搜索似乎没有出现任何内容。
        猜你喜欢
        • 2018-05-27
        • 1970-01-01
        • 2010-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-15
        • 2016-05-19
        • 2011-04-26
        相关资源
        最近更新 更多