Mit OpenSearch Clusterperformancegröße suchen
Erfahren Sie, wie Sie das OpenSearch-Cluster effektiv skalieren können.
OpenSearch ist eine Open-Source-Such- und Analyse-Engine, die von Loganalysen und Beobachtbarkeit bis hin zu Volltextsuchfunktionen alles bietet. OpenSearch ist eine zuverlässige Suchplattform, die sowohl strukturierte als auch unstrukturierte Daten verarbeitet und Echtzeit-Suche, Analysen und Visualisierung großer Datenmengen bietet. Unabhängig davon, ob Sie die verwaltete OpenSearch von einem Cloud-Provider verwenden oder sie On Premise ausführen, ist die richtige Skalierung Ihres OpenSearch-Clusters für Performance und Kosteneffizienz unerlässlich.
Die Größe eines OpenSearch-Clusters kann eine Herausforderung darstellen, da keine Einheitsformel vorhanden ist. Eine falsche Größe kann zu langsamer Abfrageperformance, ineffizienter Indexierung oder sogar zu Ausfallzeiten führen. In diesem Thema werden die Schlüsselfaktoren behandelt, die sich auf die Clustergröße auswirken und umsetzbare Anleitungen für den Einstieg bieten. Das Thema führt Sie auch durch eine Übung zur Kapazitätsplanung, um die Konzepte in die Praxis umzusetzen.
Faktoren, die sich auf Leistung und Kosten auswirken
Bei der Skalierung und Bestimmung der Kapazität eines OpenSearch-Clusters müssen Kosten und Performance ausgeglichen werden. Mehrere Faktoren beeinflussen sowohl Performance- als auch Größenentscheidungen und machen es unerlässlich, Daten zu diesen Aspekten zu sammeln, um Ihren Kapazitätsplanungsprozess zu optimieren.
Sie können diese Faktoren in die folgenden Kategorien gruppieren: Anwendungsfallspezifische, datenbezogene und ressourcenbezogene Überlegungen.
- Anwendungsfallspezifisch: Diese Faktoren sind der beabsichtigte Zweck des OpenSearch-Deployments. Wird das Cluster beispielsweise für die Loganalyse oder -beobachtbarkeit verwendet, was in der Regel eine höhere Anzahl von Schreibvorgängen im Vergleich zu Lesevorgängen beinhaltet? Oder wird es für die Anwendungssuche verwendet, bei der Daten einmal geschrieben und oft gelesen werden? Oder soll das Cluster ressourcenintensive Workloads für maschinelles Lernen unterstützen? Wenn Sie Ihren Anwendungsfall verstehen, können Sie die erforderliche Lese- und Schreiblatenz und den erforderlichen Durchsatz, Abfragemuster und die zu optimierenden Abfragetypen wie Filter, Aggregationen oder einfache Suchen bestimmen.
- Datenbezogen: Dieser Faktor umfasst das zu speichernde Datenvolumen, den Datentyp (strukturiert oder unstrukturiert), die Dokumentgröße, die Kardinalität, Feldtypen und die Definition von Feldzuordnungen. Außerdem tragen der verwendete Komprimierungscodec sowie die Größe und Anzahl der Indizes, Shards und Replikate zur Gesamtgröße und Performance des Clusters bei.
- Ressourcenbezogen: Diese Faktoren beinhalten die Konfiguration und die Anzahl der Knoten im Cluster, einschließlich Cluster Manager-Knoten, Datenknoten und Dashboard-Knoten. Diese Ressourcen wirken sich direkt auf die Fähigkeit des Clusters aus, die definierte Workload zu verarbeiten und die beste Performance sicherzustellen.
Schritte zum Skalieren des OpenSearch-Clusters
Obwohl die Kapazitätsplanung zunächst überwältigend erscheinen kann, wird sie überschaubarer, wenn Sie experimentieren und Bedenken inkrementell ansprechen. Der Schlüssel besteht darin, mit einer ersten Schätzung zu beginnen, die auf bewährten Best Practices basiert, kontinuierlich zu bewerten, ob Ihre Key Performance Indicators (KPIs) erfüllt werden, und zu iterieren, bis Sie das ideale Gleichgewicht zwischen Kosten und Leistung erreichen. Die folgenden Schritte beschreiben den Kapazitätsplanungsprozess:
Speicheranforderungen schätzen
In diesem Abschnitt können Sie die besprochenen Prinzipien auf eine realistische Übung zur Clustergröße anwenden. Angenommen, Sie haben einen Anwendungsfall für Loganalysen, in dem Sie Daten über mehrere Indizes in einem OpenSearch-Cluster mit einer Rate von 10 GB pro Tag aufnehmen. Ihr Ziel ist es, die Daten für maximal 90 Tage aufzubewahren, danach können Sie sie sicher verwerfen.
Die Datenaufnahme kann je nach Anwendungsfall entweder in Batches oder kontinuierlich erfolgen. In vielen Anwendungssuch- und Business-Intelligence-Szenarios werden Daten während Batchprozessen in Massen geladen und dann für verschiedene Vorgänge wie Filtern, Aggregation und Suche abgefragt. Diese Arten von Indizes gelten als langlebig, und ihre Speicheranforderungen können in der Regel durch die Analyse der Quelldaten geschätzt werden, die sich selten ändern.
Für andere Anwendungsfälle wie Loganalysen, Zeitreihenanalysen und die Überwachung von realen Benutzern werden Daten kontinuierlich in das Cluster aufgenommen, wobei Indizes nach Erreichen einer bestimmten Größe oder eines bestimmten Zeitschwellenwerts verschoben werden. Für diese Indextypen ist es wichtig, das Datenvolumen zu berechnen, das über einen bestimmten Zeitraum aufgenommen wurde, und dann mit dem erforderlichen Aufbewahrungszeitraum zu multiplizieren, um den Speicherbedarf abzuschätzen.
Neben dem gesamten Datenvolumen, das aufgenommen wird, beeinflussen mehrere andere Faktoren die erforderliche Speichermenge:
- Aufbewahrungszeitraum (r): Die Dauer, für die Daten im Cluster aufbewahrt werden, bestimmt die maximale Datenmenge, die zu einem bestimmten Zeitpunkt gespeichert wird. Mit dieser Abbildung können Sie die Kapazität des Clusters schätzen, um das Worst-Case-Szenario zu bewältigen, bei dem die größte Datenmenge vorhanden ist, und eine ideale Performance auch unter Spitzenspeicherbedingungen sicherstellen.
- Replikatanzahl (rc): Jedes Replikat ist eine exakte Kopie seines primären Shards und dient sowohl zu Zuverlässigkeits- als auch zu Performancezwecken. Um Datenverlust zu vermeiden, empfehlen wir, mindestens ein Replikat zu verwenden, das die Standardeinstellung für jeden Index ist. Wenn Ihr Anwendungsfall hohe Lese-Volumes umfasst, kann es sinnvoll sein, mehr als ein Replikat zu konfigurieren. Dadurch können mehrere Replikat-Shards nebenläufige Suchabfragen verarbeiten, wodurch die Last verteilt und die Abfrageperformance verbessert wird.
- Komprimierungsverhältnis (cr): Die auf dem Datenträger gespeicherten Daten sind nicht identisch mit dem aufgenommenen Raw-Daten-Volume. Stattdessen ist sie aufgrund der während des Indexierungsprozesses angewendeten Komprimierung normalerweise kleiner. OpenSearch unterstützt verschiedene Komprimierungscodecs, die jeweils einen anderen Kompromiss zwischen Komprimierungsverhältnis und Performance bieten. Sie können den am besten geeigneten Codec für Ihren Anwendungsfall während der Indexerstellung auswählen.
Das erreichte Komprimierungsverhältnis hängt von mehreren Faktoren ab, darunter der Datentyp (strukturiert vs. unstrukturiert), die Anzahl der wiederholten oder leeren Feldwerte, die Datenkardinalität und die Gesamtgröße der Daten. Eine angemessene Startannahme für die Komprimierung liegt typischerweise zwischen 25% und 40%. Beispielsweise würden 10 GB Raw-Daten zwischen 6 GB (cr=1,67) und 7,5 GB (cr=1,33) auf der Festplatte belegen. Es ist jedoch wichtig, diese Annahme mit tatsächlichen Tests für Ihren spezifischen Anwendungsfall zu validieren.
- OpenSearch Indexierungs-Overhead (o1): OpenSearch verursacht bis zu 10% Speicher-Overhead für die Indexierung von Rohdaten. Nach der Indexierung können Sie die API
/_cat/indices?vzusammen mit dem Wertpri.store.sizeverwenden, um den genauen Wert im Istwert zu berechnen. - OpenSearch Service Overhead (o2): OpenSearch reserviert für Segmentzusammenführungen, Logs und andere interne Vorgänge bis zu 20% des Speicherplatzes auf jeder Instanz mit einem Maximum von 20 GB.
- Betriebssystem-Overhead (o3): Standardmäßig reserviert Linux 5% des Dateisystems für den Root-Benutzer, um sicherzustellen, dass kritische Systemprozesse wie Logging und temporäre Dateierstellung weiterhin funktionieren, wenn der Datenträger fast voll ist. Dieser reservierte Speicherplatz hilft auch bei der Systemwiederherstellung und verhindert die Datenträgerfragmentierung, sodass Betriebsunterbrechungen vermieden werden.
- Puffer zur Berücksichtigung der Fehlermarge (b): Es wird empfohlen, einen 5-10%-Puffer hinzuzufügen, um menschliche Fehler und zu optimistische Annahmen zu berücksichtigen, da die Shard-Anzahl nach der Definition eines Index nicht geändert werden kann. Sie können diesen Puffer später anpassen oder entfernen, wenn Sie die tatsächlichen Nutzungsdaten erfassen.
- Formula:
Required Storage = Source Data * r * (1 + rc) * (1/cr) * (1 + o1) * (1/1-o2) * (1/1-o3) * (1+b)Die Anwendung dieser Formel auf die Beispielübung führt zu Folgendem:
- Quelldaten = 10 GB pro Tag
- r = 90, unter Berücksichtigung der Aufbewahrungsfrist von 90 Tagen
- rc = 1, wenn man bedenkt, dass wir 1 Replikat wollen
- cr = 1,33, wenn man bedenkt, dass wir ein Kompressionsverhältnis von 25% erreichen
- o1 = 0,1 (10% Indizierungs-Overhead)
- o2 = 0,2 (20% Service-Overhead)
- o3 = 0,05 (5% Overhead des Betriebssystems)
- b = 0,1 (10% Fehlerpuffer)
- Erforderlicher Speicher = 10 * 90 * 2 * 0,75 * 1,1 * 1/0,8 * 1/0,95 * 1,1 = 2150 GB = 2,2 TB (gerundet)
Sharding-Strategie definieren
Nachdem Sie Ihre Speicheranforderungen festgelegt haben, besteht der nächste Schritt darin, Ihre Sharding-Strategie zu definieren. Dazu gehört die Bestimmung der Größe, Anzahl und Verteilung Ihrer Shards. OpenSearch-Shards sind unabhängige Partitionen Ihrer Indexdaten, die darauf ausgelegt sind, Daten auf Clusterknoten zu verteilen, um eine hohe Performance und Fehlertoleranz sicherzustellen.
Es gibt zwei Arten von Shards: Primär- und Replikat. Ein primärer Shard ist die autoritative Kopie einer Datenpartition und verarbeitet Lese- und Schreibvorgänge. Im Gegensatz dazu ist ein Replikat-Shard eine exakte Kopie des primären Shards und wird ausschließlich für Lesevorgänge verwendet. Alle Schreibanforderungen werden zuerst an das primäre Shard weitergeleitet. Danach werden die Daten auf die Replikat-Shards repliziert.
OpenSearch weist sowohl Primär- als auch Replikat-Shards automatisch Knoten zu, um sicherzustellen, dass Primär-Shards so gleichmäßig wie möglich verteilt werden und dass Primär- und Replikat-Shards nicht auf demselben Knoten platziert werden. Beispiel: Ein Index mit drei primären und je einem Replikat-Shard ergibt sechs Shards insgesamt – drei primäre und drei Replikat-Shards. In dieser Konfiguration wird jede Schreibanforderung von zwei Shards (einem primären und einem Replikat) verarbeitet, während Leseanforderungen von einer beliebigen Kombination aus Primär- und Replikat-Shards verarbeitet werden können, was Redundanz und Load Balancing ermöglicht.
Shard-Größe
Jeder Shard in OpenSearch ist ein unabhängiger Lucene-Index, d.h. seine Größe wird durch die verfügbaren Hardwareressourcen eingeschränkt, um eine angemessene Performance aufrechtzuerhalten. Es ist jedoch wichtig, sowohl zu wenige als auch zu viele Shards zu vermeiden. Zu wenige große Shards können zu einer langsameren Suchperformance führen und Fehlertoleranz erschweren, da das Verschieben großer Shards zwischen Knoten im Falle eines Fehlers zeitaufwendig wird. Umgekehrt können zu viele Shards zu einer ineffizienten Ressourcennutzung führen und zu übermäßig verteilten Abfragen führen, was zu zeitaufwändigen Aggregationen und einer langsameren Abfrageperformance führt.
Für Workloads mit Leselast, die häufigere Lookups im gesamten Lucene-Index erfordern, empfehlen wir, Shard-Größen zwischen 10 und 30 GB beizubehalten, um eine geringe Latenz zu gewährleisten. Bei Workloads mit hohem Schreibaufwand können Shard-Größen größer sein, in der Regel zwischen 30 und 50 GB, um höhere Datenaufnahmeraten zu ermöglichen, ohne die Performance zu beeinträchtigen. Da es sich bei diesem Beispiel um Loganalysen handelt, die schreiblastig sind, können Sie die Größe Ihrer Shards auf 40 GB festlegen.
Shard-Anzahl
Das primäre Ziel bei der Entscheidung über die Anzahl der Shards besteht darin, die Indexdaten gleichmäßig auf alle Datenknoten im Cluster zu verteilen. Sie können die Shard-Anzahl berechnen, indem Sie das gesamte Daten-Volume durch die erforderliche Shard-Größe dividieren. Stellen Sie sicher, dass die Shard-Anzahl ein gleichmäßiges Vielfaches der Anzahl der Datenknoten im Cluster ist, damit die Verteilung der Shards ausgeglichen bleibt. Beispiel: Wenn Sie 8 primäre Shards haben, können Sie 2, 4 oder 8 Datenknoten wählen. Die Wahl von 3 Datenknoten würde in diesem Fall zu einer ungleichmäßigen Verteilung führen, wobei einige Knoten mehr Shards enthalten als andere, was zu einer ungleichmäßigen Belastung im gesamten Cluster führt.
Die folgende Gleichung gibt die Shard-Anzahl basierend auf den Gesamtdaten an, die Sie für den Index und Ihre bevorzugte Shard-Größe speichern möchten
Shard Count = Total Index Size / Desired Shard Size
Diese Daten werden schrittweise im Laufe der Zeit aufgenommen und nicht alle gleichzeitig. Infolgedessen kann die mit dieser Formel berechnete Shard-Anzahl zunächst zu zu kleinen Shards führen, aber im Laufe der Zeit werden sie wahrscheinlich die bevorzugte Größe erreichen. Um diese Diskrepanz in den frühen Phasen zu berücksichtigen, bevor die Daten auf das geschätzte Volumen anwachsen, empfehlen wir Ihnen, einen Mittelweg zu wählen, indem Sie die Shard-Anzahl auf einen angemesseneren Wert basierend auf den aktuellen Anforderungen anpassen.
Für die Beispielübung würde die Gesamtanzahl der Shards ungefähr 50 betragen, berechnet als 2150 GB/40 GB Shard-Größe, einschließlich Replikaten. Die primäre Shard-Anzahl sollte etwa 25 betragen. Wir empfehlen Ihnen, eine primäre Shard-Anzahl zu versuchen, die ungefähr dieser Nummer entspricht.
Datenknoten konfigurieren
Nachdem Sie Ihre Speicheranforderungen festgelegt und die Größe und Anzahl der Shards festgelegt haben, können Sie Hardwareentscheidungen treffen. Während die Hardwareanforderungen je nach Workload variieren können, finden Sie hier einige allgemeine Empfehlungen.
Heap-Speicher
OpenSearch verwendet in der Regel 50% des verfügbaren Speichers auf einem Datenknoten, wobei der verbleibende Teil dem Betriebssystem zugewiesen ist. Beispiel: Wenn ein Datenknoten 32 GB Arbeitsspeicher hat, verwendet OpenSearch 16 GB für seinen Heap. Die empfohlene maximale Heap-Größe beträgt in den meisten Fällen 32 GB. Wenn Sie dieses Limit überschreiten, kann dies zu einem erhöhten unnötigen Overhead führen, was potenzielle Performancevorteile beeinträchtigen kann. Der empfohlene maximale Arbeitsspeicher für einen Datenknoten beträgt 64 GB, wobei 32 GB dem OpenSearch-Heap zugewiesen sind. Nach sorgfältiger Kosten-Nutzen-Analyse können Sie Speicher mit mehr als 64 GB Arbeitsspeicher für Sonderfälle auswerten.
Für diese Übung ist jeder unserer Datenknoten ein 8-vCPU/32-GB-Rechner, der 16 GB Heap für die Verwendung durch OpenSearch übrig lässt.
Speicher
In der Regel reicht das Verhältnis von Speicher zu Speicher auf Datenknoten von 1:16 (für Workloads mit hoher Suchaktivität oder zahlreichen aktiven Shards) bis 1:64 (für schreiblastige Workloads oder Knoten, auf denen weniger häufig auf Shards zugegriffen wird). Beispielsweise wird empfohlen, dass ein Knoten mit 64 GB RAM zwischen 1 und 4 TB Speicher hat. Die ideale Speichergröße pro Knoten kann jedoch variieren und sollte durch Experimente bestimmt werden. Manchmal kann ein anderes Verhältnis passender sein.
Für diese Übung Datenknotenkonfiguration von 8 vCPU, 32 GB Speicher eine gute Speichergröße, die unter Berücksichtigung eines Speicher-zu-Speicher-Verhältnisses von 1:16 um 32 * 16 = 512 GB angehängt werden kann. Mit 2150 GB Daten zum Speichern benötigen wir mindestens 5 Knoten mit jeweils 512 GB Speicher.
Shards pro Knoten
OpenSearch verwendet Heap-Speicher hauptsächlich zum Speichern von Segmentmetadaten für jedes Shard. Dadurch können Datenspeicherorte während Suchvorgängen schnell abgerufen werden. Diese Metadaten enthalten Informationen darüber, wo sich Daten auf dem Datenträger in jedem Segment befinden, sodass OpenSearch das gesamte Shard während der Suche nicht scannen und so die Performance verbessern kann.
Es gibt jedoch eine Begrenzung, wie viele Shards ein bestimmter Heap-Speicher effizient unterstützen kann. Als abschließende Prüfung stellen Sie nach Berücksichtigung der Shard-Größe, des Heap-Speichers und der Speicherrichtlinien sicher, dass die Anzahl der Shards für jedes GB Heap-Speicher 25 nicht überschreitet. Beispiel: Ein Datenknoten mit 32 GB Heap-Speicher darf zu keinem Zeitpunkt mehr als 800 Shards hosten.
Prüfen Sie, ob Sie unter dem Grenzwert "shards per node" arbeiten. Beispiel: Wenn Sie fünf Datenknoten und 25 primäre Shards mit jeweils einem Replikat haben, entspricht dies insgesamt 10 Shards pro Knoten. Wenn jeder Knoten 16 GB Heap hat, sind Sie unter 25 Shards pro GB.
CPU-Cores
OpenSearch ist eine CPU-intensive Anwendung, die Aufgaben wie Indizieren, Suchen und Aggregieren von Daten verarbeitet. Daher ist es von entscheidender Bedeutung, über genügend CPU-Cores zu verfügen, um eine effiziente Ausführung dieser Vorgänge sicherzustellen. Die genaue Anzahl der erforderlichen CPU-Cores hängt von der Workload und dem jeweiligen Anwendungsfall ab.
Für jedes aktive Shard (ein Shard, von dem gelesen oder geschrieben wird) ist eine vCPU erforderlich, um seine Vorgänge zu verarbeiten. Als Best Practice wird empfohlen, mit mindestens einer vCPU pro aktivem Shard zu beginnen. Beispiel: Wenn jeder Ihrer Datenknoten 8 vCPUs aufweist, versuchen Sie, das Cluster so zu konfigurieren, dass kein Datenknoten mehr als acht aktive Shards hostet.
Wenn Ihr Cluster jedoch über viele Shards verfügt, umfangreiche Aggregationen durchführt, Dokumente häufig aktualisiert oder viele komplexe Abfragen verarbeitet, reichen diese Ressourcen möglicherweise nicht aus. Ein guter Ausgangspunkt ist die Zuweisung von 2 vCPUs und 8 GB Arbeitsspeicher pro 100 GB Speicherbedarf. Dieser Betrag ist eine Annäherung und Sie sollten basierend auf Ihren spezifischen KPIs verfeinert werden.
In unserer Beispielübung wird empfohlen, einen Knoten mit 6 bis 8 vCPU-Cores zu verwenden, wenn man bedenkt, dass 4 der 10 Shards aktiv für Indexierungs- oder Suchvorgänge verwendet werden.
Datenknotenanzahl
Berechnen Sie die Anzahl der Datenknoten, die zum Hosten aller Shards erforderlich sind, basierend auf den verfügbaren Ressourcen (Cores und Heap-Speicher) für jeden Datenknoten und der Gesamtanzahl der Shards. Es wird empfohlen, mindestens zwei Datenknoten in einem Cluster zu haben, um die Replikation zu ermöglichen und Fehlertoleranz und Zuverlässigkeit sicherzustellen. Bei größeren Clustern sollten Sie die Skalierbarkeit planen. Die maximale Anzahl von Datenknoten, auf die ein Cluster strecken kann, beträgt in der Regel 180–200. Bei größeren Beträgen sollten Sie das Cluster in kleinere, besser zu verwaltende Einheiten aufteilen. Kleinere Cluster mit etwa 40-50 Knoten sind vorzuziehen, da sie eine bessere betriebliche Verwaltbarkeit bieten.
Ein guter Ausgangspunkt für unser Beispielcluster sind 5 Datenknoten, die jeweils 8 vCPUs, 32 GB Arbeitsspeicher und 512 GB Speicher umfassen. Jeder Datenknoten hostet insgesamt etwa 10 Shards mit jeweils 40 GB.
Cluster Manager-Knoten konfigurieren
Um die Clusterstabilität und -performance zu verbessern, empfehlen wir die Verwendung dedizierter Cluster Manager-Knoten. Diese Knoten entlasten kritische Verwaltungsaufgaben von den Datenknoten, sodass sie sich ausschließlich auf die Datenspeicherung und Abfrageverarbeitung konzentrieren können. Cluster Manager-Knoten speichern keine Daten und verarbeiten keine Datenuploadanforderungen. Stattdessen verwalten sie den Gesamtzustand und den Status des Clusters. Sie verfolgen alle Knoten im Cluster, überwachen die Anzahl der Indizes und überwachen die Shard-Verteilung für jeden Index.
Managerknoten verwalten Routinginformationen, aktualisieren den Clusterstatus bei Änderungen (z.B. Indizes erstellen oder Knoten hinzufügen/entfernen) und replizieren Statusaktualisierungen auf allen Knoten. Außerdem senden sie Taktüberwachungssignale, um den Zustand und die Verfügbarkeit von Datenknoten zu überwachen und sicherzustellen, dass das Cluster betriebsbereit bleibt.
Es wird empfohlen, mindestens drei Cluster Manager-Knoten zu verwenden, um eine optimale Zuverlässigkeit zu gewährleisten. Nur einen Managerknoten zu haben, ist riskant, da das Cluster bei einem Ausfall dieses Knotens nicht mehr verfügbar sein könnte. Außerdem ist die Verwendung einer geraden Anzahl von Managerknoten nicht ideal, da sie verhindert, dass das Cluster das erforderliche Quorum bildet, um im Fehlerfall einen neuen Manager zu wählen. Drei Managerknoten stellen bei einem Ausfall zwei Backupknoten bereit und stellen ein Quorum für die Auswahl eines neuen Managers sicher.
Die Erhöhung der Anzahl der Manager-Knoten in ungeraden Schritten (5, 7 usw.) kann die Fehlertoleranz erhöhen, sodass das Cluster mehr Manager-Knotenausfällen standhalten kann, während es betriebsbereit bleibt. Das Hinzufügen von mehr als drei Manager-Knoten ist jedoch übertrieben und sollte nur für außergewöhnlich große Cluster oder spezielle Anwendungsfälle nach eingehender Analyse berücksichtigt werden.
Obwohl dedizierte Cluster Manager-Knoten Such- und Abfrageanforderungen nicht verarbeiten, sind ihre Ressourcenanforderungen eng an die Anzahl der Datenknoten, Indizes und Shards gebunden, die sie verwalten müssen. Die folgende Richtlinie kann als Ausgangspunkt dienen:
- 4 vCPU und 8 GB Arbeitsspeicher: Bis zu 16
- 8 vCPU und 16 GB Arbeitsspeicher: Von 17 bis 32
- 8 vCPU und 32 GB Arbeitsspeicher: Von 33–64
- 16 vCPU und 64 GB Arbeitsspeicher: Von 65 bis 128
Da wir fünf Datenknoten haben, können wir mit drei Cluster Manager-Knoten beginnen, die jeweils 4 vCPU und 8 GB Arbeitsspeicher haben.
Dashboard-Knoten konfigurieren
Dashboard-Knoten sind der einfachste Knotentyp, da sie Daten nicht direkt lokal indexieren oder durchsuchen und minimale Speicheranforderungen haben. Diese Knoten fungieren hauptsächlich als API-Server, stellen Anforderungen an das Cluster aus und verarbeiten Daten-I/O. Die wichtigsten Ressourcen, die für Dashboard-Knoten erforderlich sind, sind CPU und Speicher, die von der Anzahl der gleichzeitigen Dashboard-Anforderungen abhängen.
Obwohl es üblich ist, einen einzelnen Dashboard-Knoten in kleineren oder sogar Produktionsclustern zu verwenden, empfehlen wir für die High Availability-(HA-)Dashboardanwendung OpenSearch, mindestens zwei Knoten zu verwenden. Ein guter Ausgangspunkt ist, je nach Ihren HA-Anforderungen einen oder zwei Dashboard-Knoten bereitzustellen. Weisen Sie bei Szenarios mit niedrigem Durchsatz 4 vCPUs und 8 GB Arbeitsspeicher pro Knoten zu. Bei Szenarios mit hohem Durchsatz weisen Sie 8 vCPUs und 16 GB Arbeitsspeicher pro Knoten zu. Überwachen Sie nach dem Deployment die CPU-Auslastung und den JVM-Druck, um Ressourcen basierend auf der tatsächlichen Performance zu optimieren.
Da Ihre Loganalyseanwendung hauptsächlich von einer begrenzten Anzahl von Experten für Ursachenanalyse, Debugging und gelegentliche Überprüfung und Berichterstellung verwendet wird, können Sie mit einem einzelnen Dashboard-Knoten beginnen, der 8 vCPUs und 16 GB Arbeitsspeicher enthält. Anschließend können Sie die Ressourcen anpassen (entweder vertikal oder horizontal skalieren) basierend auf Nutzungsmustern und der Performance dieser anfänglichen Konfiguration.
Testen und Iterieren
Führen Sie die folgenden Tests aus, und passen Sie die Konfiguration nach Bedarf an:
- Produktionsähnliche Testdaten verwenden: Stellen Sie sicher, dass Ihre Testdaten die Produktionsdaten, die in das Cluster aufgenommen werden, genau widerspiegeln. Dazu gehört der Abgleich der Struktur von Dokumenten (Felder, Datentypen usw.) und ihrer Größe mit dem, was in der Produktion verwendet wird.
- Real-World Load simulieren: Führen Sie Leistungstests unter realen Bedingungen durch. Erstellen Sie zunächst ein kleines Cluster, das die erwartete Last simuliert, und extrapolieren Sie dann die Ergebnisse, um die Performance größerer Cluster zu schätzen. Ihre Testdaten sollten ein beträchtliches Volumen (in GB) aufweisen, um die Last genau widerzuspiegeln.
- Schlüsselmetriken überwachen und analysieren: Überwachen Sie kontinuierlich kritische Metriken wie CPU-Auslastung, JVM-Druck, Datenträgernutzung, Such- und Indexierungslatenz, Such- und Indexierungsraten und allgemeine Verfügbarkeit. Passen Sie die Clusterkonfiguration nach Bedarf an, um die gewünschten KPIs zu erfüllen.
- Kontinuierliches Monitoring in der Produktion: Eine kontinuierliche Überwachung Ihres Produktionsclusters ist unerlässlich. Prüfen Sie diese KPIs regelmäßig, und ergreifen Sie Korrekturmaßnahmen, wenn die Performance von den erwarteten Schwellenwerten abweicht. Sich nur auf einmalige Tests zu verlassen, bevor Sie live gehen, reicht nicht aus. Kontinuierliche Validierung ist entscheidend für die Aufrechterhaltung der besten Performance.
Die Clustergröße, die Sie für diesen Beispielanwendungsfall gewählt haben, stellt einen anfänglichen Ausgangspunkt dar. Die endgültige Konfiguration, die für Ihren spezifischen Anwendungsfall geeignet ist, kann je nach den Ergebnissen Ihrer Leistungstests variieren.
Abschluss
Für die Skalierung eines OpenSearch-Clusters ist ein durchdachter Ansatz erforderlich, der Performance und Kosten ausgleicht, Faktoren wie Anwendungsfall, Datenvolumen und Ressourcenzuweisung berücksichtigt. Dieses Thema enthält wichtige Anleitungen, Best Practices und Daumenregeln für den Einstieg in die Kapazitätsplanung. Durch die Befolgung eines strukturierten Prozesses und die Iteration basierend auf Leistungstests können Sie sicherstellen, dass Ihr Cluster sowohl für Effizienz als auch Skalierbarkeit optimiert ist. Regelmäßige Überwachung und Änderungen als Reaktion auf reale Belastungen sind für die Aufrechterhaltung der Spitzenleistung unerlässlich. Die optimale Clusterkonfiguration entwickelt sich weiter, wenn Sie Erkenntnisse aus Ihren spezifischen Workload- und Nutzungsmustern gewinnen.