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

问题描述 投票:0回答:1

场景:

拥有一个包含 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 日志显示它在前台获取了索引构建并继续运行。我们让它结束。

目前状态:

  • 只有 NODE 3(仍然是 SECONDARY)的索引名为
    '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 节点上,会产生什么后果?这有多糟糕?

谢谢!

mongodb mongodb-query mongodb-indexes
1个回答
0
投票

我在 3 个节点的 mongo 数据库中创建索引时也面临同样的问题。

有更新吗?

© www.soinside.com 2019 - 2024. All rights reserved.