Wie entferne Knoten aus dem Cassandra-Cluster entfernen?

8
  1. Ich habe den Cassandra-Cluster von 12 Knoten auf EC2.
  2. Wegen eines Fehlers haben wir einen Knoten vollständig verloren. Ich meine, dass die Maschine nicht mehr existiert.
  3. Also habe ich die neue EC2-Instanz mit einer anderen IP und demselben Token wie die des toten Knotens erstellt, und ich hatte auch die Sicherung von Daten auf diesem Knoten, so dass es funktioniert
  4. Aber das Problem ist, dass die toten Knoten ip immer noch als unerreichbarer Knoten im Cluster erscheint.
  5. Da dieser Knoten (EC2-Instanz) nicht mehr existiert, kann ich nicht die nodetool-Dekommissionierung oder nodetool disablegossip
  6. verwenden

Wie kann ich diesen nicht erreichbaren Knoten loswerden

?     
samarth 21.12.2011, 12:36
quelle

2 Antworten

6

Wenn Sie einen Knoten ersetzen möchten, müssen Sie das Token des neuen Knotens normalerweise auf (failure node's token) - 1 setzen und es dann bootstrappen lassen. Ab 1.0 gibt es jetzt ein Flag, das Sie beim Start angeben können, um einen toten Knoten zu ersetzen : "cassandra.replace_token=".

Da Sie den neuen Knoten bereits mit demselben Token hinzugefügt haben, gibt es einen zusätzlichen Schritt:

  1. Verschiebe das Token des neuen Knotens mit (failure node's token) - 1 nach nodetool move
  2. Führen Sie nodetool removetoken <failed node's token> von einem der up-Knoten aus
  3. aus
  4. Führen Sie nodetool cleanup auf jedem Knoten
  5. aus

Dies sind im Grunde die vor 1.0 Anweisungen zum Ersetzen eines toten Knotens mit das zusätzliche Token verschieben.

    
psanford 21.12.2011, 17:12
quelle
7

Ich hatte das gleiche Problem und löste es mit removenode , was es nicht erforderlich macht, das Knoten-Token zu finden und zu ändern.

Ermitteln Sie zuerst die Knoten-UUID:

%Vor%

Wie Sie sehen können, sind die .201 und .202 tot und in einem anderen Netzwerk. Diese wurden zu .91 und .92 ohne ordnungsgemäße Außerbetriebnahme und Wiederinbetriebnahme geändert. Ich arbeitete an der Installation des Netzwerks und machte ein paar Fehler ...

Zweitens entfernen Sie die .201 mit dem folgenden Befehl:

%Vor%

(in älteren Versionen wurde nodetool entfernt ...)

Aber genau wie für nodetool removetoken ... blockiert es ... (siehe Kommentar von samarth in psandord antwort) Es hat jedoch einen Nebeneffekt, es setzt diese UUID in eine Liste von Knoten, die entfernt werden sollen. Als nächstes können wir die Entfernung mit:

erzwingen %Vor%

(in älteren Versionen wurde nodetool entfernt ...)

Nun akzeptiert der Knoten den Befehl und sagt mir, dass er den ungültigen Eintrag entfernt:

  

RemovalStatus: Token entfernen (-9136982325337481102). Warten auf Replikationsbestätigung von [/192.168.2.91,/192.168.2.92].

Wir sehen auch, dass es mit den zwei anderen Knoten kommuniziert, die oben sind, und daher dauert es ein wenig, aber es ist immer noch ziemlich schnell.

Als nächstes zeigt ein nodetool status den .201-Knoten nicht an. Ich wiederhole mit .202 und jetzt ist der Status sauber.

Danach können Sie auch eine Bereinigung ausführen, wie in psanford answer erwähnt:

%Vor%

Die Bereinigung sollte auf allen Knoten nacheinander ausgeführt werden, um sicherzustellen, dass die Änderung vollständig berücksichtigt wird.

    
Alexis Wilke 31.10.2014 22:53
quelle