2016-09-06 11 views
0

私は3つのデータセンターシナリオでEACH_QUORUMの一貫性を達成するためのいくつかのアイデアを探しています。EACH_QUORUM with Datacenter Loss

私の理解に基づいて、EACH_QUORUMはデータセンターの損失を許容しません。私のすべての書き込みは、データセンターがダウンしている限り失敗します。 1つのオプションは、 'QUORUM'のような一貫性の低いレベルでリクエストを再試行することです。

オプション障害の発生したDCを削除し、残りの2つのライブデータセンターでEACH_QUORUMを達成する方法がある場合は、これを探しています。サーバー側からは、私が考えることができる唯一の方法は、障害のあるデータセンターのすべてのノードを廃止することです。これは面倒です。

データセンターがダウンしていることをクライアントアプリケーションが認識していると仮定すると、Cassandraクライアントドライバからライブデータセンターのリストを渡す方法があるため、コーディネーターノードはそれらのデータセンターでEACH_QUORUMを達成しようとします。

これについての洞察はありがたいです。

+0

[惨事復旧のためのApache Cassandraの設定](http://stackoverflow.com/questions/13647921/configuring-apache-cassandra-for-disaster-recovery)の可能な複製 – Raedwald

答えて

0

RetryPolicyを実装してセッションに適用することで、local_quorumによる再試行を行うことができます。ドライバはeach_quorumを達成することができないことを知っているので、実際には試行しないで、アプリケーションコードにバブルアップさせるのではなく、再試行ポリシーでエラーを処理できます。私はこのアプローチをうまくやってみました。

私が考えていた別のアイデアは、各DC(「ローカルDC」として構成されている)ごとに別々のセッションがあり、それぞれに対して非同期に実行されていました。その後、エラーと、クラスタの状態から収集できるものに応じて、警告を記録するか、エラーをスローします。

-1

私はそれが良い解決策であるとは分かりませんが、単なるアイデアです。

あなたはすることができます一時的に利用できなくrestrict replication鍵空間のために:

cqlsh> ALTER KEYSPACE keyspace1 WITH REPLICATION = 
{'class' : 'NetworkTopologyStrategy', 'upDC1' : 3, 'upDC2' : 3, 'downDC' : 0 }; 

データセンターがUPに来ているときにこのデータセンターと実行修理のため実際の複製数を復元することができます。

0

EACH_QUORUMを使用する理由は、DC障害を生き延びる能力を求めている場合ですか? LOCAL_QUORUMを使用してください。正確に設計されています。

関連する問題