2014-10-31 3 views
5

Der Festplattenplatz wurde nicht mehr verwendet und die ElasticSearch-Shards wurden geschraubt. Drei Knoten sind jetzt rot, zwei wurden wiederhergestellt und ihr Zustand ist gelb. ES läuft mit 150% CPU-Auslastung und hohem Arbeitsspeicher und versucht, sie wiederherzustellen. Aber es sieht so aus, als ob es einen Versionskonflikt gibt.Elasticsearch konnte nach Absturz nicht wiederhergestellt werden

Ich räumte den Speicherplatz und löschte den Translog für einen Shard, um das Laden von Translog zu stoppen. Aber überraschenderweise wird das Translog wieder erstellt!

Bitte teilen Sie mir, wie kann ich diesen Versuch zur Wiederherstellung von Translog stoppen und normalen Index Operationen fortsetzen. Ich möchte die Shard-Daten nicht löschen.

[2014-10-31 03:11:43,742][WARN ][cluster.action.shard  ] [Angela Cairn] [western_europe][4] sending failed shard for [western_europe][4], node[x5M73qVXS5eZIBdz40boEg], [P], s[INITIALIZING], indexUUID [wy-tIJqdQiynz5SGQ2IrGA], reason [Failed to start shard, message [IndexShardGatewayRecoveryException[[western_europe][4] failed to recover shard]; nested: ElasticsearchException[failed to read [tweet][527924645014818817]]; nested: ElasticsearchIllegalArgumentException[No version type match [101]]; ]] 
[2014-10-31 03:11:43,742][WARN ][cluster.action.shard  ] [Angela Cairn] [western_europe][4] received shard failed for [western_europe][4], node[x5M73qVXS5eZIBdz40boEg], [P], s[INITIALIZING], indexUUID [wy-tIJqdQiynz5SGQ2IrGA], reason [Failed to start shard, message [IndexShardGatewayRecoveryException[[western_europe][4] failed to recover shard]; nested: ElasticsearchException[failed to read [tweet][527924645014818817]]; nested: ElasticsearchIllegalArgumentException[No version type match [101]]; ]] 
[2014-10-31 03:11:43,859][WARN ][indices.cluster   ] [Angela Cairn] [western_europe][2] failed to start shard 
org.elasticsearch.index.gateway.IndexShardGatewayRecoveryException: [western_europe][2] failed to recover shard 
    at org.elasticsearch.index.gateway.local.LocalIndexShardGateway.recover(LocalIndexShardGateway.java:269) 
    at org.elasticsearch.index.gateway.IndexShardGatewayService$1.run(IndexShardGatewayService.java:132) 
    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.ElasticsearchException: failed to read [tweet][527936245440065536] 
    at org.elasticsearch.index.translog.Translog$Index.readFrom(Translog.java:511) 
    at org.elasticsearch.index.translog.TranslogStreams.readTranslogOperation(TranslogStreams.java:52) 
    at org.elasticsearch.index.gateway.local.LocalIndexShardGateway.recover(LocalIndexShardGateway.java:241) 
    ... 4 more 
Caused by: org.elasticsearch.ElasticsearchIllegalArgumentException: No version type match [116] 
    at org.elasticsearch.index.VersionType.fromValue(VersionType.java:307) 
    at org.elasticsearch.index.translog.Translog$Index.readFrom(Translog.java:508) 
+1

Ich glaube nicht, dass Sie wiederherstellen können, ohne irgendwelche Daten aus dem Translog zu verlieren. Versuchen Sie, den Translog von beiden im Log angegebenen Shards zu löschen: Shard 4 und 2 für den Index western_europe. –

Antwort

3

Zuerst, überprüfen Sie, gibt es wirklich keine Probleme mit den Scherben selbst. cd zu yout /usr/share/elasticsearch/lib Verzeichnis oder gleichwertig, und verwenden CheckIndex des Lucene wie so:

java -cp "*" -ea:org.apache.lucene... org.apache.lucene.index.CheckIndex /var/lib/elasticsearch/<ES-NAME>/nodes/<NODE-NUMBER>/indices/<INDEX-NAME>/<SHARD-NUMBER/index/ 

Diese eine Scherbe für Probleme prüfen, und wird eine Weile, wenn Ihre Scherben sind groß nehmen.

Wenn Sie den Java-Klassenpfad falsch eingeben, fehlen einige erforderliche JAR-Dateien, und CheckIndex kann Fehler ausgeben und fälschlicherweise behaupten, dass alle Segmente im Shard fehlerhaft sind. Lesen Sie daher die Ausgabe sorgfältig.

Wenn es Probleme mit einer Scherbe, und Sie haben keine andere Möglichkeit, es wieder herzustellen, wird fix den gleichen Befehl mit dem Argument -fix läuft die Scherbe aber Sie werden Daten verlieren. CheckIndex warnt Sie, wie viele Dokumente (falls vorhanden) Sie vom Shard verlieren.

Wenn CheckIndex meldet alles ist gut mit dem Shard, dann ist Ihr Problem hoffentlich nur im Translog. Das Transaktionsprotokoll ist ein Vorausschreibprotokoll, das ElasticSearch für die Atomarität verwendet. Nach einem Absturz versucht ES, einen Shard wiederherzustellen, einschließlich Schreibvorgänge, die noch nicht in den Shard-Index selbst übertragen wurden. Diese sind in der Translog, so Sie verlieren sie, wenn Sie es löschen. Das ist jedoch viel besser, als den Splitter zu verlieren. In Ihrem Fall scheint der Translog bereits beschädigt zu sein, und ich kenne keine Möglichkeit, ihn wiederherzustellen.

Um das beschädigte Transaktionsprotokoll für die Wiederherstellung verwendet wird, löschen Sie einfach den translog durch Entfernen die translog Dateien in /var/lib/elasticsearch/<ES-NAME>/nodes/<NODE-NUMBER>/indices/<INDEX-NAME>/<SHARD-NUMBER>/translog/für jede relevante Scherbe für jeden betroffenen Knoten zu entfernen. Der letzte Teil ist wichtig, weil Sie möglicherweise sehen, dass der Cluster versucht, das Translog eines Shards von einem anderen Knoten zu regenerieren, nachdem Sie ihn aus einem gelöscht haben.

Die Shards sollten dann korrekt initialisiert werden, obwohl das wie gewöhnlich etwas dauern kann.

+0

Vielen Dank. Dies ist eine sehr einfache Checkliste für Anfänger! – ivspenna