场景:
具有一个包含3个节点的MongoDB副本集集群。在发出索引构建命令之前,状态如下: 节点1:中学 节点2:中学 节点3:主要
在第1时刻,在NODE 3(PRIMARY)上发出命令以创建索引:
db.scores.createIndex({member_id: 1, metric_name: 1, score_id: 1, "writes.k": 1}, {background: true});
索引构建在后台模式下运行了大约2h17min,此后,我不小心在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'
。尝试删除NODE 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"
}
该怎么办?有哪些选项可以删除该索引并从新的PRIMARY(节点1)中再次尝试?像这样设置索引并仅出现在副本集中的一个SECONDARY节点上会带来什么后果?这有多糟?
谢谢!