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

2024-01-28

我有一个有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

我不得不重新启动 search03,当它回来时,它重新加入集群没有问题,但留下了 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
}

现在我的集群处于黄色状态。解决这个问题的最佳方法是什么?

  • 删除(取消)分片?
  • 将分片移动到另一个节点?
  • 将分片分配给节点?
  • 将“number_of_replicas”更新为 2?
  • 完全是别的什么吗?

有趣的是,当添加新索引时,该节点开始处理它并与集群的其余部分配合良好,它只是留下未分配的分片。

接下来的问题是:我是否做错了什么导致这种情况发生?我对在节点重新启动时以这种方式运行的集群没有太多信心。

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

curl -XPUT 'localhost:9200/_settings' -d '
{
    "index" : {
        "number_of_replicas" : 0
    }
}'

默认情况下,Elasticsearch 会动态地将分片重新分配给节点。但是,如果您禁用了分片分配(也许您执行了滚动重启 http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/cluster-nodes-shutdown.html#_rolling_restart_of_nodes_full_cluster_restart并且忘记重新启用它),您可以重新启用分片分配。

# 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_sec and cluster.routing.allocation.node_concurrent_recoveries以加快速度。

如果您仍然发现问题,则可能存在其他问题,因此请查看 Elasticsearch 日志中是否有错误。如果你看到EsRejectedExecutionException你的线程池可能太小 http://jontai.me/blog/2013/06/esrejectedexecutionexception-rejected-execution-of-messagechannelhandler-requesthandler/.

最后,您可以使用以下命令显式地将分片重新分配给节点:重新路由API http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/cluster-reroute.html.

# 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
        }
    }]
}'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ElasticSearch:未分配的分片,如何修复? 的相关文章

随机推荐