Mongo DB - 主节点从崩溃中恢复后同步

时间:2016-02-02 04:21:42

标签: mongodb

我是mongoDB的新手,在阅读一些教程时我心里想到了一个问题,

如果我使用3个副本节点A,B,C。 A执行主要角色,数据在2秒后同步到其他2个节点。现在,主节点A发生故障,节点B担任主节点角色。

一段时间后,节点A恢复并充当辅助节点。 现在,当节点A充当主要数据时,未同步的数据(最后2秒数据)会发生什么?

基本上我的问题是,辅助节点是否也将数据发送到主节点以进行同步,如果是,则在上述情况下,当节点B充当主节点并且某些文档被删除但节点A中存在相同的数据时那个数据会在最后2秒更新会发生什么?

谢谢和最诚挚的问候, Kitty的

1 个答案:

答案 0 :(得分:0)

这不完全是你问的,但应该给你一个想法, Mongo Replication Doc

Mongodb rollback Doc

  

在某些情况下,副本集中的两个节点可能会暂时认为它们是主要节点,但最多其中一个节点将能够用{w:"多数"写关注。可以完成{w:"多数" } writes是当前的主节点,而另一个节点是以前的主节点,尚未识别其降级,通常是由于网络分区。发生这种情况时,连接到前一个主服务器的客户端可能会观察过时数据,尽管已请求读取首选项主要,并且对前一个主数据库的新写入最终将回滚。

     

当成员在故障转移后重新加入其副本集时,回滚将恢复前一主节点上的写入操作。仅当主服务器已接受在辅助服务器降级之前辅助服务器未成功复制的写操作时,才需要进行回滚。当主服务器重新加入集合作为辅助服务器时,它会恢复或“回滚”其写入操作,以保持数据库与其他成员的一致性。

     

MongoDB试图避免回滚,这应该是罕见的。发生回滚时,通常是网络分区的结果。辅助服务器无法跟上前主服务器的操作吞吐量,增加了回滚的大小和影响。

     

如果写入操作在主要步骤降低之前复制到副本集的另一个成员,并且该成员仍然可用并且可以访问大多数副本集,则不会发生回滚。