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

时间:2013-12-26 13:05:15

标签: mongodb replication failover database

我打算在mongodb中进行复制过程,它具有自动故障转移的功能。我试图以图片格式提出问题。

enter image description here

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

1 个答案:

答案 0 :(得分:3)

在我们跳到答案之前,将设置一些背景:

  1. 副本集中的每个服务器都维护oplog。它是服务器上发生更改的日志。这是一个上限的集合。这意味着它只保留最近的变化。
  2. 主要应该有最新的oplog。每个辅助节点使用其他服务器的oplog同步。因此它获取主要或其他辅助的oplog来更新自己。它可能会落后太多,即其他辅助或主要没有中间日志。这可能是因为oplog的上限性质。在这种情况下,辅助执行初始同步,即与其他服务器的完全数据同步。
  3. 现在回答你的问题,它回来时的主要状态是什么。答案将取决于失败前的主要状态。以下可能是两种情况:

    案例1.初级即将失败,具有最新的变化。此外,至少有一个辅助设备有最新的更改。现在主要失败。具有最新变化的次要将成为主要的。它将从mongos或驱动程序中进行所有更改。现在如果早期的主要回来怎么办?这将是次要的。并将根据上述第2点进行同步。

    案例2.初级即将失败,具有最新的变化。并且所有次要因为几次变化而落后于初级。现在主要失败。在这种情况下,新当选的主要人员不会有最新的更改。但它假设它有最新的变化。并且它开始表现得如此。现在,如果早期的主要回来,它将是次要的。它会意识到它的oplog也落后了。落后是因为变化发生了。提前,因为它有一些未在其他服务器上复制的更改。因此,它将消除使其领先的变化。它将使用oplog进行此过程。此过程称为回滚。但在回滚之前,它将记录系统回滚文件中的还原更改。现在它没有领先。但落后于其他人。并将根据上面提到的第2点进行自我同步。需要注意的是,管理员必须手动应用系统回滚文件中的更改。回滚详细信息可在以下位置找到:http://docs.mongodb.org/manual/core/replica-set-rollbacks/