【问题标题】:Is a ZooKeeper snapshot file enough to restore state?ZooKeeper 快照文件是否足以恢复状态?
【发布时间】:2015-01-26 23:19:41
【问题描述】:

我正在学习 ZooKeeper 并查看备份存储在 ZooKeeper 中的数据的选项。 ZooKeeper 写入两个数据文件,快照和事务日志。人们经常提到快照是“模糊的”,需要在它们上重放事务日志以获得最新状态。

在观察者的情况下,没有事务日志被持久化到磁盘。如果我要获取观察者(或没有事务日志的领导者/跟随者)写入的快照,并将其放入一个新的独立 ZooKeeper 中,ZooKeeper 的状态是否可以保证与快照写入磁盘时的状态相同?

换句话说,要将 ZooKeeper 备份到其当前状态,您需要快照和事务日志。如果我满足于只备份到拍摄快照的时间,那么仅快照就足够了吗?

【问题讨论】:

    标签: apache-zookeeper


    【解决方案1】:

    没有。快照文件不足以保证返回到先前的状态。事实上,快照文件甚至可能不代表树在任何时间点的状态。

    来自 O'Reilly ZooKeeper 的书:

    让我们通过一个例子来说明这一点。假设数据树只有两个 znode:/z 和 /z'。最初,/z 和 /z' 的数据都是整数 1 现在考虑以下步骤顺序:

    1. 开始快照。
    2. 序列化并将 /z = 1 写入快照。
    3. 设置/z的数据为2(事务T)。
    4. 设置/z'的数据为2(事务Tʹ)。
    5. 序列化并将 /z' = 2 写入快照。

    此快照包含 /z = 1 和 /z' = 2。但是,从来没有一个时间点两个 znode 的值都是这样的。不过,这不是问题,因为服务器会重放事务。它使用快照启动时已提交的最后一个事务标记每个快照 - 称之为 TS。如果服务器最终加载快照,它会重放事务日志中 TS 之后的所有事务。在这种情况下,它们是 T 和 Tʹ。在快照之上重放 T 和 Tʹ 后,服务器得到 /z = 2 和 /z' = 2,这是一个有效状态。

    您可能会发现您的 ZooKeeper 数据结构可以接受模糊快照,但如果您想保证有效的树,请同时获取快照和事务日志。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-19
      • 2021-08-29
      • 1970-01-01
      • 1970-01-01
      • 2016-12-18
      • 2023-03-27
      • 2014-10-08
      • 2015-07-07
      相关资源
      最近更新 更多