wake-up-neo.com

Scherben und Nachbildungen in Elasticsearch

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.

243
LuckyLuke

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.

788
javanna

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.

19
jyu

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

18
ppearcy

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.

4
Pruthvi Kumar

Shard:

  1. Als verteilter Suchserver verwendet ElasticSearch das Konzept Shard, um Indexdokumente auf alle Knoten zu verteilen.
  2. Eine index kann potenziell eine große Datenmenge speichern, die die Hardware-Grenzen eines single node überschreiten kann.
  3. Beispielsweise kann ein einzelner Index von einer Milliarde Dokumente, die 1 TB von Speicherplatz beanspruchen, möglicherweise nicht auf die Festplatte eines einzelnen Knotens passen oder auch Langsam sein, um Suchanfragen von einem einzelnen Knoten alleine zu bedienen.
  4. Um dieses Problem zu lösen, bietet Elasticsearch die Möglichkeit, Ihren Index in mehrere Teile mit dem Namen shards zu unterteilen.
  5. Wenn Sie einen Index erstellen, können Sie einfach die gewünschte Anzahl von shards Definieren.
  6. Documents werden in shards gespeichert, und Shards werden nodes in .__ zugewiesen. Ihre cluster
  7. Wenn Ihre cluster wächst oder schrumpft, werden Elasticsearch automatisch Shards zwischen nodes migrieren, sodass die cluster ausgewogen bleibt.
  8. Ein Shard kann entweder ein primary shard oder ein replica shard sein.
  9. Jedes Dokument in Ihrem Index gehört zu single primary shard. Die Anzahl der primären Shards, die Sie haben, bestimmt die maximale Anzahl von Daten, die Ihr Index aufnehmen kann
  10. Ein replica shard ist nur eine Kopie eines primären Shards.

Replik:

  1. Replica shard ist die Kopie von primary Shard, um Datenverlust in Fall eines Hardwarefehlers zu verhindern.
  2. Mit Elasticsearch können Sie eine oder mehrere Kopien der -Shards Ihres Index in sogenannte Replikatshards oder replicas umwandeln.
  3. Eine index kann auch null (dh keine Replikate) oder mehr Zeiten repliziert werden.
  4. number of shards 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 jederzeit dynamisch ändern, jedoch cannot change the number of shards After-the-fact.
  6. Standardmäßig wird jedem Index in 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.
2
Vino

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?

1

Keine Antwort, sondern eine weitere Referenz für Kernkonzepte zu ElasticSearch, und ich denke, dass sie als Kompliment zu @ javannas Antwort ziemlich klar sind.

Scherben

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.

Repliken

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.
0
Hearen

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.

0
Ayush Jain

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 } } '