2

我正在处理 MongoDB 的回滚过程。问题是大数据的回滚可能大于 300 MB 或更多。

这个问题有什么解决办法吗?错误日志是

 replSet syncThread: replSet too much data to roll back

在官方 MongoDB 文档中,我看不到解决方案。

感谢您的回答。

4

1 回答 1

3

原因

副本集故障转移期间的回滚页面指出:

仅当主节点已接受在主节点退出之前辅助节点未成功复制的写入操作时,才需要回滚。当主要作为次要重新加入集合时,它会恢复或“回滚”其写入操作以保持与其他成员的数据库一致性。

和:

当回滚确实发生时,它通常是网络分区的结果。

换句话说,回滚场景通常是这样发生的:

  1. 您有一个 3 节点副本集设置的主要-次要-次要。
  2. 有一个网络分区,将当前的主要和次要分开。
  3. 两个从节点看不到之前的主节点,并选择其中一个作为新的主节点。具有副本集意识的应用程序现在正在写入新的主节点。
  4. 然而,在它意识到它看不到集合的其余部分并退出之前,一些写入继续进入旧的主节点。

上面步骤4中写入旧主的数据是回滚的数据,因为在一段时间内,它充当了“ false”主要在步骤 3)

修复

如果要回滚的数据超过 300 MB, MongoDB 将不会执行回滚。您看到的消息 ( replSet too much data to roll back) 表示您遇到了这种情况,并且必须将rollback目录保存在节点的 下dbpath,或者执行初始同步。

防止回滚

w: majority使用(请参阅Write ConcernWrite Concern for Replica Sets )配置您的应用程序将防止回滚。有关详细信息,请参阅避免副本集回滚。

于 2017-08-21T00:45:56.323 回答