
- Wie groĂ ist ein Cluster, den ich brauche?
- Nun, es kommt darauf an ... (wĂŒtendes Kichern)
Elasticsearch ist das HerzstĂŒck des Elastic Stack, in dem die ganze Magie von Dokumenten stattfindet: Ausstellen, Empfangen, Verarbeiten und Speichern. Die Leistung hĂ€ngt von der richtigen Anzahl von Knoten und der Architektur der Lösung ab. Und der Preis ĂŒbrigens auch, wenn Ihr Abonnement Gold oder Platin ist.
Die Hauptmerkmale der Hardware sind Festplatte (Speicher), Speicher (Speicher), Prozessoren (Berechnung) und Netzwerk (Netzwerk). Jede dieser Komponenten ist fĂŒr die Aktion verantwortlich, die Elasticsearch fĂŒr Dokumente ausfĂŒhrt, die jeweils gespeichert, gelesen, berechnet und empfangen / gesendet werden. Lassen Sie uns ĂŒber die allgemeinen Prinzipien der GröĂenbestimmung sprechen und das âes kommt darauf anâ aufzeigen. Am Ende des Artikels finden Sie Links zu Webinaren und verwandten Artikeln. Lass uns gehen!
Dieser Artikel basiert auf
David Moores Webinar Sizing and Capacity Planning . Wir haben seine Argumentation mit Links und Kommentaren ergĂ€nzt, um es ein wenig klarer zu machen. Am Ende des Artikels enthĂ€lt ein Bonustrack Links zu elastischen Materialien fĂŒr diejenigen, die besser in das Thema eintauchen möchten. Wenn Sie gute Erfahrungen mit Elasticsearch gemacht haben, teilen Sie uns bitte in den Kommentaren mit, wie Sie einen Cluster entwerfen. Wir und alle Kollegen wĂ€ren interessiert, Ihre Meinung zu erfahren.
Architektur und Betrieb von Elasticsearch
Zu Beginn des Artikels haben wir ĂŒber 4 Komponenten gesprochen, die die Hardware bilden: Festplatte, Speicher, Prozessoren und Netzwerk. Die Rolle eines Knotens wirkt sich auf die Entsorgung jeder dieser Komponenten aus. Ein Knoten kann mehrere Rollen gleichzeitig ausfĂŒhren. Mit dem Wachstum des Clusters sollten diese Rollen jedoch auf verschiedene Knoten verteilt werden.
Masterknoten ĂŒberwachen den Zustand des Clusters als Ganzes. Bei der Arbeit des Hauptknotens muss ein Quorum eingehalten werden, d.h. Ihre Anzahl sollte ungerade sein (vielleicht 1, aber besser 3).
Datenknoten fĂŒhren Speicherfunktionen aus. Um die Clusterleistung zu erhöhen, mĂŒssen die Knoten in
"heiĂ", "heiĂ" und "kalt" (eingefroren) unterteilt werden . Die ersten sind fĂŒr den Online-Zugriff, die zweite fĂŒr die Speicherung und die dritte fĂŒr die Archivierung. Dementsprechend ist es fĂŒr "heiĂ" sinnvoll, lokale SSD-Laufwerke zu verwenden, und fĂŒr "warm" und "kalt" ist das HDD-Array lokal oder in SAN geeignet.
Um die SpeicherkapazitĂ€t von Knoten fĂŒr die Speicherung zu bestimmen, empfiehlt Elastic die Verwendung der folgenden Logik: "heiĂ" â 1:30 (30 GB Speicherplatz pro Gigabyte Speicher), "warm" â 1: 100, "kalt" â 1: 500). Unter dem
JVM-Heap nicht mehr als 50% des gesamten Speichers und nicht mehr als 30 GB, um einen Garbage Collector-Raid zu vermeiden. Der verbleibende Speicher wird als Cache des Betriebssystems verwendet.
Leistungsindikatoren fĂŒr Elastisearch-Instanzen wie
Thread-Pools und Thread-Warteschlangen sind stĂ€rker von der Prozessorkernauslastung betroffen. Die ersten werden auf der Grundlage der Aktionen gebildet, die der Knoten ausfĂŒhrt: Suchen, Analysieren, Schreiben und andere. Die zweite ist die Warteschlange der entsprechenden Anforderungen verschiedener Typen. Die Anzahl der zur Verwendung verfĂŒgbaren Elasticsearch-Prozessoren wird automatisch festgelegt. Sie können diesen Wert jedoch manuell in den Einstellungen angeben (dies kann hilfreich sein, wenn zwei oder mehr Elasticsearch-Instanzen auf demselben Host ausgefĂŒhrt werden). Die maximale Anzahl von Thread-Pools und Thread-Warteschlangen fĂŒr jeden Typ kann in den Einstellungen festgelegt werden. Die Metrik fĂŒr Thread-Pools ist die primĂ€re Leistungsmetrik fĂŒr Elasticsearch.
Aufnahmeknoten nehmen Eingaben von Kollektoren (Logstash, Beats usw.) entgegen, fĂŒhren Konvertierungen an ihnen durch und schreiben in den Zielindex.
Knoten fĂŒr
maschinelles Lernen sind fĂŒr die Datenanalyse vorgesehen. Wie wir in dem
Artikel ĂŒber maschinelles Lernen in Elastic Stack geschrieben haben , ist der Mechanismus in C ++ geschrieben und funktioniert auĂerhalb der JVM, in der sich Elasticsearch selbst dreht. Daher ist es sinnvoll, solche Analysen auf einem separaten Knoten durchzufĂŒhren.
Koordinatorknoten akzeptieren eine Suchanforderung und leiten sie weiter. Das Vorhandensein dieses Knotentyps beschleunigt die Verarbeitung von Suchanfragen.
Wenn wir die Belastung der Knoten in Bezug auf die InfrastrukturkapazitĂ€ten betrachten, wird die Verteilung ungefĂ€hr so ââaussehen:
Als NĂ€chstes stellen wir in Elasticsearch vier Haupttypen von Operationen vor, fĂŒr die jeweils eine bestimmte Art von Ressource erforderlich ist.
Index - Verarbeitung und Speicherung eines Dokuments im Index. Das folgende Diagramm zeigt die in jeder Phase verwendeten Ressourcen.
Löschen - Löscht ein Dokument aus dem Index.
Aktualisieren - Funktioniert wie Indexieren und Löschen, da Dokumente in Elasticsearch unverÀnderlich sind.
Suche - Abrufen eines oder mehrerer Dokumente oder deren Aggregation aus einem oder mehreren Indizes.

Wir haben die Architektur und die Arten der Lasten herausgefunden und gehen nun zur Bildung eines GröĂenmodells ĂŒber.
Dimensionierung Elasticsearch und Fragen vor seiner Bildung
Elastic empfiehlt die Verwendung von zwei GröĂenstrategien: speicherorientiert und Durchsatz. Im ersten Fall sind Festplattenressourcen und Speicher von gröĂter Bedeutung, und im zweiten Fall Speicher, Prozessorleistung und Netzwerk.
GröĂe der Elasticsearch-Architektur basierend auf der SpeichergröĂe
Vor den Berechnungen erhalten wir die Anfangsdaten. Bedarf:
- Die Menge der Rohdaten pro Tag;
- Die Dauer der Datenspeicherung in Tagen;
- Datentransformationsfaktor (JSON-Faktor + Indexierungsfaktor + Komprimierungsfaktor);
- Anzahl der Shard-Replikationen;
- Die Anzahl der Speicherdatenknoten;
- Das VerhÀltnis von Speicher zu Daten (1:30, 1: 100 usw.).
Leider wird der Datentransformationsfaktor nur empirisch berechnet und hĂ€ngt von verschiedenen Faktoren ab: dem Format der Rohdaten, der Anzahl der Felder in Dokumenten usw. Um dies herauszufinden, mĂŒssen Sie einen Teil der Testdaten in den Index laden. Zum Thema solcher Tests gibt es ein
interessantes Video von der Konferenz und eine
Diskussion in der Elastic Community . Im Allgemeinen können Sie es gleich 1 belassen.
StandardmĂ€Ăig
komprimiert Elasticsearch Daten mit dem LZ4-Algorithmus, aber es gibt auch DEFLATE, das 15% mehr drĂŒckt. Im Allgemeinen kann eine Kompression von 20-30% erreicht werden, dies wird jedoch auch empirisch berechnet. Beim Umschalten auf den DEFLATE-Algorithmus steigt die Rechenleistung.
Es gibt noch weitere Empfehlungen:
- Zahlen Sie 15% ein, um eine Reserve auf dem Speicherplatz zu haben.
- Versprechen Sie 5% fĂŒr zusĂ€tzlichen Bedarf;
- Legen Sie 1 Ăquivalent eines Datenknotens fest, um eine schnelle Migration sicherzustellen.
Kommen wir nun zu den Formeln. Hier ist nichts kompliziert, und wir glauben, dass es fĂŒr Sie interessant sein wird, Ihren Cluster auf Ăbereinstimmung mit diesen Empfehlungen zu ĂŒberprĂŒfen.
Gesamtdatenmenge (GB) = Rohdaten pro Tag * Anzahl der Speichertage * Datentransformationsfaktor * (Anzahl der Replikate - 1)
Gesamtdatenspeicher (GB) = Gesamtdaten (GB) * (1 + 0,15 Lager + 0,05 zusÀtzlicher Bedarf)
Gesamtzahl der Knoten = OK (Gesamtdatenspeicher (GB) / Speichervolumen pro Knoten / VerhĂ€ltnis von Speicher zu Daten + 1 Ăquivalent Datenknoten)
GröĂe der Elasticsearch-Architektur zur Bestimmung der Anzahl der Shards und Datenknoten in AbhĂ€ngigkeit von der SpeichergröĂe
Vor den Berechnungen erhalten wir die Anfangsdaten. Bedarf:
- Die Anzahl der Indexmuster, die Sie erstellen werden.
- Die Anzahl der Kernsplitter und Replikate;
- Nach wie vielen Tagen wird die Indexrotation durchgefĂŒhrt, wenn ĂŒberhaupt;
- Die Anzahl der Tage zum Speichern der Indizes;
- Die Speichermenge fĂŒr jeden Knoten.
Es gibt noch weitere Empfehlungen:
- Ăberschreiten Sie nicht 20 Shards pro 1 GB JVM-Heap auf jedem Knoten.
- Ăberschreiten Sie nicht 40 GB Shard-Speicherplatz.
Die Formeln lauten wie folgt:
Anzahl der Shards = Anzahl der Indexmuster * Anzahl der Hauptshards * (Anzahl der replizierten Shards + 1) * Anzahl der Lagertage
Anzahl der Datenknoten = OK (Anzahl der Shards / (20 * Speicher fĂŒr jeden Knoten))
Elasticsearch-BandbreitengröĂe
Der hĂ€ufigste Fall, wenn eine hohe Bandbreite benötigt wird, ist hĂ€ufig und in groĂer Anzahl Suchanfragen.
Notwendige Anfangsdaten fĂŒr die Berechnung:
- Spitzensuche pro Sekunde;
- Durchschnittliche zulÀssige Antwortzeit in Millisekunden;
- Die Anzahl der Kerne und Threads pro Prozessorkern auf Datenknoten.
Spitzenwert der Threads = OK (Spitzenwert der Suchanfragen pro Sekunde * durchschnittliche Anzahl der Antworten auf eine Suchanfrage in Millisekunden / 1000 Millisekunden)
Volume-Thread-Pool = OKRUP ((Anzahl der physischen Kerne pro Knoten * Anzahl der Threads pro Kern * 3/2) +1)
Anzahl der Datenknoten = OK (Peak-Thread-Wert / Thread-Pool-Volumen)
Möglicherweise sind beim Entwerfen der Architektur nicht alle anfÀnglichen Daten in Ihren HÀnden, aber nach dem Betrachten des
Webinars oder dem Lesen dieses Artikels wird ein VerstÀndnis angezeigt, das sich im Prinzip auf die Menge der Hardwareressourcen auswirkt.
Bitte beachten Sie, dass es nicht erforderlich ist, die angegebene Architektur einzuhalten (z. B. Koordinatenkoordinatenknoten und Handlerknoten erstellen). Es reicht zu wissen, dass eine solche Referenzarchitektur vorhanden ist, und sie kann zu einer Leistungssteigerung fĂŒhren, die Sie mit anderen Mitteln nicht erreichen könnten.
In einem der folgenden Artikel veröffentlichen wir eine vollstĂ€ndige Liste der Fragen, die zur Bestimmung der ClustergröĂe beantwortet werden mĂŒssen.
Um mit uns in Kontakt zu treten, können Sie persönliche Nachrichten auf Habré oder das
Feedback-Formular auf der Website verwenden .
ZusĂ€tzliche MaterialienWebinar "Elasticsearch Dimensionierung und KapazitĂ€tsplanung"Webinar zur KapazitĂ€tsplanung fĂŒr ElasticsearchRede bei ElasticON zum Thema âQuantitative Cluster SizingâWebinar zum Rallye-Dienstprogramm zur Ermittlung von Cluster-LeistungsindikatorenElasticsearch GröĂenartikelElastic Stack Webinar