Elasticsearch 分片分配在节点关闭后不起作用

Elasticsearch shard allocation isn't working after a node shuts down

我设置了一个具有 4 个节点的 ES 6.8.6 集群:2 master/data、1 个主节点、1 个数据节点。 2 个节点在同一个网络中,另外两个在不同的网络中(所有节点之间的连接都有效)。我生成一些索引以便在节点关闭时测试复制

当我关闭创建索引的节点时,在日志中看到这条消息:

scheduling reroute for delayed shards in [59.6]s

但几分钟后,索引保持 UNASSINGED/red。分片大小为 47 MB​​,cluster.routing.allocation.enable 的值为 all。膨胀我重新启动节点,甚至重新分配索引到另一个节点,但没有任何反应。

我想知道这种行为的根本原因。

你有两个数据节点,你的索引除了主分片外还有两个副本(所以同一个分片的三个副本)。不能将一个分片分配给已经包含相同分片的节点,这就是下面从 GET _cluster/allocation/explain 调用中告诉您的错误:

    {
      "decider": "same_shard",
      "decision": "NO",
      "explanation": "the shard cannot be allocated to the same node on which a copy of the shard already exists [[liferay-20099][0], node[i_Q5sVuES0iRhwNSn4LR3w], [P], s[STARTED], a[id=d4bpWi5rQA6OxfeAdywqrg]]"
    },

您可以通过两种方式解决问题:

一个。您可以添加一个新节点(因为这就是您关闭其他节点时导致问题的原因),然后当第三个节点启动时重新 运行 POST _cluster/reroute?retry_failed.

乙。或者您可以通过 运行 执行以下命令

简单地为您的索引删除一个副本
PUT liferay-*/_settings
{
  "index.number_of_replicas": 1
}