Konfigurieren von Cassandra für die Konsistenz über mehrere Rechenzentren hinweg

7

Derzeit betreiben wir einen Cassandra-Ring mit 4 Knoten in jedem der beiden Rechenzentren. Wir möchten sie zu einem einzigen 8-Knoten-Ring umbauen. Wenn alles andere gleich ist, möchten wir wirklich konsistente Lesevorgänge haben, daher führen wir derzeit QUORUM-Lese- und Schreibvorgänge aus. Wenn wir jedoch ein Rechenzentrum verlieren, scheint dies dazu zu führen, dass viele oder alle Anforderungen fehlschlagen, weil die ConsistencyLevel nicht eingehalten werden kann. Da wir planen, Anforderungen an beide Rechenzentren zu senden, sollte der Wechsel zu LOCAL_QUORUM nicht ausreichen, um die Konsistenz zu gewährleisten.

Cassandra scheint die ConsistencyLevel-Einstellungen, die nur an verfügbaren Knoten gemessen werden, schmerzlich zu fehlen.

Was kann getan werden, um in diesem Szenario maximale Konsistenz ohne Verfügbarkeitsfehler zu erzielen, und was muss abgewogen werden, um dies zu erreichen?

zstewart
quelle
Haben Sie den CAP-Satz überprüft ?
Matthew Flaschen
Ja. A = P> C. Die Frage ist, wie man C dazu bringt , sich anmutig zu verschlechtern, wenn A und P ausgeübt werden.
zstewart
Sie benötigen drei Rechenzentren, wenn Sie eine QUORUM-Konsistenz wünschen.
Serbaut

Antworten:

1

Sie können Ihre App im normalen Betrieb mit QUORUM lesen / schreiben lassen und bei einem DC-Fehler ein Failover auf LOCAL_QUORUM durchführen. Dies müssen Sie selbst tun, da Cassandra dies nicht automatisch tut. Wenn der DC ausfällt, können Sie optional eine Knotenwerkzeugreparatur durchführen, bevor Sie ihn für den Lese- / Schreibzugriff öffnen. Natürlich kann QUORUM in einem Multi-DC-Szenario bedeuten, dass Sie abhängig von der Pipe zwischen ihnen Latenzprobleme haben, aber das ist ein Kompromiss, den Sie abwägen müssen.

rs_atl
quelle
1

das ist einfach nicht möglich. Wenn Ihr Netzwerk partitioniert wird (dh die Verbindung zwischen den Rechenzentren wird unterbrochen) und dann wieder zusammenkommt, wie werden Sie die Änderungen in jedem Rechenzentrum während des Ausfalls in Einklang bringen? Ich frage speziell nach Datensätzen, die sich in BEIDEN Rechenzentren geändert haben.

Cassandra scheint die ConsistencyLevel-Einstellungen, die nur an verfügbaren Knoten gemessen werden, schmerzlich zu fehlen.

Es gibt einen Grund, warum in verteilten Systemen Dinge wie ConsistencyLevel und Quorum vom Administrator geplant werden und nicht dem System überlassen bleiben, automatisch zu entscheiden. Wenn dies der Fall wäre, könnten (wiederum anhand Ihres Beispiels) zwei benachbarte Knoten abgetrennt werden, und diese beiden Knoten würden entscheiden, dass sie beschlussfähig sind und mit dem Rest der Knoten inkonsistent werden.

langer Hals
quelle
Dies ist ein guter Punkt und muss behandelt werden, aber Verfügbarkeit ist König und wir müssen immer noch mit der Hälfte der Knoten arbeiten.
Zstewart