Müssen Sie nodetool repair auf jedem Knoten ausführen?

12

Müssen Sie nodetool repairauf jedem Knoten in einem Cluster ausgeführt werden, oder müssen Sie ihn nur auf einem Knoten ausführen, und von dort aus kümmert sich Cassandra um den Rest?

2rs2ts
quelle

Antworten:

9

Beim Durchsuchen der Dokumentation fällt es mir schwer, eine Referenz dafür zu finden, aber die kurze Antwort lautet "Ja", die Sie nodetool repairauf jedem Knoten in Ihrem Cluster ausführen müssen. Am ehesten finde ich die Dokumentation zum Reparieren von Knoten, aus der hervorgeht, dass Sie nicht mehr als einen Knoten in Ihrem Cluster gleichzeitig reparieren sollten.

Sie können die Reparatur auch mit dem -prFlag ausführen , wodurch der Reparaturvorgang auf den ersten Tokenbereich beschränkt wird, für den der aktuelle Knoten verantwortlich ist. Dies verringert die Doppelarbeit beim Ausführen auf den verbleibenden Knoten.

Aaron
quelle
Wenn ich also -prauf jedem Knoten mit starte, deckt das den gesamten Schlüsselbereich ab?
2.
1
@ 2rs2ts Ja, wenn Sie es -prauf jedem Knoten ausführen, werden alle Schlüsselbereiche abgedeckt.
Aaron
1
Okay ... Ich gehe dann davon aus, dass Sie es auf jedem Knoten ausführen sollen, aber Sie können mit der -prFlagge Zeit sparen .
2.
1
Ich habe der anderen Antwort einige Quellen hinzugefügt. Diese Quelle ist ziemlich klar: "Die harte Anforderung für die Häufigkeit von Routinereparaturen ist der Wert von gc_grace_seconds. Führen Sie in diesem Zeitraum mindestens einmal eine Reparaturoperation auf jedem Knoten aus." Reparieren von Knoten
Carl G
5

Wie es sich verhält, hängt von Ihrer Konfiguration, der verwendeten Version von Cassandra und der Ausführung des Reparaturbefehls ab.

Wenn Sie nur nodetool repairauf einem einzelnen Knoten in einem Cluster ausführen , werden alle Daten (Tokenbereiche) repariert, für die dieser Knoten verantwortlich ist, sowie die anderen Knoten, die für diese Daten verantwortlich sind.

Wenn Sie den nodetool repairBefehl beispielsweise auf einem einzelnen Knoten in einem bestimmten Cluster ausführen würden :

  • Wenn Sie einen Cluster mit drei Knoten und einem Replikationsfaktor von drei ausführen, besitzen alle Knoten alle Daten, und daher werden Reparaturen für alle Knoten ausgeführt.
  • Wenn Sie einen Cluster mit sechs Knoten und einem Replikationsfaktor von 2 ausführen, werden die Daten nur auf zwei der sechs Knoten repariert. Die Reparatur muss auf zwei weiteren der verbleibenden vier Knoten gestartet werden.

Es ist jedoch möglich zu definieren, welche Hosts und Rechenzentren mithilfe der Flags -hostsund repariert werden sollen -dc. Wenn Sie außerdem das -prFlag verwenden (das nur den ersten Token-Bereich auswählt, für den der Knoten verantwortlich ist), müssen Sie nodetool repair -prauf allen Knoten im Cluster ausgeführt werden.

Eine weitere zu beachtende -incFlagge ist die Flagge, die in Cassandra 2.1 enthalten war. Diese Option repariert nur neue Daten (Daten, die zuvor nicht repariert wurden). Seien Sie vorsichtig, wenn Sie sich darauf verlassen, insbesondere wenn Sie häufig Daten löschen. ( mehr dazu )

Beachten Sie außerdem, dass die Standardreparaturen in Cassandra variieren können. Ab Cassandra 2.1 wird beim Ausführen nur nodetool repairstandardmäßig eine vollständige sequenzielle Reparatur ausgeführt. Sie möchten nachschauen, was Ihre Version tut.

Weitere Informationen zum Thema:

https://www.datastax.com/dev/blog/repair-in-cassandra

Gen
quelle
2
die einzig gute
antwort
2

Nein, Sie müssen nicht auf jedem einzelnen Knoten ausgeführt werden. nodetool repairLäuft auf einer Gruppe von Knoten, was in der Dokumentation eindeutig angegeben ist .

Sie können die Knoten oder Teile von Daten einschränken, für die Sie die Reparatur ausführen möchten. Beispielsweise können Sie eine -prOption für den Bereich des Partitionierers angeben, den Bereich, für den der Knoten verantwortlich ist. Dies muss jedoch auf dem gesamten Cluster ausgeführt werden. Wenn Sie jedoch auswählen -local, werden die Knoten im lokalen Datencenter des Knotens repariert.

nkzscorpion
quelle
4
Die Ausführung nodetool repairauf einem einzelnen Knoten reicht nicht aus, um alle replizierten Daten auf allen Knoten in allen Konfigurationen zu reparieren. Das Ausführen nodetool repairauf einem einzelnen Knoten repariert nur Daten, die auf diesem Knoten repliziert wurden. (Durch Hinzufügen der -prOption wird die Reparatur auf Daten beschränkt, für die dieser Knoten das erste Replikat ist.) Wenn sich jedoch Daten in Ihrem Cluster befinden, die nicht auf diesem Knoten repliziert wurden, müssen Sie sie nodetool repairauf zusätzlichen Knoten ausführen .
Carl G
2
"Wenn die Option -pr nicht angegeben ist, repariert Cassandra alle Replikatbereiche, die in den Verantwortungsbereich des Knotens fallen." nodetool repair docs (Das heißt, es werden keine Daten repariert, für die dieser Knoten nicht für die Replikation verantwortlich ist.) "Die strenge Anforderung für die Häufigkeit routinemäßiger Reparaturen ist der Wert von gc_grace_seconds. Führen Sie in diesem Zeitraum mindestens einmal eine Reparaturoperation auf jedem Knoten aus." Reparieren von Knoten
Carl G