我一直在阅读文档,根据我的理解,我可以看到一个仍然可能发生回滚的场景:
- 写入确认日志已写入磁盘的主节点
- 大多数从节点确认写入但不写入磁盘
- 整个集群断电
- 由于某种原因,主电源在恢复供电后无法启动备份
- 次要角色担任主要角色
- 原来的primary终于启动了,作为secondary重新加入集合并回滚
这种情况是否合理?
最佳答案
如果其他成员在获取命令和写入磁盘之间发生电源故障,这可能是回滚的合理情况。
在这种情况下,正如您所指出的,主节点无法启动备份,因此一旦备份,将包含该集合的其余部分无法验证的操作,从而导致回滚。
还需要注意的是,作为一个曲线球,如果主 没有关闭,那么它会返回一个成功的写入,并且应用程序不会知道集合已经消失下来,他们的 {w: majority}
没有写入磁盘。当然,这是一个边缘案例。
关于mongodb - 在 J=1 和 W=Majority 的 MongoDB 副本集上是否仍然可以回滚?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22410831/