故障转移和恢复后的replicaSet db状态

时间:2016-09-16 15:19:56

标签: mongodb mongodb-replica-set

我的mongodb版本是3.2.4。 我有一个带有2个数据库节点和1个仲裁器的replicaSet。 所有数据库在我的客户站点上都运行良好很长时间。有一天,主要数据库因维护而被关闭。大约2个小时后,-the-primary被重新启动,并再次成为主数据库,并且辅助数据库处于回滚状态。 关于上述情况,我有几个问题: 当主数据库第一次被关闭时,如果有数据库条目没有同步到辅助数据库,会发生什么? 当失败的主要再次恢复时,它是否成为主要的方式?在再次成为主数据库之前,它是否与now-primary-was-secondary数据库同步? 在给定最新的主要和辅助数据库状态的情况下,如何在rollback文件夹中恢复丢失的数据? 谢谢和问候。

2 个答案:

答案 0 :(得分:0)

如果要关闭主服务器以进行维护,则必须在主服务器上执行rs.stepDown()命令。这将选择另一个DB节点成为主要节点:

  • 主要步骤,它拒绝写入。在下面的下一个要点完成之前,您的应用程序将收到简短的写入错误。
  • 获得当选的辅助人员将确保在成为主要人员之前已与旧主要同步。这应该在瞬间发生,但如果你有一个写重的应用程序,它可能需要更长的时间。
  • 当旧主服务器重新启动时,如果您将其设为最高优先级,它将成为主服务器。我仍然建议对2个数据节点使用相同的优先级,而不是返回主数据节点。推广其他节点的过程与上面的2个要点完全相同。

如果你做了正确的stepDown,你所处的回滚状态似乎不正常。这是应用回滚的一个很好的链接: https://scalegrid.io/blog/how-to-recover-from-a-mongodb-rollback/

答案 1 :(得分:0)

Rick写了很好的答案,但没有回答你的上一个问题......如果发生回滚,你的dbpath下会有rollback-directory。在该目录中,您可以在特定于数据库列的json文件中找到所有回滚文档。这些文件可以mongoimport回到主要文件......