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.