mongodb - MongoDB 可以管理超过 300 MB 的流数据的回滚过程吗?

标签 mongodb huge-pages

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

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

 replSet syncThread: replSet too much data to roll back

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

感谢您的回答。

最佳答案

原因

页面Rollbacks During Replica Set Failover状态:

A rollback is necessary only if the primary had accepted write operations that the secondaries had not successfully replicated before the primary stepped down. When the primary rejoins the set as a secondary, it reverts, or “rolls back,” its write operations to maintain database consistency with the other members.

和:

When a rollback does occur, it is often the result of a network partition.

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

  1. 您有一个主-辅助-辅助的 3 节点副本集设置。
  2. 存在网络分区,将当前主节点和辅助节点分开。
  3. 两个辅助节点看不到前一个主节点,因此选择其中一个作为新的主节点。具有副本集感知能力的应用程序现在正在写入新的主数据库。
  4. 但是,在旧主数据库意识到无法看到该集的其余部分并下台之前,一些写入不断进入旧主数据库。

上面第 4 步中写入旧主数据库的数据是回滚的数据,因为在一段时间内,它充当“假”主数据库(即,“真正”主数据库应该是步骤 3) 中选出的次要对象

修复

如果有more than 300 MB of data to be rolled back,MongoDB将不会执行回滚。您看到的消息(replSet Too much data to roll back)意味着您遇到了这种情况,并且必须将 rollback 目录保存在节点的下>dbpath,或执行初始同步。

防止回滚

使用 w: 大多数 配置您的应用程序(请参阅 Write ConcernWrite Concern for Replica Sets )将防止回滚。请参阅Avoid Replica Set Rollbacks了解更多详情。

关于mongodb - MongoDB 可以管理超过 300 MB 的流数据的回滚过程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45784033/

相关文章:

spring - Grails MongoDB 无法在 Tomcat 上运行应用程序

javascript - Mongodb 中包含位置信息的文档

python - 命令游标的对象不可订阅

linux - 如何将 Linux hugetlbfs 用于文件的共享内存映射?

c - 使物理地址区域中的虚拟地址连续如何提高性能?

python - 将 pull_all 和 push_all 与 python/mongoengine 一起使用

mongodb - 无法在mapreduce程序中使用数组

Windows 大页面支持 2MB 以外的吗?

linux-kernel - 在内核模块中分配大页面

linux - 使用大页面映射编写映射文件