Ich versuche zu verstehen, was Shard und Replik in Elasticsearch sind, aber ich habe es nicht verstanden. Wenn ich Elasticsearch herunterlade und das Skript ausführe, habe ich nach meinem Kenntnisstand 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 brauchen.
elasticsearch
full-text-search
Lucky Luke
quelle
quelle
Antworten:
Ich werde versuchen, dies anhand eines echten Beispiels zu erklären, da die Antwort und die Antworten, die Sie erhalten haben, Ihnen nicht zu helfen scheinen.
Wenn Sie elasticsearch herunterladen und starten, erstellen Sie einen elasticsearch-Knoten, der versucht, einem vorhandenen Cluster beizutreten, falls verfügbar, oder einen neuen erstellt. 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 automatisch erstellt, wenn Sie auch das erste Dokument indizieren), können Sie festlegen, aus wie vielen Shards es bestehen soll. Wenn Sie keine Nummer angeben, wird die Standardanzahl der Shards angegeben: 5 Primärshards. Was bedeutet das?
Dies bedeutet, dass elasticsearch 5 primäre Shards erstellt, die Ihre Daten enthalten:
Jedes Mal, wenn Sie ein Dokument indizieren, entscheidet elasticsearch, welcher primäre Shard dieses Dokument enthalten soll, und indiziert es dort. Primäre Shards sind keine Kopie der Daten, sondern die Daten! Wenn Sie mehrere Shards haben, können Sie die Parallelverarbeitung auf einem einzelnen Computer nutzen. Wenn wir jedoch eine andere Elasticsearch-Instanz auf demselben Cluster starten, werden die Shards gleichmäßig über den Cluster verteilt.
Knoten 1 enthält dann beispielsweise nur drei Shards:
Da die verbleibenden zwei Shards auf den neu gestarteten Knoten verschoben wurden:
Warum passiert das? Da elasticsearch eine verteilte Suchmaschine ist und Sie auf diese Weise mehrere Knoten / Maschinen verwenden können, um große Datenmengen zu verwalten.
Jeder Elasticsearch-Index besteht aus mindestens einem primären Shard, da dort die Daten gespeichert werden. Jeder Shard ist jedoch mit Kosten verbunden. Wenn Sie also einen einzelnen Knoten und kein vorhersehbares Wachstum haben, bleiben Sie einfach bei einem einzelnen primären Shard.
Eine andere Art von Scherbe ist eine Nachbildung. Der Standardwert ist 1, was bedeutet, dass jeder primäre Shard in einen anderen Shard kopiert wird, der dieselben Daten enthält. Replikate werden verwendet, um die Suchleistung zu erhöhen und ein Failover durchzuführen. Ein Replikat-Shard wird niemals auf demselben Knoten zugewiesen, auf dem sich die zugehörige Primärdatenbank befindet (es wäre so ziemlich so, als würde eine Sicherung auf derselben Festplatte wie die Originaldaten erstellt).
Zurück zu unserem Beispiel: Mit 1 Replikat haben wir den gesamten Index für jeden Knoten, da 2 Replikat-Shards auf dem ersten Knoten zugewiesen werden und genau dieselben Daten enthalten wie die primären Shards auf dem zweiten Knoten:
Gleiches gilt für den zweiten Knoten, der eine Kopie der primären Shards auf dem ersten Knoten enthält:
Wenn bei einem solchen Setup ein Knoten ausfällt, haben Sie immer noch den gesamten Index. Die Replikatshards werden automatisch zu Primärsplittern und der Cluster funktioniert trotz des Knotenausfalls wie folgt ordnungsgemäß:
Seitdem
"number_of_replicas":1
können die Replikate nicht mehr zugewiesen werden, da sie niemals auf demselben Knoten zugewiesen werden, auf dem sich ihre primäre befindet. Aus diesem Grund haben Sie 5 nicht zugewiesene Shards, die Replikate und der Clusterstatus wirdYELLOW
anstelle vonGREEN
. Kein Datenverlust, aber es könnte besser sein, da einige Shards nicht zugewiesen werden können.Sobald der verbleibende Knoten gesichert ist, wird er erneut dem Cluster beigetreten und die Replikate werden erneut zugewiesen. Der vorhandene Shard auf dem zweiten Knoten kann geladen werden, sie müssen jedoch mit den anderen Shards synchronisiert werden, da Schreibvorgänge höchstwahrscheinlich während des Ausfalls des Knotens ausgeführt wurden. Am Ende dieses Vorgangs wird der Clusterstatus
GREEN
.Hoffe das klärt die Dinge für dich.
quelle
Ein Index wird in Shards aufgeteilt, um sie zu verteilen und zu skalieren.
Replikate sind Kopien der Shards und bieten Zuverlässigkeit, wenn ein Knoten verloren geht. Diese Zahl ist häufig verwirrend, da die Anzahl der Replikate == 1 bedeutet, dass der Cluster über die Haupt- und eine replizierte Kopie des Shards verfügen muss, um im grünen Zustand zu sein.
Damit Replikate erstellt werden können, müssen mindestens 2 Knoten in Ihrem Cluster vorhanden sein.
Möglicherweise sind die Definitionen hier leichter zu verstehen: http://www.elasticsearch.org/guide/reference/glossary/
Beste Grüße, Paul
quelle
Wenn Sie es wirklich nicht gelb sehen möchten. Sie können die Anzahl der Replikate auf Null setzen:
Beachten Sie, dass Sie dies nur auf Ihrer lokalen Entwicklungsbox tun sollten.
quelle
Scherbe:
ElasticSearch
ein Konzept verwendet,Shard
mit dem Indexdokumente auf alle Knoten verteilt werden.index
kann möglicherweise eine große Datenmenge speichern, die die Hardwaregrenzen von a überschreiten kannsingle node
Elasticsearch
Ihren Index in mehrere aufgerufene Teile unterteilenshards
.shards
gewünschte Anzahl definieren .Documents
werden in gespeichertshards
und Shards werdennodes
in Ihrem zugeordnetcluster
cluster
wächst oder schrumpft,Elasticsearch
werden automatisch Scherben dazwischen migriert,nodes
so dass dascluster
Gleichgewicht bleibt.primary shard
oder a seinreplica shard
.single primary shard
, sodass die Anzahl der primären Shards, über die Sie verfügen, die maximale Datenmenge bestimmt, die Ihr Index enthalten kannreplica shard
ist nur eine Kopie eines primären Splitters.Replik:
Replica shard
ist die Kopie vonprimary Shard
, um Datenverlust bei Hardwarefehlern zu vermeiden.Elasticsearch
Mit dieser Option können Sie eine oder mehrere Kopien der Shards Ihres Index in so genannte Replikatshards oderreplicas
kurz Replikate erstellen .index
kann auch null (dh keine Replikate) oder mehrmals repliziert werden.number of shards
und Replikate können zum Zeitpunkt der Indexerstellung pro Index definiert werden.cannot change the number of shards
.Elasticsearch
5 primäre Shards zugewiesen.1 replica
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ändiges Replikat) für insgesamt 10 Shards pro Index.quelle
Ein Index wird in Shards aufgeteilt, um sie zu verteilen und zu skalieren.
Repliken sind Kopien der Scherben.
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 haben. Jeder Cluster verfügt über einen einzelnen Masterknoten, der vom Cluster automatisch ausgewählt wird und der ersetzt werden kann, wenn der aktuelle Masterknoten ausfällt.
quelle
AWS ec2
Instanzen, auf denen jeweils elasticsearch installiert ist. Bedeutet das, dass wir hier drei Knoten haben? Wenn alle diese Knoten denselbencluster.name: test
Eigenschaftssatz haben, wird dann ein Clustername erstellt,test
der drei Knoten haben würde?Ich werde dies anhand eines realen Wortszenarios erklären. Stellen Sie sich vor, Sie betreiben eine E-Commerce-Website. Je beliebter Sie werden, desto mehr Verkäufer und Produkte werden Ihrer Website hinzugefügt. Sie werden feststellen, dass die Anzahl der Produkte, die Sie möglicherweise indizieren müssen, gestiegen ist und zu groß ist, um auf eine Festplatte eines Knotens zu passen. Selbst wenn es auf die Festplatte passt, ist die lineare Suche durch alle Dokumente auf einem Computer äußerst langsam. Ein Index auf einem Knoten nutzt die verteilte Clusterkonfiguration, auf der die Elasticsearch funktioniert, nicht aus.
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. Dieses Sharding von Daten ermöglicht die Suche mit geringer Latenz in der Elasticsearch. Die Suche wird parallel auf mehreren Knoten durchgeführt. Die Ergebnisse werden aggregiert und zurückgegeben. Die Shards bieten jedoch keine Fehlertoleranz. Das heißt, wenn ein Knoten, der den Shard enthält, ausgefallen ist, wird der Clusterzustand gelb. Dies bedeutet, dass einige der Daten nicht verfügbar sind.
Um die Fehlertoleranz zu erhöhen, kommen Repliken ins Bild. Durch Deaktivieren der elastischen Suche wird eine einzelne Replik jeder Scherbe erstellt. Diese Replikate werden immer auf einem anderen Knoten erstellt, auf dem sich der 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 zur Berechnung der Anzahl der erforderlichen Knoten basierend auf Replikaten und Shards lautet "Anzahl der Knoten = Anzahl der Shards * (Anzahl der Replikate + 1)". Die Standardpraxis besteht darin, mindestens eine Replik für Fehlertoleranz zu haben.
Das Einrichten der Anzahl der Shards ist eine statische Operation. Dies bedeutet, dass Sie sie beim Erstellen eines Index angeben müssen. Jede Änderung nach diesem Vorgang erfordert eine vollständige Neuindizierung der Daten und wird einige Zeit in Anspruch nehmen. Das Einrichten der Anzahl der Replikate ist jedoch ein dynamischer Vorgang und kann jederzeit auch nach der Indexerstellung durchgeführt werden.
Mit dem folgenden Befehl können Sie die Anzahl der Shards und Replikate für Ihren Index festlegen.
quelle
Keine Antwort, sondern eine weitere Referenz für Kernkonzepte von ElasticSearch, und ich denke, sie sind als Ergänzung zu @ javannas Antwort ziemlich klar.
Scherben
Repliken
quelle
In ElasticSearch indizieren wir auf der obersten Ebene die Dokumente in Indizes. Jeder Index hat eine Anzahl von Shards, die die Daten intern verteilen, und innerhalb der Shards befinden sich die Lucene-Segmente, die den Kernspeicher der Daten bilden. Wenn der Index also 5 Shards enthält, bedeutet dies, dass Daten auf die Shards verteilt wurden und nicht dieselben Daten in den Shards vorhanden sind.
Achten Sie auf das Video, in dem der Kern von ES https://www.youtube.com/watch?v=PpX7J-G2PEo erläutert wird
Artikel über mehrere Indizes oder mehrere Shards Elastische Suche, mehrere Indizes gegen einen Index und Typen für verschiedene Datensätze?
quelle
Elasticsearch ist hervorragend skalierbar, da alle Vorteile der verteilten Architektur zugute kommen . Dies wird durch Sharding ermöglicht. Bevor wir uns näher damit befassen, betrachten wir einen einfachen und sehr häufigen Anwendungsfall. Nehmen wir an, Sie haben einen Index, der eine Menge 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 einzelnen Dokuments in diesem Index beträgt 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. Daher müssen wir unseren Index auf diese Knoten verteilen.
In solchen Fällen, in denen die Größe eines Index die Hardwarelimits eines einzelnen Knotens überschreitet , hilft Sharding . Sharding löst dieses Problem, indem die Indizes in kleinere Teile unterteilt werden. Diese Teile werden als Shards bezeichnet.
quelle
Im einfachsten Sinne ist das
shard
nichts anderes als ein Teil eines Index, der auf der Festplatte in einem separaten Ordner gespeichert ist:Dieser Screenshot zeigt das gesamte Elasticsearch-Verzeichnis.
Wie Sie sehen können, gehen alle Daten in das
data
Verzeichnis.Wenn
C-mAfLltQzuas72iMiIXNw
wir den Index untersuchen , sehen wir, dass er fünf Shards (Ordner0
zu4
) enthält.Andererseits hat der
JH_A8PgCRj-GK0GeQ0limw
Index nur einen Shard (0
Ordner).Die
pri
Ansichten geben die Gesamtzahl der Shards an.quelle