2017-03-08 5 views
1

Zur Zeit arbeiten Sie an etwas und brauchten Hilfe. Ich werde einen elastischen Index haben, der von einer SQL-Datenbank aufgefüllt wird. Es wird einen ersten vollständigen Neuindex von der SQL-Datenbank geben, dann wird es einen nächtlichen Job geben, der Aktualisierungen aktualisiert/löscht/einfügt.Index ohne Ausfallzeit neu erstellen

Im Falle eines größeren Fehlers muss ich möglicherweise eine vollständige Neuindizierung durchführen. Idealerweise möchte ich keine Ausfallzeit haben. Ich habe einige Artikel über das Erstellen von Aliasen usw. gefunden, allerdings sieht dies mehr Aktualisierungen für Feldzuordnungen vor. Meine Situation ist eine vollständige Neuindizierung der Daten aus meiner Quell-DB. Kann ich nur bekommen, dass Daten die docs zu elastischen und elastischen schieben, wird nur den vorhandenen Index aktualisieren, da ids gleich sein werden? Oder muss ich etwas anderes machen?

Grüße

Ismail

Antwort

0

Für keine Ausfallzeiten können Sie einen neuen Index, füllen Sie es aus Ihrer Datenbank erstellen und die Aliasnamen verwenden, aus dem alten Index auf den neuen zu wechseln. Steps:

  1. Rufen Sie Ihren Hauptindex so etwas wie main_index_1 (oder was auch immer Sie mögen)
  2. einen Alias ​​für diesen Index main_index

    curl -XPUT 'localhost:9200/main_index_1/_alias/main_index?pretty

  3. Richten Sie Ihre Anwendung mit dem Namen erstellen zu-zu-Punkt Dieser Aliasname

  4. Erstellen Sie einen neuen Index mit dem Namen main_index_2, und indizieren Sie ihn aus Ihrer Datenbank
  5. Schalten Sie den Alias ​​auf den neuen Index sollte vorhandenen Daten

    curl -XPOST 'localhost:9200/_aliases?pretty' -H 'Content-Type: application/json' -d { "actions": [ { "remove": { "index": "main_index_1", "alias": "main_index" }}, { "add": { "index": "main_index_2", "alias": "main_index" }} ] }

+0

Cool, aber nur drängen Daten auf nur Punkt aktualisieren und halten immer noch den Index, so 0 Ausfallzeiten als auch? – Ismail

+0

Ja, in der Theorie, aber Sie sprachen über ein großes Versagen. Was würde in diesem Fall scheitern? – paqash

+0

Sorry kann schlecht sein. Die Datenaktualisierungen, die ich von db bekomme, müssen innerhalb eines Zeitrahmens extrahiert und hochgedrückt worden sein. Nach diesem Zeitraum werden die Daten mit neuen Daten überschrieben. Wenn während dieser Zeit die Datenextraktion fehlschlägt, muss ich den vollständigen Index neu erstellen. Während dieser Wiederherstellung möchte ich jedoch, dass der Index immer noch aktiv ist, obwohl möglicherweise veraltete Daten vorhanden sind. – Ismail