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 がダウンしていて、リクエストを処理できないとします。他のレプリカが死んでおらず、リクエストを処理できる場合、成功となります。ヒント付きのハンドオフは、レプリカ/コーディネーター ノードに書き込まれます。