web-dev-qa-db-ja.com

Courier Fetch:シャードが失敗しました

Elasticsearchにデータを追加した後にこれらの警告が表示されるのはなぜですか?また、ダッシュボードを閲覧するたびに警告が異なります。

「Courier Fetch:60個のシャードのうち30個が失敗しました。」

Example 1

Example 2

詳細:

CentOS 7.1上の唯一のノードです

/ etc/elasticsearch/elasticsearch.yml

index.number_of_shards: 3
index.number_of_replicas: 1

bootstrap.mlockall: true

threadpool.bulk.queue_size: 1000
indices.fielddata.cache.size: 50%
threadpool.index.queue_size: 400
index.refresh_interval: 30s

index.number_of_shards: 5
index.number_of_replicas: 1

/ usr/share/elasticsearch/bin/elasticsearch.in.sh

ES_HEAP_SIZE=3G

#I use this Garbage Collector instead of the default one.

Java_OPTS="$Java_OPTS -XX:+UseG1GC"

クラスターステータス

{
  "cluster_name" : "my_cluster",
  "status" : "yellow",
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "active_primary_shards" : 61,
  "active_shards" : 61,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 61
}

クラスターの詳細

{
  "cluster_name" : "my_cluster",
  "nodes" : {
    "some weird number" : {
      "name" : "ES 1",
      "transport_address" : "inet[localhost/127.0.0.1:9300]",
      "Host" : "some Host",
      "ip" : "150.244.58.112",
      "version" : "1.4.4",
      "build" : "c88f77f",
      "http_address" : "inet[localhost/127.0.0.1:9200]",
      "process" : {
        "refresh_interval_in_millis" : 1000,
        "id" : 7854,
        "max_file_descriptors" : 65535,
        "mlockall" : false
      }
    }
  }
}

私は "mlockall"に興味があります:falseymlにbootstrap.mlockall:trueと書いたので

logs

次のような行がたくさんあります:

org.elasticsearch.common.util.concurrent.EsRejectedExecutionException: rejected execution (queue capacity 1000) on org.elasticsearch.search.action.SearchServiceTransportAction$23@a9a34f5
25
Carlos Vega

これは、クラスターの状態に問題があることを示している可能性があります。クラスターについて詳しく理解していなければ、これ以上語ることはできません。

4
Alcanzar

私にとって、スレッドプール検索queue_sizeを調整することで問題は解決しました。私は他の多くのことを試しましたが、これがそれを解決したものです。

これをelasticsearch.ymlに追加しました

threadpool.search.queue_size: 10000

その後、elasticsearchを再起動しました。

推論...(ドキュメントから)

ノードは、ノード内のスレッドメモリ消費の管理方法を改善するために、いくつかのスレッドプールを保持します。また、これらのプールの多くにはキューが関連付けられており、保留中のリクエストを破棄せずに保留できます。

そして、特に検索のために...

カウント/検索操作用。デフォルトは、int((#of available_processors * 3)/ 2)+ 1、queue_size 1000のサイズで固定されています。

詳細については、elasticsearch docs here ...を参照してください。

この情報を見つけるのに苦労したので、これが他の人を助けることを願っています!

25
Philip

Elasticsearch 5.4を使用すると、thread_poolにアンダースコアが付きます。

thread_pool.search.queue_size: 10000

Elasticsearch Thread Pool module documentation のドキュメントを参照してください

7
Todd Cooper

クエリに閉じ引用符がなかったときにこのエラーが発生しました:

field:"value

Courier Fetch: 5 of 35 shards failed.

ElasticSearchログに次の例外が表示されます。

Caused by: org.elasticsearch.index.query.QueryShardException:
    Failed to parse query [field:"value]
...
Caused by: org.Apache.lucene.queryparser.classic.ParseException: 
    Cannot parse 'field:"value': Lexical error at line 1, column 13.  
    Encountered: <EOF> after : "\"value"
5
spiffytech

@Philipの意見に同意しますが、少なくともElasticsearch> = 1.5.2でelasticsearchを再起動する必要があります。これは、threadpool.search.queue_size

curl -XPUT http://your_es:9200/_cluster/settings
{
    "transient":{
        "threadpool.search.queue_size":10000
    }
}
1
Gary Gauh

これはelasticsearch 5.6では機能しません。

{
"error": {
    "root_cause": [
        {
            "type": "remote_transport_exception",
            "reason": "[colmbmiscxx.xx][172.29.xx.xx:9300][cluster:admin/settings/update]"
        }
    ],
    "type": "illegal_argument_exception",
    "reason": "transient setting [threadpool.search.queue_size], not dynamically updateable"
},
"status": 400

}

0
Karunakar Singh

elasticsearch> =バージョン5より、_cluster/settings APIを使用してthread_pool.search.queue_sizeのクラスター設定を更新することはできません。私の場合、ElasticSearch Node ymlファイルを更新することはオプションではありません。なぜなら、ノードに障害が発生すると、自動スケーリングコードが他のESノードにデフォルトのyml設定をもたらすからです。

3つのノードと、キューサイズ1000の7つのアクティブスレッドを持つ400のアクティブプライマリシャードを持つクラスターがあります。同様の構成でノードの数を5に増やすと、クエリがより多くの利用可能なノードに水平に分散されるため、問題が解決しました。

0
Abhijit Dutta