web-dev-qa-db-fra.com

Courier Fetch: les fragments ont échoué

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é."

Example 1

Example 2

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
20
Carlos Vega

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.

4
Alcanzar

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! 

22
Philip

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

7
Todd Cooper

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
    }
}
1
Gary Gauh

J'ai eu cette erreur lorsque ma requête manquait une citation de clôture:

field:"value

 Courier Fetch: 5 of 35 shards failed.

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"
1
spiffytech

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.

0
Abhijit Dutta