故障转移和恢复后的 replicaSet 数据库状态

replicaSet db status after failover and recover

我的 mongodb 版本是 3.2.4。 我有一个带有 2 个数据库节点和 1 个仲裁器的 replicaSet。 在我的客户站点上,所有数据库 运行 都正常运行了很长时间。有一天,主数据库被关闭进行维护。大约2小时后,the-was-primary被拉回,重新成为primary,secondary db处于Rollback状态。 关于上述场景,我有几个问题: 当主数据库第一次关闭时,如果有数据库条目没有同步到辅助数据库,会发生什么? 当失败的主服务器再次恢复时,它会成为主服务器吗?在再次成为主数据库之前,它是否与 now-primary-was-secondary 数据库同步? 鉴于我最新的主要和次要数据库状态,如何恢复回滚文件夹中丢失的数据? 谢谢和问候。

当您想关闭主服务器进行维护时,您必须在主服务器上执行 rs.stepDown() 命令。这将选择另一个数据库节点成为主节点:

  • 主要降级,它拒绝写入。在完成下面的下一个要点之前,您的应用程序将出现简短的写入错误。
  • Secondary that gets elected will make sure it has synced up with the old primary before becoming a primary itself.这应该会在瞬间发生,但如果您有一个写入繁重的应用程序,则可能需要更长的时间。
  • 当旧的主节点重新启动时,如果您赋予它最高优先级,它将成为主节点。我仍然建议 2 个数据节点具有相同的优先级,而不是 return 主节点。推广另一个节点的过程与上面的2个要点完全相同。

如果您进行适当的 stepDown,您所处的回滚状态似乎并不正常。这是应用回滚的好方法 link: https://scalegrid.io/blog/how-to-recover-from-a-mongodb-rollback/

Rick 回答得很好,但没有回答你最后一个问题...如果发生回滚,你的数据库路径下会有回滚目录。在该目录中,您可以在特定于数据库列的 json 文件中找到所有回滚文档。这些文件可以 mongoimport'ed 回主...