场景:
拥有一个包含 3 个节点的 MongoDB 复制集集群。在发出索引构建命令之前状态如下: 节点 1:次要 节点 2:次要 节点 3:主要
在第 1 时刻,在节点 3(主节点)上发出命令来创建索引:
db.scores.createIndex({member_id: 1, metric_name: 1, score_id: 1, "writes.k": 1}, {background: true});
索引构建在后台模式下运行了大约 2 小时 17 分钟,之后我不小心在 SSH 会话中按了 CTRL+C 并终止了进程。此后它在后台继续运行几分钟(我可以在 Kibana 日志中看到),但随后停止了。由于
mongod
在 NODE 3 上创建了锁,因此必须在运行 mongod
的 NODE 3(PRIMARY)中重新启动 docker 容器。由于重启,集群中的其他两个节点选举 NODE 1 作为新的 PRIMARY。当 NODE 3 恢复正常时,我无法连接到 mongo
shell,但 Kibana 日志显示它在前台获取了索引构建并继续运行。我们让它结束。
目前状态:
'member_id_1_metric_name_1_score_id_1_writes.k_1'
。尝试删除节点 3 上的索引出现错误:
SECONDARY>
db.scores.dropIndex('member_id_1_metric_name_1_score_id_1_writes.k_1')
{
"ok" : 0,
"errmsg" : "not master",
"code" : 10107,
"codeName" : "NotMaster"
}
尝试删除节点 1(主节点)上的索引时出现错误:
db.scores.dropIndex('member_id_1_metric_name_1_score_id_1_writes.k_1')
{
"nIndexesWas" : 4,
"ok" : 0,
"errmsg" : "index not found with name [member_id_1_metric_name_1_score_id_1_writes.k_1]",
"code" : 27,
"codeName" : "IndexNotFound"
}
该怎么办?有哪些选项可以删除此索引并从新的主节点(节点 1)再次尝试?如果该索引像这样放置且仅存在于副本集中的一个 SECONDARY 节点上,会产生什么后果?这有多糟糕?
谢谢!
我在 3 个节点的 mongo 数据库中创建索引时也面临同样的问题。
有更新吗?