Elasticsearchにデータを追加した後にこれらの警告が表示されるのはなぜですか?また、ダッシュボードを閲覧するたびに警告が異なります。
「Courier Fetch:60個のシャードのうち30個が失敗しました。」
詳細:
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
これは、クラスターの状態に問題があることを示している可能性があります。クラスターについて詳しく理解していなければ、これ以上語ることはできません。
私にとって、スレッドプール検索queue_sizeを調整することで問題は解決しました。私は他の多くのことを試しましたが、これがそれを解決したものです。
これをelasticsearch.ymlに追加しました
threadpool.search.queue_size: 10000
その後、elasticsearchを再起動しました。
推論...(ドキュメントから)
ノードは、ノード内のスレッドメモリ消費の管理方法を改善するために、いくつかのスレッドプールを保持します。また、これらのプールの多くにはキューが関連付けられており、保留中のリクエストを破棄せずに保留できます。
そして、特に検索のために...
カウント/検索操作用。デフォルトは、int((#of available_processors * 3)/ 2)+ 1、queue_size 1000のサイズで固定されています。
詳細については、elasticsearch docs here ...を参照してください。
この情報を見つけるのに苦労したので、これが他の人を助けることを願っています!
Elasticsearch 5.4を使用すると、thread_poolにアンダースコアが付きます。
thread_pool.search.queue_size: 10000
Elasticsearch Thread Pool module documentation のドキュメントを参照してください
クエリに閉じ引用符がなかったときにこのエラーが発生しました:
field:"value
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"
@Philipの意見に同意しますが、少なくともElasticsearch> = 1.5.2でelasticsearchを再起動する必要があります。これは、threadpool.search.queue_size
。
curl -XPUT http://your_es:9200/_cluster/settings
{
"transient":{
"threadpool.search.queue_size":10000
}
}
これは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
}
elasticsearch> =バージョン5より、_cluster/settings APIを使用してthread_pool.search.queue_sizeのクラスター設定を更新することはできません。私の場合、ElasticSearch Node ymlファイルを更新することはオプションではありません。なぜなら、ノードに障害が発生すると、自動スケーリングコードが他のESノードにデフォルトのyml設定をもたらすからです。
3つのノードと、キューサイズ1000の7つのアクティブスレッドを持つ400のアクティブプライマリシャードを持つクラスターがあります。同様の構成でノードの数を5に増やすと、クエリがより多くの利用可能なノードに水平に分散されるため、問題が解決しました。