Ich werde dies anhand von realen Szenarien erklären. Stellen Sie sich vor, Sie betreiben eine E-Commerce-Website. Je populärer Sie werden, desto mehr Verkäufer und Produkte fügen Sie Ihrer Website hinzu. Sie werden feststellen, dass die Anzahl der Produkte, die indiziert werden müssen, gewachsen ist und zu groß ist, um auf eine Festplatte eines einzelnen Knotens zu passen. Selbst wenn es auf die Festplatte passt, ist eine lineare Suche durch alle Dokumente auf einer Maschine extrem langsam. Ein Index auf einem Knoten nutzt nicht die verteilte Clusterkonfiguration, auf der Elasticsearch funktioniert.
Deswegen teilt Elasticsearch die Dokumente im Index auf mehrere Knoten im Cluster auf. Jede Aufteilung des Dokuments wird als Shard bezeichnet. Jeder Knoten, der einen Shard eines Dokuments trägt, hat nur einen Teil des Dokuments. Nehmen wir an, Sie haben 100 Produkte und 5 Shards, jeder Shard wird 20 Produkte enthalten. Diese Aufteilung der Daten ist es, was schnelle Suchvorgänge mit geringer Latenz in Elasticsearch möglich macht. Die Suche wird parallel auf mehreren Knoten durchgeführt. Die Ergebnisse werden zusammengeführt und zurückgegeben. Allerdings bieten die Shards keine Ausfallsicherung. Das bedeutet, dass wenn ein Knoten, der den Shard enthält, nicht verfügbar ist, wird der Clusterstatus gelb. Das bedeutet, dass einige Daten nicht verfügbar sind.
Um die Ausfallsicherheit zu erhöhen, kommen Replikate ins Spiel. Standardmäßig erstellt Elastic Search eine einzige Replik jedes Shards. Diese Replikate werden immer auf einem anderen Knoten erstellt, auf dem sich der primäre Shard nicht befindet. Daher müssen Sie möglicherweise die Anzahl der Knoten in Ihrem Cluster erhöhen, um das System ausfallsicher zu machen, dies hängt auch von der Anzahl der Shards Ihres Index ab. Die allgemeine Formel zur Berechnung der Anzahl der benötigten Knoten basierend auf Replikaten und Shards lautet "Anzahl der Knoten = Anzahl der Shards * (Anzahl der Replikate + 1)". Die Standardpraxis ist, mindestens ein Replikat für die Ausfallsicherheit zu haben.
Das Festlegen der Anzahl der Shards ist ein statischer Vorgang, das bedeutet, dass Sie es angeben müssen, wenn Sie einen Index erstellen. Jede Änderung danach erfordert eine komplette Neuindizierung der Daten und wird Zeit in Anspruch nehmen. Das Festlegen der Anzahl der Replikate ist jedoch ein dynamischer Vorgang und kann jederzeit nach der Indexerstellung durchgeführt werden.
Sie können die Anzahl der Shards und Replikate für Ihren Index mit dem folgenden Befehl einrichten.
curl -XPUT 'localhost:9200/sampleindex?pretty' -H 'Content-Type: application/json' -d '
{
"settings":{
"number_of_shards":2,
"number_of_replicas":1
}
}'