Elasticsearch Cluster im Handumdrehen

Keine Kommentare

Je nach Szenario kann das Setup für ein Elasticsearch-Cluster sehr unterschiedlich ausfallen. Um unseren Kunden trotzdem möglichst schnell individuelle, sichtbare Ergebnisse liefern zu können, haben wir den Installations-Prozess für Elasticsearch-Cluster automatisiert und können ein lokales Demo-Cluster nun auf Knopfdruck hochfahren.

In max. 30 Minuten zum lokalen Cluster

Ein Elasticsearch-Cluster lässt sich auf unterschiedlichste Weise an ein Einsatzszenario anpassen, wie z.B. durch die Auswahl verschiedener Plugins, Security-Eigenschaften oder Loadbalancing-Komponenten. Da für jeden unserer Kunden andere Anforderungen im Mittelpunkt stehen, gibt es nicht „das eine“ Cluster-Setup, welches wir als Komplettpaket einfach mitbringen können. Um unseren Kunden trotzdem möglichst früh eine individuell angepasste Lösung präsentieren zu können, haben wir den Installations-Prozess automatisiert und zugleich flexibel konfigurierbar gemacht.
Maximal 30 Minuten – länger sollte es nicht dauern, bis wir ein kundenspezifisch angepasstes Cluster auf unserem Notebook präsentieren können.

Vom Notebook in Produktion

Der Installations-Prozess für ein komplettes ELK-Cluster ist zwar aufwändig, steht für unsere Kunden jedoch nicht im Mittelpunkt und sollte daher möglichst schnell und reibungslos abzuwickeln sein. Daher haben wir den Installationsprozess so entworfen, dass sich ein vorbereitetes Cluster leicht von der lokalen Entwicklungsumgebung auf produktive Server übertragen lässt.

Lokale Standard-Konfiguration mit Vagrant

Beginnen wir damit, ein einfaches Cluster mit Vagrant aufzuziehen. Als Voraussetzung benötigen wir folgende Pakete:

  • lxc
  • VirtualBox (Ich nutze v4.3.36)
  • Vagrant (Ich nutze v1.7.4) mit dem Hosts-Plugin (vagrant plugin install vagrant-hosts)
  • keytool (z.B. enthalten in openjdk-7-jre)

Achtung: Das Vagrantfile ist für Debian ausgelegt, auf anderen Plattformen müssen ggf. Anpassungen an der Netzwerkkonfiguration durchgeführt werden.

Nun klonen wir das elastic-Projekt von https://github.com/tobiasschaber/elastic, wechseln in das elastic-Verzeichnis und passen die Datei „prepare-ssl.sh“ an. Hier muss der Pfad von „ELKINSTALLDIR“ so angepasst werden, dass er auf das geklonte elastic-Verzeichnis zeigt:

SSL Config

Dann geht es auch schon los, mit folgenden Befehlen:
./prepare-ssl.sh (1x mit ENTER bestätigen)
vagrant up elkdata1 elkmaster1 elkclient1

Ein feines Setup für wenig Arbeit

Während das Cluster installiert wird, erkläre ich, was gerade passiert: Zuerst haben wir ein Shell-Script ausgeführt, welches diverse SSL-Artefakte erzeugt und im „ssl“-Verzeichnis ablegt. Wenn wir die Installation später auf einem produktiven Server ausführen, können wir diese Artefakte einfach gegen „echte“ anstatt selbst generierter Artefakte austauschen und diese werden dann ausgerollt.
Dann startet Vagrant 3 Vms – ein Elasticsearch-Setup mit Master-, Client- und Data-Node – welche bereits SSL-Verschlüsselung zwischen allen Nodes, license-, watcher- und shield-Plugin sowie Kibana mit HTTPs, marvel und timelion-plugin beinhalten.

Kibana wird nicht automatisch gestartet, daher loggen wir uns per SSH in das Client-Node ein:
vagrant ssh elkclient1
und starten Kibana:
sudo systemctl start kibana

Kibana ist nun erreichbar unter: https://10.0.3.131:5601/ (esadmin/esadmin)

Etwas mehr ist nicht schwer – Logstash anflanschen

Als zentraler Bestandteil des ELK-Stacks fügen wir unserem Cluster nun ein Logstash-Node hinzu:
vagrant up logstash1
Nach dem Booten der Vagrant-Box steht ein per SSL angebundenes Logstash-Node mit einer funktionierenden Minimal-Konfiguration zur Verfügung. Wir können das ganze ausprobieren, indem wir uns per SSH auf die Logstash-VM einloggen
vagrant ssh logstash1
und etwas in die Datei „/tmp/input“ schreiben:
echo „Hello World“ >> /tmp/input

Kurze Zeit später sollte diese Nachricht in Kibana im Index „default-*“ erscheinen:

Kibana

Migration auf produktive Server

Bei der Installation der Nodes setzen wir derzeit auf Puppet. Vagrant führt jedoch nicht direkt ein Puppet-Modul aus, sondern wir haben die Installation durch ein Shell-Script gekapselt. Dies hat den Vorteil, dass es für eine Installation eines produktiven Clusters ausreichend ist, auf allen Nodes das entsprechende Shell-Script auszuführen. Eine volle Puppet-Infrastruktur ist nicht erforderlich.

Noch mehr Möglichkeiten – Installation durch Konfiguration

Wer genug RAM in seinem Notebook hat, kann an dieser Stelle weitere Nodes zum Cluster hinzufügen (elkmaster2, elkdata2+3, elkclient2). Auch möglich (wenn auch etwas schwieriger) ist es, das Logstash-Node gegen eine Kombination aus Shipper- und Indexer-Nodes auszutauschen und ein Redis-Cluster dazwischen zu setzen – inklusive SSL-Verschlüsselung. Hierzu sind allerdings einige Anpassungen an den Hiera-Files erforderlich.
Die Hiera-Files liegen im Verzeichnis „hiera“. Die Datei „common.yaml“ steuert die Konfiguration, die alle Nodes betrifft, im Verzeichnis „nodes“ gibt es zusätzlich für jeden Server ein eigenes Config-File.

In den Hiera-Files Lässt sich die komplette Konfiguration des gesamten Clusters einstellen. Hierz zählen zum Beispiel:

  • SSL und HTTPs ja/Nein
  • Elasticsearch/Kibana/Plugin Version
  • Liste zu installierender Plugins für Elasticsearch und Kibana
  • Authentifizierung
  • Redis inkl. SSL ja/nein

Nahezu jede Eigenschaft des Clusters lässt sich an dieser Stelle wie gewünscht konfigurieren. So ist es uns nun möglich, in unter 30 Minuten ein Cluster mit einer sehr breiten Palette an gewünschten Optionen bereitzustellen – produktionsfertig.

Tobias Schaber

Neben seinem Schwerpunkt „Verteilte Systeme“ beschäftigt sich Tobias Schaber mit den Themen DevOps und Infrastructure-As-Code und automatisiert zum Beispiel die Bereitstellung von komplexen Systemen wie OpenStack oder Elasticsearch-Clustern.

Share on FacebookGoogle+Share on LinkedInTweet about this on TwitterShare on RedditDigg thisShare on StumbleUpon

Kommentieren

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.