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?
Antworten:
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.
quelle
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.
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.
quelle