Elasticsearch - Open Source Enterprise Suchserver

Elasticsearch

Elasticsearch ist ein auf Java und Apache Lucene Core basierender Suchserver, der 2010 in der ersten Version released wurde. Die Kommunikation zwischen Elasticsearch und dem Service-Konsumenten erfolgt nahezu ausschließliche über JSON via REST-Interface. Dies hat den Vorteil, dass auch kleinere Schreib- und Lesevorgänge mit Hilfe von CURL getestet und entwickelt werden können, ohne auf eine schwergewichtige API zurückgreifen zu müssen.

Skalierung ohne Limits

Besonders sticht Elasticsearch dadurch hervor, dass es alles, was für Skalierung und Verteilung der Installation benötigt wird, von Haus aus mitbringt. Ist aufgrund steigender Last oder Erreichung der Kapazitätsgrenze eines Servers die Erweiterung notwendig, so muss Elasticsearch lediglich über einen neuen Server informiert werden. Es kümmert sich anschließend selbständig um die Umverteilung der Daten und Anfragen. Die grundlegenden Ordnungsbegriffe in Elasticsearch sind:

  • Cluster
    Ein Cluster ist ein Verbund von mehreren Elastic-Search Nodes. Diese handeln automatisch einen Master-Node aus, der bei Ausfall ersetzt wird und sich um die Steuerung der modeübergreifenden Operationen kümmert.

  • Nodes
    Als Node wird jeder eigenständige Server oder auch VM innerhalb eines Elasticsearch-Clusters bezeichnet, der sich an Speicherung oder Auslieferung von Daten beteiligt.

  • Index
    Einen Index innerhalb von Elastisearch ist ein logischer Namensraum, der vergleichbar zu einer logischen Datenbank innerhalb eines Clusters anzusehen ist. Er besteht aus einem oder mehreren Shards und Replica-Shards.

  • Shards
    Shards sind die eigentlich Datenhaltungselemente innerhalb von Elasticsearch und basierend auf Apache Lucene. Der Zugriff erfolgt immer über den logischen Index und direkt auf die Shards, die in Aufbau und Verteilung nach außen nicht sichtbar sind. In Clustern mit mehreren Nodes können diese Shards mit entsprechenden Replica-Shards verteilt und repliziert werden.

Integration mit Logstash

Elasticsearch wird an Logstash unter Verwendung eines Output-Plugins angebunden. Nach Transfer der ersten Loginformation von Logstash an Elasticsearch, wird dort automatisch ein entsprechender Index angelegt um die Daten vorzuhalten. Wichtig ist hierbei die entsprechende Versionskompatibilität zwischen Logstash und Elasticsearch, da es beim Schreiben sonst zu Fehlern kommen kann. Seit einigen Versionen unterstützt Logstash auch den Bulk-Mode von Elasticsearch, was die Schreibperformance dramatisch verbessert hat.

Per default legt Logstash einen Index pro Tag in Elasticsearch an, was zum einen die Verteilung, aber auch das historische Management vereinfacht. Elasticsearch selbst löscht keine historischen Daten, weshalb man sich selbst um die Lösung alter Indizes kümmern muss. Um die Index-Pflege etwas zu vereinfachen, haben die Entwickler ein entsprechendes Index-Cleaner-Script zur Verfügung gestellt.