2010-09-30 6 views
7

Ich habe einen 2-Knoten-Cassandra-Cluster mit einem Replikationsfaktor von 2 und AutoBootStrap = True. Beim Start ist alles gut und beide Knoten sehen sich. Lassen Sie uns diese Knoten A und B.Cassandra Data Replication Problem

nennen
  1. hinzufügen eine Reihe von Tasten und Spalten (lässt dieses Set K1 nennen) zu cassandra durch den Knoten A.
  2. Connect zum Knoten A und zurückgelesen Gruppe K1. Gleiche auf Knoten B. Erfolg - Gut
  3. Tötung Cassandra Prozess auf Knoten B.
  4. set K2 durch A.
  5. Connect zum Knoten A und Lese K2 eingestellt. Gut
  6. Starten Sie den Cassandra-Prozess auf Knoten B.
  7. Versuchen Sie, alle Schlüssel aus B zu lesen ... K1 vorhanden, K2 MISSING setzen. (Auch nach 30 Minuten)
  8. K3 zu A/B hinzufügen.
  9. Alle Schlüssel von A lesen - kehrt zurück K1, K2, K3
  10. Alle Schlüssel aus B lesen - kehrt zum Satz K1, K3 zurück.

B Synchronisierungen nie K2 gesetzt ... (Es ist schon mehr als 12 Stunden) Warum Knoten B K2 nicht gesetzt sehen ... jemand eine Idee?


Added Info:

Ok ... das war das Problem. Der Wert read_consistency_level wurde standardmäßig auf 1 gesetzt.

Also, wenn wir Knoten B für Satz K2 fragen, und es hat es nicht (wenn es wegen des Replikationsfaktors = 2 sein soll), wird es sofort mit einem 'Not found' Fehler zurückgegeben.

Wenn jedoch die Lesekonsistenz QUORUM oder ALL ist, dann wird B gezwungen, A zu fragen, was dann den korrekten Wert zurückgibt und B den Schlüssel synchronisiert (speichert ihn lokal).

Dies führt zu einem anderen Problem - Dies bedeutet, dass, wenn Knoten B kommt, es nicht alle Daten von Knoten A synchronisiert, auch nach einer langen Zeit. Wenn nun Knoten A ausfällt, wie können wir dann auf diese nicht synchronisierten Daten zugreifen? (Ich habe gerade getestet, dass wir nicht können)

Ich denke, es muss einen Weg geben, um die Daten zu erzwingen. Ich sehe die INFO in der Terminal-Ausgabe, die ein angedeutet Handoff von 15 Reihen von A nach B ist aufgetreten, wenn B kam, aber B nicht über die Zeilen vor Ort (weil wir können immer noch nicht aus B mit Konsistenz Level One lesen). Was ist denn hier los?

Antwort

6

Es gibt 3 Möglichkeiten cassandra syncs Updates, die passiert ist, während ein Knoten nach unten war:

  1. Handoff angedeutet. erfordert, dass der Fehlerdetektor auf A erkennt, dass B inaktiv ist, bevor Sie K2 schreiben. Siehe http://wiki.apache.org/cassandra/HintedHandoff
  2. Lese Reparatur. erfordert, dass B aktiv ist, wenn K2 für die Reparatur angefordert wird. Siehe http://wiki.apache.org/cassandra/ReadRepair
  3. Antientropie Reparatur. muss manuell aufgerufen werden ("nodetool repair"). siehe http://wiki.apache.org/cassandra/AntiEntropy
+0

Dank jBellis. Ich bin mit Cassandra einen Schritt weiter gekommen.Ich stieß jedoch auf ein anderes Problem und fügte der Frage einige Informationen hinzu. – Rajan