4

Apache Cassandra をどのように構成して災害復旧を可能にし、2 つのデータセンターのうちの 1 つに障害が発生しても対応できるようにしますか?

DataStaxのドキュメントでは、2 つのデータセンターのそれぞれに少なくとも 1 つのレプリケーションが書き込まれるようにするレプリケーション戦略の使用について説明しています。しかし、災害が実際に発生すると、それがどのように役立つかわかりません。残りのデータセンターに切り替えると、それらの書き込みは他のデータセンターに複製できないため、すべての書き込みが失敗します。

ソフトウェアを 2 つのモードで動作させる必要があると思います。書き込みを両方のデータ センター間で複製する必要がある通常モードと、その必要がない災害モードです。しかし、レプリケーション戦略を変更することは不可能のようです。

私が本当に欲しいのは、過剰にプロビジョニングされた 2 つのデータセンターであり、通常の運用中は両方のデータセンターのリソースを使用しますが、残りの 1 つのデータセンターのリソースのみを (パフォーマンスが低下して) 使用します。機能しています。

4

1 に答える 1

10

秘訣は、レプリケーション ファクターを変更する代わりに、書き込み用の API を介して指定された一貫性設定を変更することです。LOCAL_QUORUMデータセンターが 1 つしか利用できない災害時の書き込みには、この設定を使用します。通常の運用中EACH_QUORUMに、両方のデータセンターにデータのコピーがあることを確認するために使用します。読み取りは常に使用できますLOCAL_QUORUM

以下は、複数のデータセンターに関する Datastax ドキュメントの概要と、古いが概念的にはまだ関連のあるディザスター リカバリー (0.7)です。

LOCAL_QUORUMと の 2 つの一貫性を使用して、ニーズに合ったレシピを作成しますEACH_QUORUM

ここで、「ローカル」は単一のデータセンターに対してローカルであることを意味し、「各」は各データセンターで一貫性が厳密に同じレベルで維持されていることを意味します。

2 つのデータセンターがあり、1 つが災害復旧にのみ使用されている場合、レプリケーション係数を次のように設定できます...

プライマリ書き込み/読み取りセンター用に 3 つ、フェールオーバー データ センター用に 2 つ

データが実際にディザスタ リカバリ ノードに書き込まれることがどれほど重要であるかに応じて、EACH_QUORUM または LOCAL_QUORUM のいずれかを使用できます。レプリケーション配置戦略を使用していると仮定するとNetworkTopologyStrategy (NTS)

LOCAL_QUORUMon write は、クライアントがローカルで DC1 に書き込み、DC2 の復旧ノードに非同期的に書き込むのを遅らせるだけです。

EACH_QUORUMすべてのデータがレプリケートされるようにしますが、両方の DC が操作の成功を確認するまで書き込みを遅らせます。

読み取りの場合は、 LOCAL_QUORUM を使用して回避するのが最善の方法inter-data center latencyです。

このアプローチには落とし穴があります。書き込みで EACH_QUORUM を使用することを選択した場合、潜在的な障害ポイントが増加します (DC2 がダウンしている、DC1-DC2 リンクがダウンしている、DC1 クォーラムを満たすことができない)。

おまけに、DC1 がダウンすると、有効な DC2 ディザスター リカバリーが得られます。また、2 番目のリンクでは、IP を適切にルーティングするためのカスタム スニッチ設定について説明しています。

于 2012-11-30T20:51:00.503 に答える