elasticsearch – que faire avec des fragments non atsortingbués

mon cluster a le statut jaune car certains fragments ne sont pas atsortingbués. Que faire avec ceci?

J’ai essayé de définir cluster.routing.allocation.disable_allocation = false à tous les index, mais je pense que cela ne fonctionne pas car j’utilise la version 1.1.1.

J’ai également essayé de redémarrer toutes les machines, mais la même chose se produit.

Une idée?

MODIFIER :

  • Stat cluster:

     { cluster_name: "elasticsearch", status: "red", timed_out: false, number_of_nodes: 5, number_of_data_nodes: 4, active_primary_shards: 4689, active_shards: 4689, relocating_shards: 0, initializing_shards: 10, unassigned_shards: 758 } 

Ces fragments non atsortingbués sont en réalité des répliques non atsortingbuées de vos fragments réels du nœud maître.

Pour atsortingbuer ces fragments, vous devez exécuter une nouvelle instance d’elasticsearch afin de créer un noeud secondaire pour transporter les répliques de données.

EDIT: Parfois, les fragments non atsortingbués appartiennent à des index qui ont été supprimés, ce qui en fait des fragments orphelins qui ne seront jamais atsortingbués indépendamment de l’ajout de nœuds ou non. Mais ce n’est pas le cas ici!

Il y a beaucoup de raisons possibles pour lesquelles l’allocation ne se produira pas:

  1. Vous exécutez différentes versions d’Elasticsearch sur différents nœuds
  2. Vous n’avez qu’un seul noeud dans votre cluster, mais vous avez un nombre de réplicas défini sur autre chose que zéro.
  3. Vous avez un espace disque insuffisant.
  4. Vous avez désactivé l’allocation de partition.
  5. Vous avez un pare-feu ou SELinux activé. Avec SELinux activé mais pas configuré correctement, vous verrez des fragments bloqués dans INITIALIZING ou RELOCATING pour toujours.

En règle générale, vous pouvez résoudre des problèmes comme ceux-ci:

  1. Examinez les noeuds de votre cluster: curl -s 'localhost:9200/_cat/nodes?v' . Si vous ne disposez que d’un seul nœud, vous devez définir number_of_replicas à 0. (Voir la documentation ES ou d’autres réponses).
  2. Examinez l’espace disque disponible dans votre cluster: curl -s 'localhost:9200/_cat/allocation?v'
  3. Vérifiez les parameters du cluster: curl 'http://localhost:9200/_cluster/settings?pretty' et recherchez les parameters cluster.routing
  4. Regardez quels fragments sont UNASSIGNED curl -s localhost:9200/_cat/shards?v | grep UNASS curl -s localhost:9200/_cat/shards?v | grep UNASS
  5. Essayez de forcer un fragment à être assigné

     curl -XPOST -d '{ "commands" : [ { "allocate" : { "index" : ".marvel-2014.05.21", "shard" : 0, "node" : "SOME_NODE_HERE", "allow_primary":true } } ] }' http://localhost:9200/_cluster/reroute?pretty 
  6. Regardez la réponse et voyez ce que cela dit. Il y aura un tas de OUI qui sont ok, puis un NON. S’il n’y a pas de NO, c’est probablement un problème de pare-feu / SELinux.

Il s’agit d’un problème commun lié au paramètre d’index par défaut, en particulier lorsque vous essayez de répliquer sur un seul nœud. Pour résoudre ce problème avec le paramètre de cluster transitoire, procédez comme suit:

 curl -XPUT http://localhost:9200/_settings -d '{ "number_of_replicas" :0 }' 

Ensuite, activez le cluster pour réaffecter les fragments (vous pouvez toujours l’activer après tout):

 curl -XPUT http://localhost:9200/_cluster/settings -d ' { "transient" : { "cluster.routing.allocation.enable": true } }' 

Maintenant, asseyez-vous et regardez le cluster nettoyer les fragments de réplique non affectés. Si vous voulez que cela prenne effet avec les futurs index, n’oubliez pas de modifier le fichier elasticsearch.yml avec le paramètre suivant et de renvoyer le cluster:

 index.number_of_replicas: 0 

La seule chose qui a fonctionné pour moi a été de changer le number_of_replicas (j’avais 2 répliques, donc je l’ai changé à 1, puis je suis revenu à 2).

Premier:

 PUT /myindex/_settings { "index" : { "number_of_replicas" : 1 } } 

Alors:

 PUT /myindex/_settings { "index" : { "number_of_replicas" : 2 } } 

Les 2 premiers points de la réponse d’Alcanzar l’ont fait pour moi, mais j’ai dû append

 "allow_primary" : true 

ainsi

 curl -XPOST http://localhost:9200/_cluster/reroute?pretty -d '{ "commands": [ { "allocate": { "index": ".marvel-2014.05.21", "shard": 0, "node": "SOME_NODE_HERE", "allow_primary": true } } ] }' 

Vérifiez que les versions d’ElasticSearch sur chaque nœud sont identiques. Si ce n’est pas le cas, ES n’allouera pas de copies de réplicas de l’index à des nœuds plus anciens.

En utilisant la réponse de @Alcanzar, vous pouvez récupérer des messages d’erreur de diagnostic:

 curl -XPOST 'http://localhost:9200/_cluster/reroute?pretty' -d '{ "commands": [ { "allocate": { "index": "logstash-2016.01.31", "shard": 1, "node": "arc-elk-es3", "allow_primary": true } } ] }' 

le résultat est:

 { "error" : "ElasticsearchIllegalArgumentException[[allocate] allocation of [logstash-2016.01.31][1] on node [arc-elk-es3] [Xn8HF16OTxmnQxzRzMzrlA][arc-elk-es3][inet[/172.16.102.48:9300]]{master=false} is not allowed, reason: [YES(shard is not allocated to same node or host)] [YES(node passes include/exclude/require filters)] [YES(primary is already active)] [YES(below shard recovery limit of [2])] [YES(allocation disabling is ignored)] [YES(allocation disabling is ignored)] [YES(no allocation awareness enabled)] [YES(total shard limit disabled: [-1] <= 0)] *** [NO(target node version [1.7.4] is older than source node version [1.7.5]) *** [YES(enough disk for shard on node, free: [185.3gb])] [YES(shard not primary or relocation disabled)]]", "status" : 400 } 

Comment déterminer le numéro de version d'ElasticSearch:

 adminuser@arc-elk-web:/var/log/kibana$ curl -XGET 'localhost:9200' { "status" : 200, "name" : "arc-elk-web", "cluster_name" : "elasticsearch", "version" : { "number" : "1.7.5", "build_hash" : "00f95f4ffca6de89d68b7ccaf80d148f1f70e4d4", "build_timestamp" : "2016-02-02T09:55:30Z", "build_snapshot" : false, "lucene_version" : "4.10.4" }, "tagline" : "You Know, for Search" } 

Dans mon cas, j'installe correctement le repository apt-get et ils ne sont plus synchronisés sur les différents serveurs. Je l'ai corrigé sur tous les serveurs avec:

 echo "deb http://packages.elastic.co/elasticsearch/1.7/debian stable main" | sudo tee -a /etc/apt/sources.list 

et puis l'habituel:

 sudo apt-get update sudo apt-get upgrade 

et un redémarrage final du serveur.