我正在学习ZooKeeper并查看备份存储在ZooKeeper中的数据的选项。 ZooKeeper写入两个数据文件,即快照和事务日志。人们经常提到快照是模糊的"并且需要在它们上面重放事务日志以获得最新状态。
对于Observers,没有事务日志持久保存到磁盘。如果我要拍摄观察者(或没有事务日志的领导/关注者)写的快照,并将其放入一个新的独立ZooKeeper中,那么ZooKeeper的状态将保证与快照时的状态相同被写入磁盘?
换句话说,要将ZooKeeper备份到其当前状态,您需要快照和事务日志。如果我满足于仅在快照拍摄时进行备份,那么快照是否足够?
答案 0 :(得分:4)
没有。快照文件不足以保证返回先前的状态。实际上,快照文件甚至可能不代表任何时间点树的状态。
来自O'Reilly ZooKeeper的书:
让我们通过一个例子来说明这一点。假设数据树只有两个znode:/ z和/ z'。最初,/ z和/ z'的数据都是整数1现在考虑以下步骤序列:
这个快照包含/ z = 1和/ z'= 2.但是,从来没有一个时间点,两个znode的值都是这样的。但这不是问题,因为服务器重放事务。它使用快照启动时提交的最后一个事务标记每个快照 - 将其称为TS。如果服务器最终加载快照,它将重放TS之后的事务日志中的所有事务。在这种情况下,它们是T和T'。在快照上重放T和T'后,服务器获得/ z = 2和/ z'= 2,这是一个有效状态。
您可以在ZooKeeper数据结构中找到模糊快照,但如果您想保证有效的树可以同时获取快照和事务日志。