Pourquoi est-ce que je reçois ces avertissements après avoir ajouté plus de données à elasticsearch?.
"Courrier Fetch: 30 des 60 fragments ont échoué."
Plus de détails:
C'est un nœud unique sur un 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"
statut du cluster
{
"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
}
détails du cluster
{
"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
}
}
}
}
Je suis curieux de connaître le "mlockall": false car sur le yml j'ai écrit bootstrap.mlockall: true
journaux
beaucoup de lignes comme:
org.elasticsearch.common.util.concurrent.EsRejectedExecutionException: rejected execution (queue capacity 1000) on org.elasticsearch.search.action.SearchServiceTransportAction$23@a9a34f5
Ceci est probablement une indication d'un problème lié à la santé de votre cluster. Sans en savoir plus sur votre cluster, vous ne pouvez pas en dire beaucoup plus.
Pour moi, le réglage de la recherche threadpool recherche queue_size a résolu le problème. J'ai essayé plusieurs autres solutions et c'est celle-ci qui a résolu le problème.
J'ai ajouté ceci à mon elasticsearch.yml
threadpool.search.queue_size: 10000
puis relancé elasticsearch.
Raisonnement ... (de la documentation)
Un nœud contient plusieurs pools de threads afin d'améliorer la manière dont les threads la consommation de mémoire est gérée dans un nœud. Beaucoup de ces piscines aussi avoir des files d'attente qui leur sont associées, ce qui permet aux demandes en attente d'être tenue au lieu de mis au rebut.
et pour la recherche en particulier ...
Pour les opérations de comptage/recherche. La valeur par défaut est fixe avec une taille de int ((# Of available_processors * 3)/2) + 1, queue_size of 1000.
Pour plus d'informations, vous pouvez vous référer à elasticsearch docs ici ...
J'ai eu du mal à trouver cette information, alors j'espère que cela aidera les autres!
En utilisant Elasticsearch 5.4 thread_pool a un trait de soulignement.
thread_pool.search.queue_size: 10000
Voir la documentation sur Documentation du module Elasticsearch Thread Pool
Je suis d'accord avec @ l'opinion de Philip, mais il est nécessaire de redémarrer elasticsearch au moins sur Elasticsearch> = 1.5.2, car vous pouvez définir de manière dynamique threadpool.search.queue_size
.
curl -XPUT http://your_es:9200/_cluster/settings
{
"transient":{
"threadpool.search.queue_size":10000
}
}
J'ai eu cette erreur lorsque ma requête manquait une citation de clôture:
field:"value
Dans mes journaux ElasticSearch, je vois ces exceptions:
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"
depuis Elasticsearch> = version 5, il n'est pas possible de mettre à jour les paramètres de cluster pour thread_pool.search.queue_size à l'aide de _cluster/settings API. Dans mon cas, la mise à jour du fichier yml ElasticSearch Node n'est pas une option non plus, car si le nœud échouait, le code de redimensionnement automatique amènerait un autre nœud ES avec les paramètres yml par défaut.
J'ai un cluster avec 3 nœuds et ayant 400 fragments principaux actifs avec 7 threads actifs pour une taille de file d'attente de 1 000. Le nombre croissant de nœuds à 5 avec une configuration similaire a résolu le problème car les requêtes sont distribuées horizontalement vers un plus grand nombre de nœuds disponibles.