ElasticSearch:未分配的碎片,如何修复?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (29)

我有一个带有4个节点的ES集群:

number_of_replicas: 1
search01 - master: false, data: false
search02 - master: true, data: true
search03 - master: false, data: true
search04 - master: false, data: true

我不得不重新启动search 03,当它返回时,它重新加入集群没有问题,但是留下了7个未分配的碎片。

{
  "cluster_name" : "tweedle",
  "status" : "yellow",
  "timed_out" : false,
  "number_of_nodes" : 4,
  "number_of_data_nodes" : 3,
  "active_primary_shards" : 15,
  "active_shards" : 23,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 7
}

现在我的星系团处于黄色状态。解决这个问题最好的办法是什么?

注:如果出于某种原因运行单个节点集群,则可能只需执行以下操作:

curl -XPUT 'localhost:9200/_settings' -d '
{
    "index" : {
        "number_of_replicas" : 0
    }
}'
提问于
用户回答回答于

好的,我用ES的支持解决了这个问题。在所有节点(或您认为是造成问题的节点)上向API发出以下命令:

curl -XPUT 'localhost:9200/<index>/_settings' \
    -d '{"index.routing.allocation.disable_allocation": false}'

其中<index>有问题。如果您不知道,只需在所有节点上运行以下命令:

curl -XPUT 'localhost:9200/_settings' \
    -d '{"index.routing.allocation.disable_allocation": false}'

我还将这一行添加到yml配置中,从那时起,服务器/服务的任何重新启动都是没有问题的。碎片立即重新分配。

用户回答回答于

默认情况下,Elasticsearch将动态地将碎片重新分配给节点。但是,如果您已经禁用了碎片分配(也许您做了一个滚动重启忘记重新启用它),您可以重新启用碎片分配。

# v0.90.x and earlier
curl -XPUT 'localhost:9200/_settings' -d '{
    "index.routing.allocation.disable_allocation": false
}'

# v1.0+
curl -XPUT 'localhost:9200/_cluster/settings' -d '{
    "transient" : {
        "cluster.routing.allocation.enable" : "all"
    }
}'

然后ElasticSearch将按照正常方式重新分配碎片。这可能会很慢,考虑一下indices.recovery.max_bytes_per_seccluster.routing.allocation.node_concurrent_recoveries加快速度。

如果您还在发现问题,那么其他的问题可能是错误的,所以查看您的ElasticSearch日志以找出错误。如果你看到EsRejectedExecutionException线程池可能太小了

最后,可以显式地将碎片重新分配到具有reroute API.

# Suppose shard 4 of index "my-index" is unassigned, so you want to
# assign it to node search03:
curl -XPOST 'localhost:9200/_cluster/reroute' -d '{
    "commands": [{
        "allocate": {
            "index": "my-index",
            "shard": 4,
            "node": "search03",
            "allow_primary": 1
        }
    }]
}'

扫码关注云+社区