作者回复: > 1、snapshot的话,可以理解为是数据库里面的全量备份吗? 是数据库里面的全量备份。 > 这个触发的时机都有哪些呢,是否是定期的? snapCount控制生成快照的频率,当日志文件里面的日志记录数大于snapCount / 2 + r.nextInt(snapCount/2)时生成一个快照。细节可以参见SyncRequestProcessor.java的代码。 > 如果配置pure事务日志的时候,清除事务日志的时候,会触发snapshot吗? 不会。但是保证数据恢复需要的快照不会被清除掉。 > 2、snapshot的保存有什么策略吗?是否系统运行很久后,snapshot会膨胀得很大(存在多个文件)如何去管理呢? autopurge.snapRetainCount控制保留多少个快照,autopurge.purgeInterval控制多长时间进行一次清理。如果autopurge.purgeInterval设置成了0,需要手动使用zkCleanup.sh进行清理。 > 3、snapshot是否可以用来做新服务器的数据恢复?比如我有五个节点的集群,现在坏了3个,还剩2个,希望再加3个,新增的3个节点,如何才能保证与剩余2个节点的数据一致,是通告依次动态添加节点来让zookeeper进行同步刷新。还是说,可以自己从剩余的2个节点中拷贝数据和事务日志,让新节点从快照和事务日志中恢复数据呢? 快照的用处之一就是用来做新服务器和leader节点之间的同步。如果剩下的两个节点还是形成了一个运行的ensemble,依次动态添加节点就行了。ZooKeeper会自动进行新节点和leader节点之前的同步。如果新节点落后leader节点不多,就会只从leader节点接收日志记录。否则的话,先从leader节点接收一个快照,再接收后续日志记录。
作者回复: organic.apache.zookeeper.data包里面的代码是由zookeeper.jute文件生成的。
作者回复: 使用的Darcula主体。
作者回复: 1. 网络原因导致ZooKeeper节点互相连不上。 2. 多个ZooKeeper节点的失败。