Mongodb 如果故障服务器从故障转移返回,会发生什么情况?

Mongodb 如果故障服务器从故障转移返回,会发生什么情况?,mongodb,replication,failover,database,Mongodb,Replication,Failover,Database,我将介绍mongodb中的复制过程,它具有自动故障切换的功能。我试着用图片的形式提问 我的问题是,如果故障转移后出现故障的服务器重新联机,会发生什么情况?这似乎是数据库中的常见做法。这部分对我来说是全新的,所以请分享您的建议?在我们开始回答之前,将设置一些背景: 副本集中的每个服务器都维护oplog。它是服务器上发生的更改的日志。这是一个封顶收藏。这意味着它只保留最近的更改 主应具有最新的oplog。每个辅助服务器使用其他服务器的oplog进行自身同步。因此,它获取主副本或其他辅助副本的opl

我将介绍mongodb中的复制过程,它具有自动故障切换的功能。我试着用图片的形式提问


我的问题是,如果故障转移后出现故障的服务器重新联机,会发生什么情况?这似乎是数据库中的常见做法。这部分对我来说是全新的,所以请分享您的建议?

在我们开始回答之前,将设置一些背景:

  • 副本集中的每个服务器都维护oplog。它是服务器上发生的更改的日志。这是一个封顶收藏。这意味着它只保留最近的更改
  • 主应具有最新的oplog。每个辅助服务器使用其他服务器的oplog进行自身同步。因此,它获取主副本或其他辅助副本的oplog来更新自身。它可能会落后太多,即其他二级或主级没有中间日志。这可能是因为oplog的封顶特性。在这种情况下,辅助服务器进行初始同步,即与其他服务器进行完全数据同步 现在来回答你的问题,当它回来的时候,小学的状态是什么。答案将取决于主设备故障前的状态。以下可能是两种情况:

    案例1。即将失败的Primary具有最新的更改。此外,至少有一个二级数据库具有最新的更改。现在主要失败了。具有最新更改的次节点将成为主节点。它将接受mongos或驱动程序的所有更改。现在,如果早些时候的初选回来怎么办。这将是第二次。并将基于上述第2点进行自身同步


    案例2。即将失败的Primary具有最新的更改。所有的二年级学生都落后于一年级学生。现在主要失败了。在这种情况下,新当选的初选将不会有最新的变化。但它假设它有最新的变化。然后它就开始这样做了。现在,如果早期的初级课程回来,它将是次级课程。它将意识到它的oplog既落后又领先。因为在它关闭时发生了变化。因为它有一些更改,而这些更改不会复制到其他服务器上。因此,它将消除使其领先的变化。它将在此过程中使用oplog。这个过程称为回滚。但在回滚之前,它将在系统回滚文件中记录还原的更改。现在它不在前面。但是在其他人后面。并将基于上述第2点进行自身同步。需要注意的是,管理员必须手动应用系统回滚文件中的更改。回滚详细信息可以在以下位置找到:

    很高兴看到,终于有更多的人投票支持迁移MongoDB管理问题,这些问题与编程无关。但是,请投票将它们迁移到dba.stackexchange.com,而不是serverfault.com。服务器将作为辅助服务器返回,并使用新主服务器的oplog进行追赶,如果它具有副本集其余部分不存在的写入,则它将进入回滚scenario@Philipp因为Mongodb中的问题很少,所以我转到stackoverflow。很抱歉,我投票赞成将这个问题迁移到dba。这是正确的,但是它缺少指向外部源的文档链接,例如回滚场景文档等。它也不会将它们放入回滚集合,而是放入磁盘上的文件中