1

典型的な Web サービスの典型的な懸念事項の分離を想定すると、次のようになります。

  • 複数のクライアント API マシン (Apache2 Web サーバー、Java/PHP、カスタム コード)
  • Cassandra ストレージ クラスター
  • Cassandra ノードあたり 5 台以上のクライアント API マシン

Client-API (カスタム コード) のアップタイムを保証する Cassandra の高可用性機能は何ですか?

一般的なソリューションには、次のものが含まれます。

  • ヘルスモニタリングを備えた内部ロードバランサー (通常のロードバランサー HA がここに適用されます)
  • または、クライアント ライブラリで構成された複数のバックアップ ノード IP が、ランダムまたは順番に接続を試行します。
  • アプリケーションコードでこれのクライアントライブラリ処理をシミュレートします(1つが接続されるまで複数のノードを試してください)

ただし、「ベストプラクティス」や「これが私が行ったこと」など、これについての言及はあまり見当たらないようです。

具体的に言うと、私は現在 Cassandra について学んでおり、Zend Framework (PHP) プロジェクトに導入することに興味があり、複数のクライアント API マシンから Cassandra への高可用性接続のベスト プラクティスを知りたいと考えています。

1 回限りの障害は管理できますが、個々のノードの障害によるサービスのダウンタイムは明らかに理想的ではありません。

また、上記の高可用性環境でスプリットブレインが Cassandra でどのように管理されるかを説明するためのボーナスポイント。

4

1 に答える 1

1

Cassandra は、設計によりフォールト トレランス / HA をサポートしています。 これを理解するには、Cassandra でのヒント付きハンドオフとメッセージ ルーティングをお読みください。

スプリットブレイン処理については、分散同期機能/ロックなどにCages Java lib を使用することを考えるかもしれません。

Cassandraから- 分散型構造化ストレージ システム:

Cassandra はレプリケーションを使用して、高可用性と耐久性を実現します。各データ項目は、N 個のホストで複製されます。ここで、N は「インスタンスごとに構成された複製係数」です。各キー k は、コーディネーター ノード に割り当てられます。コーディネーターは、その範囲内にあるデータ項目の複製を担当します。範囲. 範囲内の各キーをローカルに保存することに加えて, コーディネーターはリング内の N-1 ノードでこれらのキーを複製します. Cassandra は、データを複製する必要がある方法についてクライアントにさまざまなオプションを提供します.クォーラム要件を緩和することで、ノード障害とネットワーク パーティションを軽減します。

クライアントが node1 などのクラスター内のランダムなノードに接続している場合、以下のシナリオが考えられます。

読んだ

[成功] ノード 1 は稼働中で、要求されたデータも持っています

[成功] node1 は稼働中であり、要求されたデータを持っていないため、コーディネーター ノードとして機能し、node2 などのデータを持つレプリカに要求をルーティングします。node2 が起動しており、リクエストを処理できると仮定します。

[NODE DOWN] node1 がダウンしており、要求されたデータがありました。クライアントは UnAvailableException を受け取り、クラスター内の他のノードに接続できます。最小限のレプリカがクエリを処理する必要がある場合、それは成功です。

[REPLICA NODE DOWN] node1 は稼働中であり、要求されたデータを持っていないため、コーディネーター ノードとして機能し、node2 などのデータを持つレプリカに要求をルーティングします。node2 がダウンしていて、リクエストを処理できないとします。他のレプリカが死んでおらず、リクエストを処理できる場合、成功となります。リクエストの送信中にレプリカが稼働していたが、その直後に停止した場合、TimedOutException がスローされます。クライアントは、クラスター内の他のノードに接続できます。

書きます

[成功] ノード 1 が稼働しており、要求されたデータを保存することも想定しています

[成功] node1 は稼働中であり、要求されたデータ トークン範囲を持っていない (このデータを格納する責任がない) ため、コーディネーター ノードとして機能し、データを格納すると想定されるノード 2 などのレプリカに要求をルーティングします。node2 が起動していて、リクエストを処理できるとします。

[NODE DOWN] node1 がダウンしており、要求されたデータを保存することも想定しています。クライアントは UnAvailableException を受け取り、クラスター内の他のノードに接続できます。プライマリ ノードがダウンしているため、ヒント付きハンドオフ リクエストはレプリカに保存されます。

[REPLICA NODE DOWN] node1 は UP であり、要求されたデータ トークン範囲を持っていない (このデータを格納する責任がない) ため、コーディネーター ノードとして機能し、要求をレプリカ node2 にルーティングします。データ。node2 がダウンしていて、リクエストを処理できないとします。他のレプリカが死んでおらず、リクエストを処理できる場合、成功となります。ヒント付きのハンドオフは、レプリカ/コーディネーター ノードに書き込まれます。

于 2013-09-10T06:00:39.257 に答える