29 Juni 2015 Neuigkeiten

Elasticsearch 2.0.0.beta1 bald verfügbar!

Von Clinton Gormley

Update November 2, 2015: The real deal is here! Learn more about Elasticsearch 2.0 GA.

Wir bereiten uns auf den Release von Elasticsearch 2.0.0.beta1 vor, der alle Vorteile aus Lucene 5.2.1 nutzen wird. Dieser kommende Release wird einige tolle Features für Benutzer liefern, darunter:

Pipeline-Aggregationen

Die Fähigkeit, Aggregationen wie Derivate, gleitende Durchschnitte und Serienarithmetik für die Ergebnisse anderer Aggregationen auszuführen. Diese Funktion war clientseitig schon immer durchführbar, aber durch die Überführung der Rechenarbeit zu Elasticsearch wird es einfacher, leistungsstärkere Analyseabfragen zu konstruieren, während die Code-Anforderungen für Clients wesentlich vereinfacht werden. Dadurch eröffnen sich Möglichkeiten für prädiktive Analyse und Anomalieerkennung.

Zusammenführung von Queries und Filtern

Es gibt keine Filter mehr. Alle Filterklauseln sind jetzt zu Abfrageklauseln geworden. Bei der Verwendung im Abfragekontext haben sie Auswirkungen auf die Relevanzbewertung, im Filterkontext schließen sie schlicht Dokumente aus, die nicht passen, genau wie Filter es heute tun. Diese Umstrukturierung bedeutet, dass die Abfrageausführung automatisch zur Ausführung in der effizientesten Reihenfolge optimiert werden kann. Zum Beispiel können langsame Abfragen wie Phrase- und Geo-Queries zuerst eine schnelle Näherungsphase ausführen und dann die Ergebnisse mit einer langsameren exakten Phase eingrenzen. Im Filterkontext werden häufig verwendete Klauseln automatisch im Cache gespeichert, wenn das sinnvoll ist.

Konfigurierbare Speicherkomprimierung

Die Einstellung index.codec ermöglicht Ihnen die Auswahl zwischen LZ4-Komprimierung für mehr Geschwindigkeit (Standard) oder DEFLATE für reduzierte Indexgröße (best_compression). Das ist besonders nützlich beim Logging, wo alte Indizes vor der Optimierung auf best_compression geändert werden können.

Blog-Einträge zu den obigen Themen folgen in Kürze.

Leistung und Ausfallsicherheit

Diese Funktionsliste scheint ziemlich kurz, um ein großes neues Release zu rechtfertigen. Das sieht aber nur so aus, weil die meisten Änderungen in 2.0 interne Funktionen sind, die den Benutzern nicht sofort ins Auge springen.

Die Themen dieser neuen Version sind Leistung, Stabilität, Solidität, Vorhersagbarkeit und Benutzerfreundlichkeit:

  • Die Dinge sollten so funktionieren wie Sie es erwarten, ohne Überraschungen.
  • Elasticsearch sollte nützliches Feedback liefern, wenn Sie etwas falsch machen.
  • Sie sollten sich nicht mit Einstellungen auf unterer Ebene abmühen, wenn Elasticsearch besser für Sie entscheiden kann.
  • Am wichtigsten ist natürlich, dass Ihre Daten sicher sind.

Diese Ziele sind natürlich längst nicht alle – es sind immer noch viele Verbesserungen geplant – aber wir haben mit über 500 neuen Verpflichtungen im 2.x-Branch bereits große Fortschritte gemacht, darunter:

  • Standardmäßige Nutzung von On-Disk-Doc Values anstelle von In-Memory-Felddaten zur Reduzierung der Heap-Nutzung und Steigerung der Skalierbarkeit.
  • Reduzierung der Heap-Nutzung während der Zusammenführung von Segmenten.
  • Verbesserte Komprimierung von Normen, zuvor ein großer Verbraucher des Heap-Speichers.
  • Schreibvorgänge standardmäßig persistieren: durch fsync des Transaktions-Logs nach jeder Abfrage.
  • Alle Dateiänderungen sind atomar – keine teilweise geschriebenen Dateien.
  • Auto-Drosselung von Zusammenführungen.
  • Schnellere Begriffs- und Bereichsabfragen.
  • Komprimierte Bitsets für effizienteres Filter-Caching.
  • Clusterstatus-Diffs für leichtere Clusterstatus-Updates.
  • Strukturierte lesbare JSON-Exceptions.
  • Feinkörnigere Lucene-Speicherberichte.
  • Standardmäßige Bindung nur zum localhost, damit keine Dev Nodes versehentlich einem anderen Cluster beitreten.
  • Parent/Child-Umschreibung für das Nutzen optimaler Query-Ausführung.
  • Ausführung mit minimalen Berechtigungen im Java Security Manager.
  • Alle Core-Plugins wurden in das Elasticsearch-Hauptverzeichnis verschoben und werden synchron zur jeweiligen Elasticsearch-Version veröffentlicht.

Was Sie vor dem Upgrade wissen sollten

Große Versions-Upgrades geben uns die Möglichkeit, überflüssigen Programmcode loszuwerden. Wir haben bei all diesen Änderungen möglichst versucht, einen leichten, rückwärts-kompatiblen Upgrade-Pfad bereitzustellen. Doch es gibt zwei ganz bestimmte Änderungen, die vor dem Upgrade auf Elasticsearch 2.0 konkrete Maßnahmen erfordern.

Bei der ersten Änderung geht es um Feld- und Typ-Mappings. Die derzeit zugeordneten Mapping-APIs sind zu nachsichtig. Wir verlassen uns darauf, dass Benutzer bewährte Praxislösungen lesen und stellen keinen integrierten Schutz bereit. In der Version 2.0 sind Mappings strenger und sicherer, aber einige Änderungen sind nicht rückwärtskompatibel. Mehr Informationen zu diesem Thema finden Sie im Artikel The Great Mapping Refactoring.

Die zweite Änderung betrifft Benutzer, die bereits seit Elasticsearch 0.20 oder länger dabei sind, also Versionen, die Lucene 3.x verwenden. Elasticsearch 2.x basiert auf Lucene 5 und unterstützt zwar Lese-Indexe, die in Lucene 4.x verfasst werden, aber keine aus Lucene 3.x.

Wenn Sie Indexe haben, die von Elasticsearch 0.20 oder früher erstellt wurden, können Sie kein Elasticsearch 2.x-Cluster starten. Sie müssen entweder diese alten Indexe löschen oder sie mit der Upgrade-API in Elasticsearch 1.6.0 oder höher upgraden.

Die Upgrade-API erfüllt dabei zwei Aufgaben:

  • Sie schreibt jedes Segment, das ein älteres Lucene-Format verwendet, in das neueste Format um.
  • Sie fügt eine Einstellung hinzu, mit der man den Index als lesbar von Elasticsearch 2.x markieren kann.

Es wird zwar empfohlen, alle Segmente auf die neueste Version upzugraden, aber sie können vor dem Upgrade dafür sorgen, dass Sie möglichst wenig Arbeit haben. Upgraden Sie nur Lucene 3.x-Segmente, indem Sie den Parameter theonly_ancient_segments angeben.

Elasticsearch Migrations-Plugin

Das von uns veröffentlichte Elasticsearch Migrations-Plugin soll Ihnen dabei helfen, zu prüfen, ob Sie Ihre Indexe upgraden oder etwas anderes machen müssen, bevor Sie die Migration zu Elasticsearch 2.0 vornehmen. Bitte laden Sie das Plugin herunter und führen Sie es auf Ihrem Cluster aus, bevor Sie das Upgrade vornehmen.

Installieren Sie zuerst das Plugin:

./bin/plugin -i elastic/elasticsearch-migration
        

Das Plugin kann auf einem Live-Cluster installiert werden. Der Node muss nicht neu gestartet werden.

Öffnen Sie dann mit diesem Link das Plugin in Ihrem Browser:

http://localhost:9200/_plugin/migration 

(Ändern Sie localhost:9200 auf den Hostnamen des Nodes, auf dem das Plugin installiert ist.)

Falls Sie Bugs im Migrations-Plugin finden oder Sie Verbesserungsvorschläge haben, öffnen Sie bitte einen Fall im GitHub issue tracker.