在我的mongodb replicaSet中,我发现其中一个辅助节点已关闭,当我检查db.log时,我发现了这个:
I REPL [rsBackgroundSync] repl: old cursor isDead, will initiate a new one
I REPL [ReplicationExecutor] syncing from: primary-node-ip:portNum
I REPL [SyncSourceFeedback] replset setting syncSourceFeedback to primary-node-ip:portNum
I REPL [rsBackgroundSync] replSet our last op time fetched: Nov 25 05:41:01:85
I REPL [rsBackgroundSync] replset source's GTE: Nov 25 05:41:02:1
F REPL [rsBackgroundSync] replSet need to rollback, but in inconsistent state
I REPL [rsBackgroundSync] minvalid: 5a1891f0:187 our last optime: 5a1891ed:28
I - [rsBackgroundSync] Fatal Assertion 18750
I - [rsBackgroundSync]
***aborting after fassert() failure
我用谷歌搜索,但是没有找到任何页面来清楚地得到这个18750致命的断言。 mongoDB版本是3.0
答案 0 :(得分:1)
您没有说出您正在使用的MongoDB版本,但该特定断言可以追溯到MongoDB 3.0系列。
特别是,断言的原因会打印在您发布的日志中:
F REPL [rsBackgroundSync] replSet need to rollback, but in inconsistent state
此消息由源代码的这一部分打印:https://github.com/mongodb/mongo/blob/v3.0/src/mongo/db/repl/rs_rollback.cpp#L837-L841
该消息的含义是节点需要执行回滚,但它发现它无法执行此操作,因为它处于不一致状态(例如,无法执行回滚)。
此问题的一个可能原因是副本集与应用程序之间以及副本集节点本身之间的网络连接不可靠,尽管一个部署与另一个部署之间的确切原因可能不同。
有关回滚的详细信息,请参阅Rollbacks During Replica Set Failover。
不幸的是,除了执行断言节点的重新同步过程之外,在这种情况下可以做的事情并不多。有关如何操作的详细信息,请参阅Resync a Member of a Replica Set。