Elastische Suche

Best Practices für Elasticsearch und Leistungssteigerung

Best Practices für Elasticsearch und Leistungssteigerung
In diesem Beitrag werden wir versuchen, Best Practices zu sammeln und auch, was Sie vermeiden sollten, wenn Sie mit Elasticsearch arbeiten und Daten einspeisen. Auf diese Weise wissen wir, was wir alles beachten müssen, bevor wir überhaupt mit dieser hervorragenden Suchmaschine arbeiten working.

Best Practices für Elasticsearch

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

Immer ES-Zuordnungen definieren M

Eine Sache, die ES sicherlich tun kann, ist, ohne Mappings zu arbeiten. Wenn Sie also damit beginnen, JSON-Daten in Ihren ES-Index einzuspeisen, durchläuft dieser die Datenfelder und erstellt eine geeignete Zuordnung. 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 mit einem bestimmten Datentyp.

Angenommen, Sie indizieren beispielsweise das folgende Dokument:


"id" : 1,
"title" : "Installieren Sie ElasticSearch unter Ubuntu",
"link" : "https://linuxhint.com/install-elasticsearch-ubuntu/",
"Datum" : "2018-03-25"

Auf diese Weise markiert Elasticsearch das Feld „Datum“ als Typ „Datum“. Aber wenn Sie das folgende Dokument indizieren:


"id" : 1,
"title" : "ES Best Practices und Leistung",
"Datum" : "Ausstehend"

Diesmal wurde der Typ des Datumsfelds geändert und ES gibt einen Fehler aus und lässt die Indexierung Ihres Dokuments nicht zu. Zur Vereinfachung können Sie einige Dokumente indizieren, sehen, welche Felder von ES indiziert werden und die Zuordnung von dieser URL abrufen:

GET /index_name/doc_type/_mapping

Auf diese Weise müssen Sie nicht auch das komplette Mapping erstellen.

Produktionsflaggen

Der Standardclustername, den ES startet, heißt is elastische Suche. Wenn Sie viele Knoten in Ihrem Cluster haben, ist es eine gute Idee, die Benennungsflags so konsistent wie möglich zu halten, wie zum Beispiel:

Cluster.Name: app_es_production
Knoten.Name: app_es_node_001

Abgesehen davon sind auch die Wiederherstellungseinstellungen für Knoten von Bedeutung. Angenommen, einige der Knoten in einem Cluster werden aufgrund eines Fehlers neu gestartet und einige Knoten werden kurz nach anderen Knoten neu gestartet. Um die Daten zwischen all diesen Knoten konsistent zu halten, müssen wir ein Konsistenzprogramm ausführen, das alle Cluster in einem konsistenten Zustand hält.

Tor.recovery_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.erwartete_Knoten: 20
Tor.recovery_after_time: 7m

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

Kapazitätsbereitstellung

Es ist wichtig zu wissen, wie viel Speicherplatz Ihre Daten benötigen und mit welcher Geschwindigkeit sie in Elasticsearch fließen, da dies auch die Menge an RAM bestimmt, die Sie auf jedem der Knoten des Clusters und des Master-Knotens benötigen.

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 liefern. Einer der Schritte wird sein, simulieren der Anwendungsfall. Erstellen Sie einen ES-Cluster und füttern Sie ihn mit fast der gleichen Datenrate, die Sie von Ihrem Produktions-Setup erwarten würden. Das Konzept von fang groß an und verkleinere dich kann Ihnen auch dabei helfen, konsistent zu sein, wie viel Platz benötigt wird.

Große Vorlagen

Wenn Sie indizierte große Vorlagen definieren, werden Sie immer auf Probleme im Zusammenhang mit der Synchronisierung der Vorlage zwischen Ihren verschiedenen Knoten des Clusters stoßen. Beachten Sie immer, dass die Vorlage bei jeder Änderung des Datenmodells neu definiert werden muss. Es ist eine viel bessere Idee, Behalten Sie die Vorlagen als dynamisch bei. Dynamische Vorlagen aktualisieren automatisch Feldzuordnungen basierend auf den zuvor definierten Zuordnungen und den neuen Feldern. Beachten Sie, dass es keinen Ersatz gibt, die Vorlagen so klein wie möglich zu halten.

2Mlockall auf Ubuntu-Servern verwenden

Linux verwendet den Swapping-Prozess, wenn es Speicher für neue Seiten benötigt. Durch Austauschen werden die Dinge langsamer, da Festplatten langsamer sind als der Arbeitsspeicher. Das mlockall -Eigenschaft in der ES-Konfiguration weist ES an, seine Seiten nicht aus dem Speicher auszulagern, selbst wenn sie im Moment nicht benötigt werden. Diese Eigenschaft kann in der YAML-Datei festgelegt werden:

Bootstrap.mlockall: wahr

Im ES v5.x+ Versionen hat sich diese Eigenschaft geändert in:

Bootstrap.memory_lock: wahr

Wenn Sie diese Eigenschaft verwenden, stellen Sie einfach sicher, dass Sie ES mit ausreichend großem Heap-Speicher zur Verfügung stellen -DXmx Option oder ES_HEAP_SIZE.

Mapping-Updates minimieren

Die Leistung eines Clusters wird leicht beeinträchtigt, wenn Sie Mapping-Update-Anfragen auf Ihrem ES-Cluster stellen. Wenn Sie dies nicht steuern können und dennoch Zuordnungen aktualisieren möchten, können Sie eine Eigenschaft in der ES YAML-Konfigurationsdatei verwenden:

Indizes.Cluster.send_refresh_mapping: false

Wenn sich die Modellaktualisierungsanfrage in der ausstehenden Warteschlange für den Master-Knoten befindet und Daten mit der alten Zuordnung an die Knoten sendet, muss sie später auch eine Aktualisierungsanfrage an alle Knoten senden. Das kann die Sache verlangsamen. Wenn wir die obige Eigenschaft auf false setzen, macht dies dem Master Sinn, dass eine Aktualisierung des Mappings vorgenommen wurde und die Aktualisierungsanforderung nicht an die Knoten gesendet wird. Beachten Sie, dass dies nur hilfreich ist, wenn Sie regelmäßig viele Änderungen an Ihren Zuordnungen vornehmen.

Optimierter Thread-Pool

ES-Knoten verfügen über viele Thread-Pools, um die Verwaltung von Threads innerhalb eines Knotens zu verbessern. Es gibt jedoch Einschränkungen, wie viele Daten jeder Thread verarbeiten kann. Um diesen Wert zu verfolgen, können wir eine ES-Eigenschaft verwenden:

Threadpool.Masse.Warteschlangengröße: 2000

Dies informiert ES über die Anzahl der Anforderungen in einem Shard, die zur Ausführung im Knoten in die Warteschlange gestellt werden können, wenn kein Thread verfügbar ist, um die Anforderung zu verarbeiten. Wenn die Anzahl der Aufgaben diesen Wert überschreitet, erhalten Sie a RemoteTransportAusnahme. Je höher dieser Wert, desto mehr Heap-Speicherplatz wird auf Ihrer Knotenmaschine benötigt und der JVM-Heap wird ebenfalls verbraucht. Außerdem sollten Sie Ihren Code für den Fall bereithalten, dass diese Ausnahme ausgelöst wird.

Fazit

In dieser Lektion haben wir uns angesehen, wie wir die Leistung von Elasticsearch verbessern können, indem wir häufige und weniger häufige Fehler vermeiden. Lesen Sie weitere Elasticsearch-Artikel zu LinuxHint.

Installieren Sie den neuesten Dolphin Emulator für Gamecube & Wii unter Linux
Mit dem Dolphin Emulator können Sie Ihre ausgewählten Gamecube- und Wii-Spiele auf Linux-Personalcomputern (PC) spielen. Als frei verfügbarer Open-So...
So verwenden Sie die GameConqueror-Cheat-Engine unter Linux
Der Artikel enthält eine Anleitung zur Verwendung der GameConqueror-Cheat-Engine unter Linux. Viele Benutzer, die Spiele unter Windows spielen, verwen...
Beste Spielkonsolen-Emulatoren für Linux
Dieser Artikel listet beliebte Spielekonsolen-Emulationssoftware auf, die für Linux verfügbar ist. Emulation ist eine Softwarekompatibilitätsschicht, ...