Elasticsearch Best Practices und zunehmende Leistung

Elasticsearch Best Practices und zunehmende Leistung
In diesem Beitrag werden wir versuchen, Best Practices zu sammeln und zu vermeiden, wenn Sie mit Elasticsearch und Daten in diese gearbeitet haben. Auf diese Weise werden wir wissen, welche Dinge wir benötigen, um vorzugehen, bevor wir überhaupt mit dieser hervorragenden Suchmaschine arbeiten.

Elasticsearch Best Practices

Wir werden mit Best Practices arbeiten, um Elasticsearch zu verfolgen und welche Probleme es verursachen kann, wenn wir diese Punkte vermeiden. Lass uns anfangen.

Definieren Sie immer Es Mappings

Eine Sache, die es sicherlich tun kann, ist, ohne Zuordnungen zu arbeiten. Wenn Sie also mit der Fütterung von JSON -Daten in Ihren ES -Index beginnen, wird sie über die Datenfelder iteriert und eine geeignete Zuordnung erstellt. Dies scheint direkt und einfach zu sein, da ES den Datentyp selbst auswählt. Basierend auf Ihren Daten benötigen Sie möglicherweise ein Feld, um spezifisch Data-Typ zu sein.

Angenommen, Sie indizieren das folgende Dokument:


"id": 1,
"Titel": "Installieren Sie Elasticsearch auf Ubuntu",
"Link": "https: // linuxhint.com/install-elasticsearch-subuntu/",
"Datum": "2018-03-25"

Auf diese Weise markiert Elasticsearch das Feld "Datum" als "Datum" -Typ. Aber wenn Sie das folgende Dokument indexieren:


"id": 1,
"Titel": "Es Best Practices und Performance",
"Datum": "Ausstehend"

Dieses Mal wurde der Typ des Datumsfeldes geändert, und ES wird einen Fehler werfen und es wird nicht zu, dass Ihr Dokument indiziert wird. Um die Dinge zu erleichtern, können Sie einige Dokumente indexieren, sehen, welche Felder von ES indiziert werden, und holen Sie sich die Zuordnung von dieser URL:

Get/index_name/doc_type/_mapping

Auf diese Weise müssen Sie auch die vollständige Zuordnung nicht konstruieren.

Produktionsflaggen

Der Standard -Cluster -Name, den ES beginnt Elasticsarch. Wenn Sie viele Knoten in Ihrem Cluster haben, ist es eine gute Idee, die Namensflags so konsistent wie möglich zu halten, wie:

Cluster.Name: app_es_production
Knoten.Name: app_es_node_001

Abgesehen davon sind die Wiederherstellungseinstellungen für Knoten auch sehr wichtig. Angenommen, einige der Knoten in einem Cluster -Neustart aufgrund eines Fehlers und einigen Knoten starten Sie ein wenig nach anderen Knoten neu. Um die Daten zwischen all diesen Knoten konsistent zu halten, müssen wir das Konsistenzprogramm durchführen, das alle Cluster in einem konsistenten Zustand hält.

Tor.recover_after_nodes: 10

Es ist auch hilfreich, wenn Sie dem Cluster im Voraus mitteilen, wie viele Knoten im Cluster vorhanden sein werden und wie viel Wiederherstellungszeit diese benötigen:

Tor.erwartet_nodes: 20
Tor.recover_after_time: 7m

Mit der richtigen Konfiguration kann eine Erholung, die Stunden gedauert hätte, nur eine Minute dauern und jedem Unternehmen viel Geld sparen kann.

Kapazitätsbereitstellung

Es ist wichtig zu wissen, wie viel Platz Ihre Daten benötigen und welche Rate, mit der sie in Elasticsearch fließt.

Natürlich gibt es keine spezifischen Richtlinien, um die erforderlichen Zahlen zu erreichen, aber wir können einige Schritte unternehmen, die uns eine gute Idee geben. Einer der Schritte wird sein simulieren der Anwendungsfall. Machen Sie einen ES -Cluster und füttern Sie es mit fast der gleichen Datenrate, wie Sie es mit Ihrem Produktionssetup erwarten würden. Das Konzept von Starten Sie groß und skalieren Sie sie kann Ihnen auch dabei helfen, konsequent darüber zu sein, wie viel Platz benötigt wird.

Große Vorlagen

Wenn Sie indexierte große Vorlagen definieren, werden Sie sich immer mit Problemen im Zusammenhang mit der Synchronisierung der Vorlage über Ihre verschiedenen Knoten des Clusters konfrontiert. Beachten Sie immer, dass die Vorlage neu definiert werden muss, wenn ein Datenmodelländerung auftritt. Es ist eine viel bessere Idee dazu Halten Sie die Vorlagen als dynamisch. Dynamische Vorlagen aktualisieren automatisch Feld Mappings basierend auf den zuvor definierten Zuordnungen und den neuen Feldern. Beachten Sie, dass es keinen Ersatz gibt, um die Vorlagen so klein wie möglich zu halten.

2 Verwendung von Mlockall auf Ubuntu -Servern

Linux verwendet den Tauschprozess, wenn es Speicher für neue Seiten benötigt. Tausch machen die Dinge langsam, da die Festplatten langsamer sind als die Erinnerung. Der mlockall Die Eigenschaft in der ES -Konfiguration gibt ES an, ihre Seiten nicht aus dem Speicher auszutauschen, selbst wenn sie vorerst nicht erforderlich sind. Diese Eigenschaft kann in der YAML -Datei festgelegt werden:

Bootstrap.Mlockall: Richtig

In der Es v5.X+ Versionen, diese Eigenschaft hat sich geändert zu:

Bootstrap.Memory_lock: True

Wenn Sie diese Eigenschaft verwenden, stellen Sie einfach sicher, dass Sie ES mit dem Haufen-Memory mit dem ausreichenden Haufen zur Verfügung stellen -DXMX Option oder ES_HEAP_SIZE.

Minimieren Sie Mapping -Updates

Die Leistung eines Clusters ist leicht betroffen, wenn Sie Mapping -Update -Anfragen auf Ihrem ES -Cluster erstellen. Wenn Sie dies nicht kontrollieren können und dennoch Updates für Zuordnungen vornehmen möchten, können Sie eine Eigenschaft in der ES YAML -Konfigurationsdatei verwenden:

Indizes.Cluster.send_refresh_mapping: false

Wenn sich die Modell -Update -Anforderung in der Warteschlange für den Master -Knoten befindet und Daten mit der alten Zuordnung an die Knoten sendet, muss auch eine Aktualisierungsanforderung später an alle Knoten gesendet werden. Dies kann die Dinge langsamer machen. Wenn wir die obige Eigenschaft auf false festlegen, ist dies den Master, dass ein Update für die Zuordnung gemacht wurde und die Aktualisierungsanforderung nicht an die Knoten sendet. Beachten Sie, dass dies nur hilfreich ist, wenn Sie regelmäßig viele Änderungen an Ihren Zuordnungen vornehmen.

Optimierter Thread-Pool

ES -Knoten haben viele Thread -Pools, um die Art und Weise zu verbessern, wie Threads innerhalb eines Knotens verwaltet werden. Es gibt jedoch Einschränkungen, wie viel Daten jeder Thread pflegen kann. Um diesen Wert zu verfolgen, können wir eine ES -Eigenschaft verwenden:

Threadpool.Schüttgut.Queue_Size: 2000

Dies informiert die Anzahl der Anfragen in einem Shard, der für die Ausführung im Knoten in der Warteschlange gestellt werden kann, wenn kein Thread verfügbar ist, um die Anforderung zu verarbeiten. Wenn die Anzahl der Aufgaben höher ist als dieser Wert, erhalten Sie eine RemotetransportException. Je höher dieser Wert ist, desto höher ist die Menge des Haufensraums auf Ihrer Knotenmaschine und der JVM-Haufen wird ebenfalls verbraucht. Außerdem sollten Sie Ihren Code bereit halten, falls diese Ausnahme ausgelöst wird.

Abschluss

In dieser Lektion haben wir uns untersucht, wie wir die Elasticsearch-Leistung verbessern können, indem wir gemeinsame und nicht so kommende Fehler vermeiden, die Menschen machen. Lesen Sie mehr Elasticsearch -Artikel unter LinuxHint.