2017-09-05 2 views
0

私のプロジェクト要件はこのようになります。私たちは、マルチデータセンター(DC)のカサンドラクラスターを使用しています。クラスタへの書き込み中は、書き込みが開始されたソースに基づいて書き込み要求を既に目的のDCにルーティングしているため、LOCAL DCのみでノードの書き込みを実行します。したがって、ローカルDCだけで書き込みを処理し、他のDCはノードで書き込みを実行しないようにします。しかし、後でDC間のノード間のレプリケーションのおかげで、書かれたデータをDC間でレプリケートする必要があります。最初の場所で1つのDCのみに書き込みを制限しているときに、DC間でこの複製が可能です。私はこれにDCAwareRoundRobinポリシーを使用することを考えました。書き込み操作中に異なるDCにあるREMOTEホストへの接続を開かないと、後でDC間でデータ複製が可能になります。すべてのDCでデータのレプリカが必要なのは、クラスタからのデータの読み取り中に、必ずしもローカルではなく、読み取り要求が発生するすべてのDCからデータを読み取るようにするためです。Cassandra multi-DC:LOCALで書かれていて、どんなDCでも読む必要があります

答えて

2

はい、間違いありません。接頭辞「LOCAL_」の一貫性レベルでは、単一のデータセンターにデータを書き込み、他のデータセンターに非同期でレプリケートできます。しかし、この場合、最終的な整合性のみが保証されます。つまり、書き込まれたデータは、非同期レプリケーションのために他のデータセンターにすぐには表示されません。データセンター間に強い整合性が必要な場合は、接頭辞「EACH」の整合性レベルを使用する必要がありますが、待ち時間に大きな影響を与えます。

単一のデータセンターで書き込み要求に強固な一貫性が必要な場合は、次のルールを満たす必要があります(nodes_written + nodes_read)> number_of_replicasたとえば、各データセンターに3つのレプリカがある場合は、 LOCAL_QUORUM整合性レベル(2 + 2> 3)を使用します。最終的な整合性が十分であれば、LOCAL_ONEを使用できます。

There is「地理的な場所のシナリオ」のセクションで同様のケース。

+0

答えてくれてありがとうNikita。もう1つの説明。 3つのDC(DC1、DC2、DC3、各DCに3つのノードがあり、複製係数が3)を持つマルチDCクラスタの読み込み一貫性のためにLOCAL_QUORUMを使用します。このノードは故障しており、DC1の2番目のノードに接続されています.DC1のすべてのノードが故障したと想定します。次に、クラスタは、DC2またはDC3のいずれかを見て、LOCAL_QUORUMを満たすようにする。すなわち、いずれかのDC(DC2またはDC3)からの2つの一貫性のある読み取りの確認を探し、成功すれば成功とみなされるか? –

+0

LOCAL_QUORUMがローカルデータセンターで成功することができない場合、CQLクエリは他のデータセンターにヒットしません。しかし、ドライバはDCAwareRoundRobinPolicyを使用してこのような機能を実装していますが、[推奨されません]ようです(https://medium.com/@foundev/cassandra-local-quorum-should-stay-local-c174d555cc57)。また、[この記事](https://medium.com/@foundev/cassandra-how-many-nodes-are-talked-to-with-quorum-also-should-i-use-it-98074e75d7d5)は役に立ちます適切な整合性レベルを選択する。 –

関連する問題