副本集群集中SECONDARY节点上的MongoDB索引-如何删除?

时间:2019-02-08 02:11:17

标签: mongodb mongodb-query mongodb-indexes

场景:

具有一个包含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日志显示它在前台拾取了索引构建并不断运行。我们让它完成。

当前状态:

  • 只有NODE 3(仍为SENODARY)的索引名为'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节点上会带来什么后果?这有多糟?

谢谢!

0 个答案:

没有答案