Es tut mir leid, dies zu sagen, aber die ES-Dokumentation ( Ссылка ) ist verwirrend ich.
Dank des Glossars verstehe ich die Begriffe für Datenbank, Tabelle und Zeile, aber ich habe wesentliche Abschnitte der Dokumentation gelesen und kann keine Antworten finden auf:
number_of_shards
und number_of_replicas
zur Indexerstellung hinzufügen? Ich habe hier Ссылка gesucht, aber ironischerweise hinterlässt es diese beiden Einstellungen Code%
Als Referenz lese ich zuerst diese Links:
Wenn diese Information in der Dokumentation vorhanden ist, wäre ich sehr dankbar, wenn Sie mich darauf hinweisen könnten.
Bearbeiten:
Ich bin mir auch nicht sicher, wie die automatische Erkennung in einem verteilten Netzwerk funktioniert. Kurz, wenn Sie jedes öffentliche Netzwerk pingen, wie verbindet es sich mit dem richtigen, der möglicherweise auf der anderen Seite der Welt sein könnte?
Hier finden Sie Antworten auf Ihre Punkte.
- Warum muss ich number_of_shards und number_of_replicas zur Indexerstellung hinzufügen? Ich habe hier nachgesehen Ссылка aber ironisch lässt es diese beiden Einstellungen aus: /
Sie "haben" nicht, aber Sie sollten wahrscheinlich besonders in der Produktion wollen. Der Standardwert ist fünf Shards und eine Replikation.
Die Anzahl der definierten Replikationen ist nur die Anzahl, wie oft Ihr gesamter Index in allen Knoten in Ihrem ElasticSearch-Cluster repliziert wird. Stellen Sie sich vor, dass es sich um mehrere Lesekopien einer RDBMS-Datenbank handelt (aber in diesem Fall lesen und schreiben wir alle Kopien).
Ein Shard ist die Anzahl der Male, die ich oder ein Shard einen Index aufgespalten habe. Also kann ich einen Index mit einem einzelnen Shard haben, oder ich kann einen Index mit mehreren Shards haben. Dies ist ähnlich wie beim Shard einer RDBMS-Datenbank nach Primärschlüssel, aber nicht identisch.
Also ist die Gesamtzahl der Shards, die Sie in einem Index haben, das Produkt von number_of_shards und number_of_replicas.
Wenn Sie eine Suche durchführen, verteilt elasticsearch Ihre Suche auf alle möglichen Knoten, die die Shards in Ihrem Index enthalten, und aggregiert das Ergebnis für Sie. Sie können sich das als Map / Reduzieren vorstellen, wo die Map die Suche an jeden Shard sendet und das Reduzieren die Ergebnisse sammelt.
Sie können auch die Replikationsnummer_der_Replikate jederzeit ändern, aber Sie können die Anzahl der_Schwerter niemals ändern. Dies muss bei der Indexerstellung festgelegt werden.
- Wie kann ich 3 Shards mit 2 Replikaten haben? Wenn das Glossar etwas ist, sollte das nicht unmöglich sein, wenn man bedenkt, dass a shard ist "ist eine einzelne Lucene-Instanz"?
Ich denke, dass das oben Gesagte hauptsächlich das beantwortet, aber es ist wichtig, sich daran zu erinnern, dass elasticsearch in erster Linie eine verteilte Computerlösung zum Suchen ist. Wir teilen die Arbeit auf mehrere Shards und möglicherweise auf Maschinen auf.
- Wenn ich später weitere Knoten hinzufüge, wie kann ich diese Werte so ändern, dass sie die neuen Knoten umfassen?
Sobald dem Cluster ein anderer Knoten im Cluster bekannt ist, ist keine weitere Aktion von Ihnen erforderlich. Die Einstellungen verbreiten sich im gesamten Cluster. Wenn Sie in Ihrem obigen Beispiel mit drei Shards und zwei Replikaten ursprünglich zwei Knoten und eine dritte hinzugefügt haben, hat jeder Knoten im Durchschnitt zwei Shards pro Knoten. Diese Shard-Bewegung wird ohne Ihr Eingreifen ausgeführt (vorausgesetzt, der Cluster kennt die neuer Knoten)
- Wie funktioniert sharding in ES?
Siehe oben
- Wie funktionieren Replikatsätze in ES?
Siehe oben
- Wie kann ich sharding verwalten? Ich verstehe, dass es automatisch beitreten ( Ссылка ) aber Wie definiere ich den Unterschied zwischen Replikaten und Shards?
Sie müssen es nicht aktiv "verwalten". Wie bereits erwähnt, wird Sharding und alles, was Sie bei der Indexerstellung definieren, an neue Knoten innerhalb des Clusters weitergegeben.
Sie definieren Replikate und Shards wie folgt:
%Vor%
- Wie kann ich Replikatsätze verwalten? I.e. Wie füge ich Replikate, Primärfarben usw. hinzu?
Sie tun das über die update indices API, Dokumentation für diesen speziellen Fall finden Sie hier auf der Seite:
Ich habe gerade Ihre Bearbeitung bemerkt, siehe unten:
- Ich bin mir auch nicht sicher, wie die automatische Erkennung in einem verteilten Netzwerk funktioniert.
In der YML-Konfigurationsdatei setzen Sie das Unicast wie folgt:
%Vor%Die mittlere Einstellung ist eine wichtige Einstellung, aber ich habe es hier auskommentiert. Diese Nummer sollte immer eine Anzahl von (Master-Knoten / 2) +1 sein. Dies soll Split-Brain-Situationen vermeiden. Im Allgemeinen setze ich alle Knoten zum Master-berechtigt.
Diese Einstellungen sind für Unicast, was ich denke, dass Sie mit Ihrer Frage und nicht Multicast gehen.
Kurz gesagt, ein Index wird in Shards zerlegt. Shards können repliziert werden, dh mehrere Kopien desselben Shards können im selben Cluster vorhanden sein. Wenn also ein Index 3 Shards und 2 Replikate hat, bedeutet das, dass Sie insgesamt neun Shards haben, von denen sechs Replikate der drei Master-Shards sind.
ES wird versuchen, Shards und ihre Replikate über den Cluster hinweg auszugleichen, so dass bei einem Ausfall eines Knotens ein Failover von den Master-Shards auf diesem Knoten zu Replikaten erfolgen kann. Dies kann einige Leute verwirren: Ein Master in der elastischen Suche bezieht sich auf Shards, nicht auf den eigentlichen Knoten. So kann ein einzelner Knoten eine Mischung aus Replikaten und Master-Shards enthalten.
Wenn Sie aus der Lucene-Welt kommen, ist ein Lucene-Index nicht dasselbe wie ein elastischer Suchindex. Ein elastischer Suchindex ist eine logische Gruppe indizierter Dokumente mit Typen, Zuordnungen und Dokumenten. Mehr oder weniger dasselbe wie ein Datenbankschema. Ein Lucene-Index hingegen ist eine Gruppe von mehreren Dateien, die indizierte Daten enthält. Wenn die Elastic-Suche Indizes erstellt, erzeugt sie mehrere Lucene-Indizes (einen für jedes Feld und jeden Shard). Wenn sie repliziert, kopiert sie grundsätzlich die Dateien dieser Lucene-Indizes.
Sie können die Anzahl der Shards für einen Index nicht ändern, aber Sie können die Anzahl der Replikate ändern. Wenn Sie mehr Shards benötigen, müssen Sie in der Regel einen neuen Index erstellen und die Daten neu indizieren.
Im Hinblick auf das Shard-Management, abgesehen von der Anzahl der Shards, gibt es nicht viel zu verwalten und ES ist ziemlich gut, Dinge selbst zu koordinieren. Es gibt eine Menge Optionen, mit denen man herumspielen kann, wenn man ein bisschen besser verstanden hat wie es funktioniert. Standardwerte sind für die meisten ziemlich OK. Im Hinblick auf das Cluster-Management können Sie eine Menge über die API tun, um Knoten kontrolliert herunterzufahren, indem Sie Index-Aliase verwenden, die Anzahl der Replikate ändern usw.
Wie bei der Autodiscovery verwendet ES standardmäßig Multicast im lokalen Netzwerk. Sie können zu Unicast wechseln und wahrscheinlich möchten Sie den Standardclusternamen ändern, um Unfälle zu vermeiden (hatte Spaß in Coffeeshops mit unbeabsichtigten Clustern). Sie möchten wahrscheinlich nicht global clustern. Ich sehe das Ende nicht gut.
Es ist ein ziemlich großer Vorfall, dass ungefähr 80% Ihrer Fragen in der Videopräsentation von Shay Banon (dem Ersteller von ElastiSearch) beantwortet werden. Obwohl diese Präsentation viel mehr hat, als Sie irgendwo anders finden können. Hoffe das hilft.
%Vor%Dieses Video hat eine geringe Auflösung. Wenn Sie also den Code in der Präsentation sehen möchten, folgen Sie diesem
%Vor%Tags und Links elasticsearch