453 Stimmen

Scherben und Replikate in Elasticsearch

Ich versuche zu verstehen, was ein Shard und Replika in Elasticsearch ist, aber ich habe es nicht geschafft zu verstehen. Wenn ich Elasticsearch herunterlade und das Skript ausführe, dann habe ich meines Wissens nach einen Cluster mit einem einzelnen Knoten gestartet. Jetzt hat dieser Knoten (mein PC) 5 Shards (?) und einige Replikate (?).

Was sind sie, habe ich 5 Duplikate des Index? Wenn ja, warum? Ich könnte eine Erklärung gebrauchen.

1470voto

javanna Punkte 56936

Ich werde versuchen, mit einem realen Beispiel zu erklären, da die Antwort und Antworten, die Sie erhalten haben, Ihnen nicht zu helfen scheinen.

Wenn Sie Elasticsearch herunterladen und starten, erstellen Sie einen Elasticsearch-Knoten, der versucht, sich einem vorhandenen Cluster anzuschließen oder einen neuen zu erstellen. Angenommen, Sie haben Ihren eigenen neuen Cluster mit einem einzelnen Knoten erstellt, den Sie gerade gestartet haben. Wir haben keine Daten, daher müssen wir einen Index erstellen.

Wenn Sie einen Index erstellen (ein Index wird auch automatisch erstellt, wenn Sie das erste Dokument indizieren), können Sie definieren, aus wie vielen Shards er bestehen soll. Wenn Sie keine Zahl angeben, hat er die Standardanzahl von Shards: 5 Primärschards. Was bedeutet das?

Das bedeutet, dass Elasticsearch 5 Primärschards erstellen wird, die Ihre Daten enthalten:

 ____    ____    ____    ____    ____
| 1  |  | 2  |  | 3  |  | 4  |  | 5  |
|____|  |____|  |____|  |____|  |____|

Jedes Mal, wenn Sie ein Dokument indizieren, wird Elasticsearch entscheiden, welcher Primärshard dieses Dokument halten soll, und es dort indizieren. Primärshards sind keine Kopie der Daten, sie sind die Daten! Mehrere Shards helfen zwar dabei, dass auf einer einzelnen Maschine parallel verarbeitet werden kann, aber der ganze Punkt ist, dass, wenn wir eine weitere Elasticsearch-Instanz im selben Cluster starten, die Shards gleichmäßig über das Cluster verteilt werden.

Knoten 1 wird dann beispielsweise nur drei Shards haben:

 ____    ____    ____ 
| 1  |  | 2  |  | 3  |
|____|  |____|  |____|

Da die verbleibenden beiden Shards auf den neu gestarteten Knoten verschoben wurden:

 ____    ____
| 4  |  | 5  |
|____|  |____|

Warum passiert das? Weil Elasticsearch eine verteilte Suchmaschine ist und Sie auf diese Weise mehrere Knoten/Maschinen nutzen können, um große Datenmengen zu verwalten.

Jeder Elasticsearch-Index besteht mindestens aus einem Primärshard, da dort die Daten gespeichert sind. Jeder Shard hat jedoch einen Preis, daher wenn Sie einen einzelnen Knoten haben und kein absehbares Wachstum besteht, bleiben Sie einfach bei einem einzelnen Primärshard.

Ein weiterer Typ von Shard ist ein Replica. Standardmäßig beträgt 1, was bedeutet, dass jeder Primärshard auf einen anderen Shard kopiert wird, der die gleichen Daten enthält. Replikate werden verwendet, um die Such-Performance zu erhöhen und für Ausfallsicherung. Ein Replica-Shard wird niemals auf demselben Knoten zugewiesen, auf dem der zugehörige Primärshard liegt (es wäre so etwas wie ein Backup auf der gleichen Festplatte wie die originalen Daten zu platzieren).

Zurück zu unserem Beispiel, mit 1 Replica haben wir den gesamten Index auf jedem Knoten, da 2 Replica-Shards auf dem ersten Knoten zugewiesen werden und sie genau die gleichen Daten wie die Primärshards auf dem zweiten Knoten enthalten werden:

 ____    ____    ____    ____    ____
| 1  |  | 2  |  | 3  |  | 4R |  | 5R |
|____|  |____|  |____|  |____|  |____|

Dasselbe gilt für den zweiten Knoten, der eine Kopie der Primärshards auf dem ersten Knoten enthält:

 ____    ____    ____    ____    ____
| 1R |  | 2R |  | 3R |  | 4  |  | 5  |
|____|  |____|  |____|  |____|  |____|

Mit einer Konfiguration wie dieser, wenn ein Knoten ausfällt, haben Sie immer noch den gesamten Index. Die Replikate werden automatisch zu Primärshards und der Cluster funktioniert trotz des Ausfalls des Knotens ordnungsgemäß, wie folgt:

 ____    ____    ____    ____    ____
| 1  |  | 2  |  | 3  |  | 4  |  | 5  |
|____|  |____|  |____|  |____|  |____|

Da Sie "number_of_replicas":1 haben, können die Replikate nicht mehr zugewiesen werden, da sie niemals auf demselben Knoten zugewiesen werden, auf dem ihre Primären liegen. Deshalb wird es 5 nicht zugewiesene Shards geben, die Replikate, und der Clusterstatus wird YELLOW statt GREEN sein. Kein Datenverlust, aber es könnte besser sein, da einige Shards nicht zugewiesen werden können.

Sobald der Knoten, der ausgefallen ist, wieder in Betrieb genommen wird, wird er sich erneut dem Cluster anschließen und die Replikate werden erneut zugewiesen. Die vorhandenen Shards auf dem zweiten Knoten können geladen werden, aber sie müssen mit den anderen Shards synchronisiert werden, da Schreibvorgänge wahrscheinlich stattgefunden haben, während der Knoten ausgefallen war. Am Ende dieses Vorgangs wird der Clusterstatus auf GREEN gesetzt.

Ich hoffe, das klärt die Dinge für Sie.

51voto

Vino Punkte 2377

Schard:

  1. Als verteiltes Suchserver verwendet ElasticSearch das Konzept namens Schard, um Indexdokumente auf alle Knoten zu verteilen.
  2. Ein Index kann potenziell eine große Menge an Daten speichern, die die Hardwaregrenzen eines einzigen Knotens überschreiten können.
  3. Zum Beispiel kann ein einzelner Index von einer Milliarde Dokumenten, der 1 TB Festplattenspeicher belegt, nicht auf die Festplatte eines einzelnen Knotens passen oder zu langsam sein, um Suchanfragen alleine von einem einzelnen Knoten zu bedienen.
  4. Um dieses Problem zu lösen, bietet Elasticsearch die Möglichkeit, Ihren Index in mehrere Teile namens Schards zu unterteilen.
  5. Wenn Sie einen Index erstellen, können Sie einfach die Anzahl der Schards definieren, die Sie möchten.
  6. Dokumente werden in Schards gespeichert, und Schards werden den Knoten in Ihrem Cluster zugewiesen.
  7. Wenn Ihr Cluster wächst oder schrumpft, wird Elasticsearch automatisch Schards zwischen Knoten migrieren, so dass der Cluster ausgeglichen bleibt.
  8. Ein Schard kann entweder ein primärer Schard oder ein Replikaschard sein.
  9. Jedes Dokument in Ihrem Index gehört zu einem einzigen primären Schard, sodass die Anzahl der primären Schards, die Sie haben, die maximale Menge an Daten bestimmt, die Ihr Index halten kann.
  10. Ein Replikaschard ist nur eine Kopie eines primären Schards.

Replikaschard:

  1. Ein Replikaschard ist die Kopie eines primären Schards, um Datenverlust im Falle eines Hardwarefehlers zu verhindern.
  2. Elasticsearch ermöglicht es Ihnen, eine oder mehrere Kopien Ihrer Indexschards in sogenannte Replikaschards oder Replikate zu erstellen.
  3. Ein Index kann auch null (was bedeutet, keine Repliken) oder mehrmals repliziert werden.
  4. Die Anzahl der Schards und Repliken können pro Index zum Zeitpunkt der Indexerstellung definiert werden.
  5. Nachdem der Index erstellt wurde, können Sie die Anzahl der Repliken dynamisch jederzeit ändern, aber Sie können die Anzahl der Schards nicht nachträglich ändern.
  6. Standardmäßig werden jedem Index in Elasticsearch 5 primäre Schards und 1 Replika zugewiesen. Das bedeutet, dass wenn Sie mindestens zwei Knoten in Ihrem Cluster haben, Ihr Index 5 primäre Schards und weitere 5 Replikaschards (1 vollständige Replika) für insgesamt 10 Schards pro Index haben wird.

43voto

ppearcy Punkte 2612

Ein Index wird in Scherben aufgeteilt, um sie zu verteilen und zu skalieren.

Repliken sind Kopien der Scherben und sorgen für Zuverlässigkeit, wenn ein Knoten verloren geht. Es gibt oft Verwirrung bei dieser Zahl, weil Replikanzahl == 1 bedeutet, dass der Cluster die Haupt- und eine replizierte Kopie der Scherbe haben muss, um sich im grünen Zustand zu befinden.

Um Repliken erstellen zu können, müssen Sie mindestens 2 Knoten in Ihrem Cluster haben.

Sie finden die Definitionen hier vielleicht einfacher zu verstehen: http://www.elasticsearch.org/guide/reference/glossary/

22voto

jyu Punkte 523

Wenn Sie es wirklich nicht gelb sehen möchten, können Sie die Anzahl der Replikate auf Null setzen:

curl -XPUT 'localhost:9200/_settings' -d '
{
    "index" : {
        "number_of_replicas" : 0
    }
}
'

Beachten Sie, dass Sie dies nur auf Ihrer lokalen Entwicklungsbox tun sollten.

16voto

Pruthvi Punkte 257

Ein Index wird in Scherben aufgeteilt, um sie zu verteilen und zu skalieren.

Repliken sind Kopien der Scherben.

Ein Knoten ist eine aktive Instanz von Elastic Search, die zu einem Cluster gehört.

Ein Cluster besteht aus einem oder mehreren Knoten, die denselben Clusternamen teilen. Jeder Cluster verfügt über einen einzigen Master-Knoten, der vom Cluster automatisch ausgewählt wird und ersetzt werden kann, wenn der aktuelle Master-Knoten ausfällt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X