所有分片都失败了

时间:2014-01-16 09:07:13

标签: elasticsearch

我正在进行弹性搜索,它工作得很好。今天我刚刚重启了我的远程服务器(Ubuntu)。现在我在索引中搜索,它给了我这个错误。

{"error":"SearchPhaseExecutionException[Failed to execute phase [query_fetch], all shards failed]","status":503}

我还检查了健康状况。状态为红色。谁能告诉我这是什么问题。

5 个答案:

答案 0 :(得分:21)

重启后可能会有一些碎片无法恢复,导致群集保持红色 如果你点击:
http://<yourhost>:9200/_cluster/health/?level=shards您可以查找红色碎片。

我在重新启动时遇到问题,其中分片最终处于不可恢复状态。我的解决方案是完全删除该索引。这对每个人来说都不是理想的解决方案。

使用以下插件可视化此类问题也很不错:
Elasticsearch Head

答案 1 :(得分:5)

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

curl -XPUT -H 'Content-Type: application/json' 'localhost:9200/_settings' -d '
{
    "index" : {
        "number_of_replicas" : 0
    }
}'

答案 2 :(得分:2)

首先,所有分片失败异常并不像听起来那么戏剧化,这意味着分片在服务请求(查询或索引)时失败,可能有多种原因,例如

  1. 分片实际上处于不可恢复状态,如果您的集群和索引状态为黄色和红色,那么这就是原因之一。
  2. 由于在后台进行了一些分片恢复,分片没有响应。
  3. 由于您查询的语法错误,ES 在所有分片中响应失败。

为了解决问题,您需要将其过滤到上述类别之一,并根据需要进行适当的修复。

问题中提到的,显然在第一个桶中,因为集群健康状况为 RED,意味着缺少一个或多个主分片,my this SO answer 将帮助您修复 RED 集群问题,这将修复所有在这种情况下分片异常。

答案 3 :(得分:1)

如果在正在运行的系统中遇到这种明显的索引损坏,您可以通过删除名为segments.gen的所有文件来解决此问题。它仅供参考,如果没有它,Lucene可以正确恢复。

来自ElasticSearch Blog

答案 4 :(得分:0)

这项工作对我而言。

elasticsearch / config / elasticsearch.yml需要添加此行。 script.inline: on script.indexed: on