我正在处理 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.
换句话说,回滚场景通常是这样发生的:
- 您有一个主-辅助-辅助的 3 节点副本集设置。
- 存在网络分区,将当前主节点和辅助节点分开。
- 两个辅助节点看不到前一个主节点,因此选择其中一个作为新的主节点。具有副本集感知能力的应用程序现在正在写入新的主数据库。
- 但是,在旧主数据库意识到无法看到该集的其余部分并下台之前,一些写入不断进入旧主数据库。
上面第 4 步中写入旧主数据库的数据是回滚的数据,因为在一段时间内,它充当“假”主数据库(即,“真正”主数据库应该是步骤 3) 中选出的次要对象
修复
如果有more than 300 MB of data to be rolled back,MongoDB将不会执行回滚。您看到的消息(replSet Too much data to roll back
)意味着您遇到了这种情况,并且必须将 rollback
目录保存在节点的下>dbpath
,或执行初始同步。
防止回滚
使用 w: 大多数
配置您的应用程序(请参阅 Write Concern 和 Write Concern for Replica Sets )将防止回滚。请参阅Avoid Replica Set Rollbacks了解更多详情。
关于mongodb - MongoDB 可以管理超过 300 MB 的流数据的回滚过程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45784033/