2014-09-08 8 views
9

Ich erhalte diesen Fehler, in meinem ES-Protokoll verwende ich drei Knoten. DieseFehler beim Starten des Shards in ElasticSearch IndexShardGatewayRecoveryException "Senden fehlgeschlagen"

Caused by: java.lang.ArrayIndexOutOfBoundsException 
[2014-09-08 13:53:56,167][WARN ][cluster.action.shard  ] [Dancing Destroyer] [events][3] sending failed shard for [events][3], node[RDZy21y7SRep7n6oWT8ogg], [P], s[INITIALIZING], indexUUID [gzj1aHTnQX6XDc0SxkvxDQ], reason [Failed to start shard, message [IndexShardGatewayRecoveryException[[events][3] failed recovery]; nested: FlushFailedEngineException[[events][3] Flush failed]; nested: ArrayIndexOutOfBoundsException; ]] 
[2014-09-08 13:53:56,357][WARN ][indices.cluster   ] [Dancing Destroyer] [events][3] failed to start shard 
org.elasticsearch.index.gateway.IndexShardGatewayRecoveryException: [events][3] failed recovery 
     at org.elasticsearch.index.gateway.IndexShardGatewayService$1.run(IndexShardGatewayService.java:185) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
     at java.lang.Thread.run(Thread.java:744) 
Caused by: org.elasticsearch.index.engine.FlushFailedEngineException: [events][3] Flush failed 
     at org.elasticsearch.index.engine.internal.InternalEngine.flush(InternalEngine.java:805) 
     at org.elasticsearch.index.shard.service.InternalIndexShard.performRecoveryFinalization(InternalIndexShard.java:726) 
     at org.elasticsearch.index.gateway.local.LocalIndexShardGateway.recover(LocalIndexShardGateway.java:249) 
     at org.elasticsearch.index.gateway.IndexShardGatewayService$1.run(IndexShardGatewayService.java:132) 
     ... 3 more 
Caused by: java.lang.ArrayIndexOutOfBoundsException 
[2014-09-08 13:53:56,381][WARN ][cluster.action.shard  ] [Dancing Destroyer] [events][3] sending failed shard for [events][3], node[RDZy21y7SRep7n6oWT8ogg], [P], s[INITIALIZING], indexUUID [gzj1aHTnQX6XDc0SxkvxDQ], reason [Failed to start shard, message [IndexShardGatewayRecoveryException[[events][3] failed recovery]; nested: FlushFailedEngineException[[events][3] Flush failed]; nested: ArrayIndexOutOfBoundsException; ]] 

bedeutet, dass der Status von ES rot ist, und ich bin fast 10 Millionen Dokumente fehlen. Was bedeutet dieser Fehler, damit ich mich erholen könnte?

Antwort

12

Es scheint, dass ich einen vermasselten Shard hatte, der repariert werden musste. Es ist eine Lucene Sache, wo Sie Lucene sagen, um die Scherbe zu beheben.

Für Ubuntu, war die Lösung für das /usr/share/elasticsearch/lib Verzeichnis gehen und die Lucene Core-Version (ls ausgeführt werden Sie eine Datei mit dem Namen etwas wie Lucene-Core-4.8.1.jar zeigen) wird ausgeführt wurde herausfinden, und geben Sie dann :

java -cp lucene-core-x.x.x.jar -ea:org.apache.lucene... org.apache.lucene.index.CheckIndex /var/lib/elasticsearch/<clustername>/nodes/0/indices/<index>/<shard>/index/ -fix 

die xxx mit der Version Lucene Kerns ersetzen, mit dem cluster, Index mit der fehlerhaften Scherbe Nummer mit dem Namen des Index und natürlich.

Dies kann möglicherweise einen Verlust von Dokumenten

Aber es fixiert unsere Frage geben.

+1

Haben Sie weitere Informationen darüber, warum dies passiert ist? Gibt es irgendwelche vorbeugenden Maßnahmen, die Sie ergriffen haben? –

+0

@EricUldall Ich bin mein Fall, mein Server hatte keinen Speicherplatz mehr, was dazu führte, dass ES teilweise Daten auf die Festplatte geschrieben hat. – Oleander

+1

Danke für diesen einen, du hast einige Probleme gespart. Ich habe ein einfaches [Ruby-Skript] (https://gist.github.com/atmosx/54a7e4904d4b36aea3bb) erstellt, um das automatisch zu beheben. –

2

Nehmen Hinweise von Repox. In Centos 6.5 mit dem integrierten ElasticSearch in Logstash, bereitgestellt mit Chef.

java -cp /opt/logstash/forwarder/vendor/jar/elasticsearch-1.1.1/lib/lucene-core-4.7.2.jar -ea:org.apache.lucene... org.apache.lucene.index.CheckIndex /opt/logstash/forwarder/data/elasticsearch/nodes/0/indices/logstash-2014.11.01/3/index/ -fix

Doch selbst bei Fixierung I noch sehen Fehler beim Starten von Shard, Nachricht ... Fehler beim Wiederherstellen von Shard. Ich muss löschen löschen mit zB curator delete --older-than 3.

5

Ich konfrontiert dieses Problem mehrere Male. Da ich Clickstream-Daten lesen soll (12-20M Treffer pro Tag), konnte ich mir keine Datenverluste leisten.

also war meine Lösung und es läuft wunderbar:

Lösung:

  1. Stopp Elasticsearch vom Laufen
  2. zu/path/Kasse zu/my/data/mycluster_name/Knoten/0/indexes/myindex_name/index
  3. Segmente löschen.gen
  4. starten Elasticsearch

Problem Root Cause

  1. Shards nicht aus verschiedenen Gründen Datei, vor allem, wenn Scherben Kibana Anfragen nicht in der Lage sind zu erfüllen.

  2. Lucene ist nicht direkt mit diesem Prozess verbunden. Wenn es Probleme gibt, ist elasticsearch nicht in der Lage, den Shards-Wert aus Lucene-Segmentreferenzen, die in segments gespeichert sind, effizient auszuwählen.

  3. Lucene setzt diesen Wert im nächsten Lauf erneut auf. So kann elasticsearch die Werte korrekt referenzieren. Und das Problem mit dem Shard ist gelöst.

Verwandte Themen