Ich versuche zu verstehen, was Shard und Replik in Elasticsearch sind, aber ich kann es nicht verstehen. Wenn ich Elasticsearch herunterlade und das Skript ausführte, habe ich aus meiner Kenntnis einen Cluster mit einem einzigen Knoten gestartet. Nun hat dieser Knoten (mein PC) 5 Shards (?) Und einige Repliken (?).
Was ist das, habe ich 5 Duplikate des Index? Wenn ja warum? Ich könnte eine Erklärung brauchen.
Ich versuche es mit einem echten Beispiel zu erklären, da die Antwort und die Antworten, die Sie erhalten haben, Ihnen scheinbar nicht helfen.
Wenn Sie elasticsearch herunterladen und starten, erstellen Sie einen Elasticsearch-Knoten, der versucht, einem vorhandenen Cluster beizutreten, falls verfügbar, oder erstellt einen neuen. Angenommen, Sie haben einen eigenen neuen Cluster mit einem einzigen 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 automatisch erstellt, wenn Sie auch das erste Dokument indexieren), können Sie festlegen, aus wie vielen Shards es bestehen soll. Wenn Sie keine Zahl angeben, wird die Standardanzahl der Shards festgelegt: 5 Primärnummern. Was heißt das?
Das bedeutet, dass elasticsearch 5 primäre Shards erstellt, die Ihre Daten enthalten:
____ ____ ____ ____ ____
| 1 | | 2 | | 3 | | 4 | | 5 |
|____| |____| |____| |____| |____|
Jedes Mal, wenn Sie ein Dokument indizieren, entscheidet elasticsearch, welcher primäre Shard das Dokument aufnehmen soll, und indiziert es dort. Primäre Shards sind keine Kopie der Daten, sondern die Daten! Mehrere Shards können die Parallelverarbeitung auf einer einzelnen Maschine nutzen. Wenn Sie jedoch eine weitere Elasticsearch-Instanz in demselben Cluster starten, werden die Shards gleichmäßig über den Cluster verteilt.
Knoten 1 enthält dann beispielsweise nur drei Shards:
____ ____ ____
| 1 | | 2 | | 3 |
|____| |____| |____|
Da die verbleibenden zwei Shards auf den neu gestarteten Knoten verschoben wurden:
____ ____
| 4 | | 5 |
|____| |____|
Warum passiert das? Da elasticsearch eine verteilte Suchmaschine ist, können Sie auf diese Weise mehrere Knoten/Maschinen zum Verwalten großer Datenmengen verwenden.
Jeder Elasticsearch-Index besteht aus mindestens einem primären Shard, da die Daten dort gespeichert werden. Jeder Shard ist jedoch mit Kosten verbunden. Wenn Sie also einen einzelnen Knoten haben und kein vorhersehbares Wachstum haben, bleiben Sie bei einem einzelnen primären Shard.
Eine andere Art von Shard ist eine Replik. Der Standardwert ist 1. Dies bedeutet, dass jedes primäre Shard in ein anderes Shard kopiert wird, das die gleichen Daten enthält. Repliken werden zur Steigerung der Suchleistung und zum Failover verwendet. Ein Replikat-Shard wird niemals auf demselben Knoten zugewiesen, auf dem sich der verwandte Primärknoten befindet (es wäre fast so, als würde eine Sicherung auf derselben Festplatte wie die Originaldaten abgelegt).
In unserem Beispiel haben wir mit 1 Replikat den gesamten Index für jeden Knoten, da 3 Replikatshards auf dem ersten Knoten zugewiesen werden und genau dieselben Daten enthalten wie die Primärknoten auf dem zweiten Knoten:
____ ____ ____ ____ ____
| 1 | | 2 | | 3 | | 4R | | 5R |
|____| |____| |____| |____| |____|
Gleiches gilt für den zweiten Knoten, der eine Kopie der primären Shards auf dem ersten Knoten enthält:
____ ____ ____ ____ ____
| 1R | | 2R | | 3R | | 4 | | 5 |
|____| |____| |____| |____| |____|
Bei einem solchen Setup haben Sie immer noch den gesamten Index, wenn ein Knoten ausfällt. Die Replikat-Shards werden automatisch zu Vorwahlen, und der Cluster funktioniert trotz des Knotenfehlers wie folgt ordnungsgemäß:
____ ____ ____ ____ ____
| 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 sich ihre Primärdatenbank befindet. Aus diesem Grund haben Sie 5 nicht zugewiesene Shards, die Replikate und der Clusterstatus wird YELLOW
anstelle von GREEN
sein. Kein Datenverlust, aber es könnte besser sein, da einige Shards nicht zugewiesen werden können.
Sobald der verbleibende Knoten wieder gesichert ist, wird er wieder in den Cluster aufgenommen, und die Replikate werden erneut zugewiesen. Der vorhandene Shard auf dem zweiten Knoten kann geladen werden, er muss jedoch mit den anderen Shards synchronisiert werden, da Schreibvorgänge höchstwahrscheinlich während des Knotens des Knotens ausgeführt wurden. Am Ende dieses Vorgangs wird der Clusterstatus GREEN
.
Hoffe das klärt die Dinge für dich.
Wenn Sie es wirklich nicht gern gelb sehen. Sie können die Anzahl der Replikate auf Null setzen:
curl -XPUT 'localhost:9200/_settings' -d '
{
"index" : {
"number_of_replicas" : 0
}
}
'
Beachten Sie, dass Sie dies nur in Ihrer lokalen Entwicklungsbox tun sollten.
Ein Index wird in Shards unterteilt, um sie zu verteilen und zu skalieren.
Repliken sind Kopien der Shards und bieten Zuverlässigkeit, wenn ein Knoten verloren geht. Diese Zahl ist oft verwirrend, da die Anzahl der Replikate == 1 bedeutet, dass der Cluster über die Haupt- und eine replizierte Kopie des Shards verfügen muss, damit er im grünen Status ist.
Damit Repliken erstellt werden können, müssen Sie mindestens zwei Knoten in Ihrem Cluster haben.
Sie finden die Definitionen hier vielleicht leichter verständlich: http://www.elasticsearch.org/guide/reference/glossary/
Beste Grüße, Paul
Ein Index wird in Shards unterteilt, um sie zu verteilen und zu skalieren.
Repliken sind Kopien der Shards.
Ein Knoten ist eine laufende Instanz der elastischen Suche, die zu einem Cluster gehört.
Ein Cluster besteht aus einem oder mehreren Knoten, die denselben Clusternamen verwenden. Jeder Cluster verfügt über einen einzigen Master-Knoten, der automatisch vom Cluster ausgewählt wird und bei Ausfall des aktuellen Master-Knotens ersetzt werden kann.
Shard:
ElasticSearch
das Konzept Shard
, um Indexdokumente auf alle Knoten zu verteilen.index
kann potenziell eine große Datenmenge speichern, die die Hardware-Grenzen eines single node
überschreiten kann.Elasticsearch
die Möglichkeit, Ihren Index in mehrere Teile mit dem Namen shards
zu unterteilen.shards
Definieren.Documents
werden in shards
gespeichert, und Shards werden nodes
in .__ zugewiesen. Ihre cluster
cluster
wächst oder schrumpft, werden Elasticsearch
automatisch Shards zwischen nodes
migrieren, sodass die cluster
ausgewogen bleibt.primary shard
oder ein replica shard
sein.single primary shard
. Die Anzahl der primären Shards, die Sie haben, bestimmt die maximale Anzahl von Daten, die Ihr Index aufnehmen kannreplica shard
ist nur eine Kopie eines primären Shards.Replik:
Replica shard
ist die Kopie von primary Shard
, um Datenverlust in Fall eines Hardwarefehlers zu verhindern.Elasticsearch
können Sie eine oder mehrere Kopien der -Shards Ihres Index in sogenannte Replikatshards oder replicas
umwandeln.index
kann auch null (dh keine Replikate) oder mehr Zeiten repliziert werden.number of shards
und Repliken können pro Index zum Zeitpunkt der Indexerstellung definiert werden.cannot change the number of shards
After-the-fact.Elasticsearch
5 primäre Shards und 1 replica
zugewiesen. Wenn Sie also mindestens zwei Knoten in Ihrem Cluster haben, __.., verfügt Ihr Index über 5 primäre Shards und weitere 5 Replikatshards (1 vollständige Replik) ) für insgesamt 10 Shards pro Index.In ElasticSearch indizieren wir die Dokumente auf oberster Ebene in Indizes. Jeder Index verfügt über eine Anzahl von Shards, die die Daten intern verteilen, und innerhalb der Shards befinden sich die Lucene-Segmente, die den Kern der Daten bilden. Wenn der Index also 5 Shards hat, bedeutet dies, dass Daten über die Shards verteilt wurden und nicht dieselben Daten in den Shards vorhanden sind.
Schauen Sie sich das Video an, in dem der Kern von ES erläutert wird https://www.youtube.com/watch?v=PpX7J-G2PEo
Artikel zu mehreren Indizes oder zu mehreren Shards Elastische Suche, mehrere Indizes gegenüber einem Index und Typen für verschiedene Datensätze?
Keine Antwort, sondern eine weitere Referenz für Kernkonzepte zu ElasticSearch, und ich denke, dass sie als Kompliment zu @ javannas Antwort ziemlich klar sind.
Ein Index kann möglicherweise eine große Datenmenge speichern, die die Hardwaregrenzen eines einzelnen Knotens überschreitet. Beispielsweise passt ein einzelner Index von einer Milliarde Dokumenten, die 1 TB Festplattenspeicher belegen, möglicherweise nicht auf die Festplatte eines einzelnen Knotens oder ist zu langsam, um Suchanforderungen von einem einzelnen Knoten allein zu verarbeiten.
Um dieses Problem zu lösen, bietet Elasticsearch die Möglichkeit, Ihren Index in mehrere Teile zu unterteilen, die als Shards bezeichnet werden. Wenn Sie einen Index erstellen, können Sie einfach die Anzahl der gewünschten Shards definieren. Jeder Shard ist für sich genommen ein voll funktionsfähiger und unabhängiger "Index", der auf jedem Knoten im Cluster gehostet werden kann.
Scherben sind vor allem aus zwei Gründen wichtig:
- Damit können Sie horizontal teilen/skalieren Ihr Inhaltsvolumen.
- Hiermit können Sie Vorgänge auf mehrere Shards (möglicherweise auf mehreren Knoten) verteilen und parallelisieren, wodurch Leistung/Durchsatz steigern.
In einer Netzwerk-/Cloud-Umgebung, in der jederzeit mit Ausfällen zu rechnen ist, ist ein Failover-Mechanismus für den Fall, dass ein Shard/Node aus irgendeinem Grund offline geschaltet wird oder verschwindet, sehr nützlich und wird dringend empfohlen. Zu diesem Zweck können Sie mit Elasticsearch eine oder mehrere Kopien der Shards Ihres Index in so genannte Replikatshards, kurz Repliken, erstellen.
Die Replikation ist aus zwei Hauptgründen wichtig:
- Es bietet Hochverfügbarkeit für den Fall, dass ein Shard/Node ausfällt. Aus diesem Grund ist es wichtig zu beachten, dass ein Replikat-Shard niemals auf demselben Knoten zugewiesen wird wie der ursprüngliche/primäre Shard, von dem es kopiert wurde.
- Hier können Sie Ihre Suche skalieren Volumen/Durchsatz, da Suchvorgänge für alle Replikate gleichzeitig ausgeführt werden können.
Elasticsearch ist hervorragend skalierbar, wobei die verteilte Architektur im Vordergrund steht. Möglich wird dies durch Sharding. Bevor wir weiter darauf eingehen, betrachten wir einen einfachen und sehr häufigen Anwendungsfall. Nehmen wir an, Sie haben einen Index, der sehr viele Dokumente enthält, und nehmen der Einfachheit halber an, dass die Größe dieses Index 1 TB beträgt (dh die Summe der Größen jedes Dokuments) in diesem Index ist 1 TB). Angenommen, Sie haben zwei Knoten mit jeweils 512 GB Speicherplatz zum Speichern von Daten. Wie deutlich zu sehen ist, kann unser gesamter Index nicht in einem der beiden verfügbaren Knoten gespeichert werden, und daher müssen wir unseren Index auf diese Knoten verteilen.
In solchen Fällen, in denen die Größe eines Index die Hardwaregrenzen eines einzelnen Knotens überschreitet, hilft Sharding . Sharding löst dieses Problem, indem es die Indizes in kleinere Teile aufteilt. Diese Teile werden als Shards bezeichnet.
Ich werde das anhand von echten Word-Szenarien erklären. Stellen Sie sich vor, Sie betreiben eine E-Commerce-Website. Je beliebter Sie werden, desto mehr Verkäufer und Produkte ergänzen Ihre Website. Sie werden feststellen, dass die Anzahl der Produkte, die Sie möglicherweise für die Indexierung benötigen, zugenommen hat und dass sie zu groß ist, um auf eine Festplatte eines Knotens zu passen. Die lineare Suche aller Dokumente auf einem Computer ist extrem langsam, auch wenn sie auf die Festplatte passt. Ein Index auf einem Knoten nutzt die verteilte Clusterkonfiguration nicht, für die die Elasticsearch-Funktion verwendet wird.
Daher teilt Elasticsearch die Dokumente im Index auf mehrere Knoten im Cluster auf. Jeder Teil des Dokuments wird als Shard bezeichnet. Jeder Knoten, der einen Shard eines Dokuments trägt, hat nur eine Teilmenge des Dokuments. Angenommen, Sie haben 100 Produkte und 5 Scherben, jede Scherbe hat 20 Produkte. Diese Datenverschiebung macht die Suche mit niedriger Latenz in der Elasticsuche möglich. Die Suche wird parallel auf mehreren Knoten durchgeführt. Ergebnisse werden zusammengefasst und zurückgegeben. Die Shards bieten jedoch keine Fehlertoleranz. Das heißt, wenn ein Knoten, der den Shard enthält, nicht aktiv ist, wird der Clusterzustand gelb. Das bedeutet, dass einige Daten nicht verfügbar sind.
Um die Fehlertoleranz zu erhöhen, kommen Repliken ins Bild. Durch laute elastische Suche wird eine einzelne Replik jedes Shards erstellt. Diese Replikate werden immer auf einem anderen Knoten erstellt, auf dem sich das primäre Shard nicht befindet. Um das System fehlertolerant zu machen, müssen Sie möglicherweise die Anzahl der Knoten in Ihrem Cluster erhöhen. Dies hängt auch von der Anzahl der Shards Ihres Index ab. Die allgemeine Formel zum Berechnen der erforderlichen Anzahl von Knoten basierend auf Repliken und Shards lautet "Anzahl der Knoten = Anzahl der Shards * (Anzahl der Repliken + 1)". Die Standardpraxis besteht darin, mindestens eine Replik für Fehlertoleranz zu haben.
Das Festlegen der Anzahl von Shards ist eine statische Operation, dh Sie müssen sie beim Erstellen eines Index angeben. Jede Änderung nach diesem Vorgang erfordert eine vollständige Neuindizierung der Daten und erfordert Zeit. Das Einrichten der Anzahl von Replikaten ist jedoch eine dynamische Operation und kann auch nach der Indexerstellung jederzeit ausgeführt werden.
sie können die Anzahl der Shards und Repliken für Ihren Index mit dem folgenden Befehl festlegen.
curl -XPUT 'localhost:9200/sampleindex?pretty' -H 'Content-Type: application/json' -d '
{
"settings":{
"number_of_shards":2,
"number_of_replicas":1
}
}
'