我的 mongodb 版本是 3.2.4。我有一个具有 2 个数据库节点和 1 个仲裁器的副本集。在我的客户站点上,所有数据库都运行良好很长时间。有一天,主数据库因维护而停机。大约 2 小时后,the-was-primary 重新启动,并再次变为 primary,并且辅助 db 处于 Rollback 状态。关于上述场景,我有几个问题:当第一次关闭主数据库时,如果有数据库条目没有同步到辅助数据库,会发生什么?当失败的主节点再次恢复时,它是否会成为主节点?在再次成为主数据库之前,它是否与 now-primary-was-secondary 数据库同步?鉴于我最新的主数据库和辅助数据库状态,如何恢复回滚文件夹中丢失的数据?谢谢并恭祝安康。
问问题
261 次
2 回答
0
当您想关闭主节点进行维护时,您必须在主节点上执行 rs.stepDown() 命令。这将选择另一个数据库节点成为主节点:
- Primary 退出,它拒绝写入。在完成下面的下一个要点之前,您的应用程序将出现简短的写入错误。
- Secondary that gets elected will make sure it has synced up with the old primary before becoming a primary itself. 这应该在瞬间发生,但如果您有一个写入繁重的应用程序,则可能需要更长的时间。
- 当旧的主节点恢复时,如果您给予它最高优先级,它将成为主节点。我仍然建议对 2 个数据节点具有相同的优先级,而不是返回主节点。提升另一个节点的过程与上面的 2 个要点完全相同。
如果您进行适当的降压,您所处的回滚状态似乎并不正常。这是应用回滚的一个很好的链接: https ://scalegrid.io/blog/how-to-recover-from-a-mongodb-rollback/
于 2016-09-16T19:03:48.303 回答
0
里克写了很好的答案,但没有回答你的最后一个问题......如果发生回滚,你的dbpath下会有回滚目录。在该目录中,您可以在特定于数据库列的 json 文件中找到所有回滚的文档。这些文件可以被 mongoimport'ed 回主...
于 2016-09-17T15:12:55.750 回答