Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Elasticsearch Grundkurs

Einen Elasticsearch-Cluster bilden

Testen Sie unsere 2021 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Der Aufbau eines Elasticsearch-Clusters geht einher mit der Definition von Rollen der teilnehmenden Server. Diese Server können entweder als Master-, als Data- oder als Ingestion Node fungieren. Sehen Sie, wie Sie auf Basis dieser Rollen einen Elasticsearch-Cluster einrichten.

Transkript

Clustering ist eine der Kernfunktionen von Elasticsearch. Denn allein die Möglichkeiten des Clustering erlauben es Elasticsearch zu beliebigen Größen zu skalieren. Selbstverständlich bringt ein solches Clustering seine eigenen Komplexitäten mit sich. Deshalb beschäftigen wir uns im laufe dieses Videos mit dem Einrichten eines Clusters, als auch mit den Rollen, die Elasticsearch-Server in einem solchen Cluster einnehmen können. Beginen wir dafür zunächst einmal mit den Rollen. Wie auch in anderen Clusterszenarien üblich, gibt es in einem Elasticsearch-Cluster sogenannte Master-Nodes. Diese dienen der Koordination aller anderen Server im Cluster und sind erste Ansprechpartner für alle Server, um sich im Cluster zu registrieren. Als solches gibt es meistens eine primäre Master-Node und weitere Master-Nodes, die beim Ausfall der primären Master-Node dessen Funktion übernehmen können. Üblicherweise hat man hier drei Master-Nodes, um sicherzustellen, dass beim Wegbruch eines Servers, sich die beiden anderen Server darauf einigen können, wer der neue Master wird. Neben Master-Nodes gibt es in einem Elasticsearch-Cluster so genannte Load-Balancer-Nodes oder auch LB-Nodes genannt. Diese dienen lediglich dem Zweck, um Last abzufedern und haben eigentlich selbst keine tatsächliche Rolle. Die wichtigsten Nodes sind dann wohl die Data-Nodes. Diese speichern die tatsächlichen Charts und Replikas der Daten, basierend auf den Festplatten, die auf den jeweiligen Servern eingerichtet sind. In Elasticsearch ist es auch möglich, dass mehrere Data-Nodes auf ein Speichermedium zurückgreifen. Dieses Szenario ist besonders dann wichtig, wenn mehr Arbeitsspeicher vorhanden ist, als Harddisks oder die Performance der Harddisk als solches keine Rolle spielt. kommt nun beispielsweise eine Anfrage bei einer Load-Balancer-Node an, so greift diese im Hintergrund auf eine Data-Node zurück und die Daten werden tatsächlich von der Data-Node an die Load-Balancer-Node geliefert und am Ende an die Anfragen der Applikation. Allerdings gibt es für das Speichern von Daten noch zusätzliche Nodes, sogenannte Ingest-Nodes. Die Funktion von Ingest-Nodes ist relativ neu. Diese dienen als sogenannte Präprozessoren. das bedeutet, wenn beispielsweise jemand ein Dokument in der Elasticsearch speichern möchte, so kann er dies über die Load-Balancer-Node einsteuern, diese überprüft dann, ob eine sogenannte Pipeline durchlaufen werden muss mit einem Präprozessor und speichert das resultierende Dokument in einer Data-Node. Wichtig ist, dass in einem Elasticsearch-Cluster jeder Server mehrere dieser Rollen einnehmen kann gleichzeitig, idealerweise sogar alle Rollen auf einmal. Je nach Verfügbarkeit Szenario sollte man also bestimmen, ob man bestimmte Rollen nur speziellen Servern geben möchte, oder einzelne Server mehrere Rollen übernehmen lässt. Lassen Sie uns also als nächstes ein solches Cluster konfigurieren. Üblicherweise beginnt man auf jedem Server mit der elasticsearch.yml-Datei. Diese ist die Hauptkonfigurationsdatei innerhalb des Elasticsearch-Ordners im Ordner "config". Auf jedem Server ist diese Datei also einzeln anzupassen. Wichtig ist, damit alle Server dem Cluster beitreten können, müssen alle den gleichen Cluster-Namen tragen. Standardmäßig ist dieser auf Elasticsearch gesetzt, sollte aber in einem produktiven Szenario durch einen eigenen Namen ausgetauscht werden. Dieser Name verhindert auch, dass Server, die nicht Teil dieses Clusters sein sollen, versehentlich beitreten. Außerdem sollte ein jeder Server in einem Cluster einen entsprechenden Namen tragen, idealerweise auch mit seiner jeweiligen Rolle, um schnell erkennen zu können, wo ein Problem entsteht. Weiterhin wichtig für eine Cluster-Konfiguration ist, wie die Server sich gegenseitig finden können. Dies passiert entweder über Multicast oder über Unicast. In einer produktiven Konfiguration sollte Unicast verwendet werden. Das bedeutet, dass man in dieser Konfigurationsdatei hier eine Liste von Servern angibt, die auf jedem Fall verfügbar sind. Das bedeutet, dass nicht jeder Server hier angegeben werden muss, der Teil des Clusters ist, sondern lediglich Server, die dabei helfen können, die restlichen Server im Cluster zu identifizieren, also idealerweise Server mit der Rolle "Master". Außerdem sollte auf jedem Server gleich konfiguriert die Anzahl von minimalen Master-Nodes sein. Das bedeutet, dass ein Cluster erst dann funktioniert, wenn die minimale Anzahl an Master-Nodes erreicht wurde. In meinem Beispiel hier also funktioniert das Cluster erst dann, wenn mindestens drei Master-Nodes zur Verfügung stehen. Als nächstes sollte man noch pro Server die jeweilige Rolle definieren. Dies kann man mit der Konfiguration von "node.master=true", "node.data=true" und "node.ingest=true". Wenn diese Stellweichen also alle auf "true" gesetzt sind, so übernimmt ein Server alle drei Rollen auf einmal: Master-Node, Data-Node und Ingest-Node. Je nachdem, welche Rollen ich für den Server vorgesehen habe, kann ich jeweils einzelne Rollen ausschalten. Sollte ich alle Rollen ausschalten, so handelt es sich um eine Load-Balancer-Node. Als nächstes starte ich nun beispielhaft auf meinem Rechner eine Elasticsearch-Instanz, in dem Fall mit dem Node-Namen "elastic" und einer Angabe von Local-Storage-Nodes. Dieses Szenario nutze ich nun, um basierend auf einer einzigen Elasticsearch-Installation, mehrere Server u starten, die sich allerdings auf dem gleichen Rechner befinden und auch den gleichen Datenordner benutzen. Dieses Szenario dient lediglich der Simulation und sollte niemals in einem produktiven Kontext verwendet werden. Nach etwas 30 Sekunden erhalte ich eine Fehlermeldung, dass es einen Timeout gab. Das liegt daran, dass mein Cluster aktuell voraussetzt, dass mindestens drei Master-Nodes zur Verfügung stehen. ich starte nun also eine zweite Node, in dem Fall mit der Bezeichnung "elastic 2". Außerdem vergebe ich hier die Rolle "master" und deaktiviere alle anderen Rollen. Auch diese Node hat nun den dreißigsekündigen Timeout, da wir bis jetzt erst zwei Master-Nodes haben. API-technisch äußert sich das so, dass wenn man den Cluster "Statistiken Endpunkt" aufruft, man bisher nur eine einzige Node sieht, statt zwei. Wenn man den zweiten Server aufruft, sieht man wiederum eine einzige Node, da alle Nodes noch nicht zueinander gefunden haben. Starte ich nun eine dritte Node mit der Bezeichnung "elastic 3" und der Rolle "master", so wurde das Cluster nun erfolgreich gestartet und eine Master-Instanz bestimmt. Beim Aufruf der Cluster-Statistiken sehe ich nun alle drei Nodes und einen Status von "green". Mein Cluster wurde also erfolgreich gestartet. Zu guter Letzt lasse ich noch eine Load-Balancer-Node mit der Bezeichnung "elastic 4" dem Cluster beitreten. alle Rollen sind hier deaktiviert. Um Ihnen nun einen Überblick über alle Server zu verschaffen, kann ich den Endpunkt "_nodes" verwenden. Ich starte eine Anfrage und kopiere die Antwort in einem Tool, dass mir die JSON-Daten besser strukturiert darstellt. Ich habe hier nun also die Liste von vier Nodes, und beim Aufklappen einer einzelnen, wie beispielsweise "elastic 4", sehe ich, dass keine Rolle definiert ist. Bei der Node "elastic 2" ist die Rolle "master" definiert. Bei der ersten Node "elastic" sind alle drei Rollen definiert. Da falls nicht explizit angegeben, ein Server automatisch alle Rollen übernimmt. In diesem Video haben wir nun also ein Cluster eingerichtet. Dabei war es ausschlaggebend, dass der Cluster-Name für alle Server im Cluster gleich ist. Wichtig ist, die verschiedenen Server auch unterschiedlich zu benennen und üblicherweise auch mit einem wiedererkennbaren Namen. Besonders bei der Discovery sollte man darauf aufpassen, in produktiven Szenarien Unicast-Discovery zu verwenden. Denn das Selbstidentifizieren der Netzwerk-Segmenten mit Multicast, kann zu unvorhersehbaren Problemen führen. Zu Anfang habe ich Ihnen noch einen Überblick darüber gegeben, welche Rollen in Elasticsearch existieren. Da wären zum einen die Master-Node, die ausschlaggebend dafür ist, dass das Cluster funktionieren kann, die Data-Node, die die Daten als solches beinhaltet, die Ingest-Node, die Daten vorprozessiert, bevor sie gespeichert werden und die Load-Balncer-Node, die Anfragen in das Cluster abfedern kann.

Elasticsearch Grundkurs

Lernen Sie, Elasticsearch und seine Einsatzgebiete zu verstehen und mit der API zu interagieren.

2 Std. 19 min (23 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Themen:
Programmierung
Exklusiv für Abo-Kunden
Erscheinungsdatum:23.02.2017

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!