Cassandraの高可用性
NetworkTopologyStrategyを備えた6ノードのCassandraクラスターがあります。スキーマは次のとおりです。
Rack1
Cassandra-01
Cassandra-02
Rack2
Cassandra-03
Cassandra-04
Rack3
Cassandra-05
Cassandra-06
読み取り/書き込みにはCL = QUORUMとレプリケーションファクター3を使用するため、技術的には、単一のRACK障害(ラックからの2ノードの損失)を許容します。
たとえば、Cassandraクラスター(CL = QUORUM、RF = 3)に書き込み、Rack3がオフラインになり(ハードウェア障害)、合計で4つのノードがあります。理論的には、整合性レベルが満たされているため、Cassandraにデータを読み書きできるはずです。しかし、[カサンドラ計算機]を使用すると、次のように表示されます。
アプリケーションに影響を与えることなく、1つのノードの損失に耐えることができます。
そして
データを失うことなく、1つのノードの損失を乗り切ることができます。
しかし、なぜ1つのノードしかないのでしょうか。
回答
電卓には、上記の構成のラックの側面に関する知識が組み込まれていません。そのため、とりあえずそのままにしておきましょう。クォーラムでRF3と書き込み/読み取りの6つのノードを入力しました。
関係するラックがなかった場合(それらはすべて同じラックにあります)、答えは理にかなっています。
クォーラムで書き込みが行われていたため、書き込みの時点で2つのノードのデータが成功として確認されることを保証できます。2つのノードの書き込みの直後に失敗した場合、データが失われる可能性があります(3番目のノードがデータを取得しません)。したがって、最悪のシナリオでは、潜在的なデータ損失なしに1ノードの損失しか許容できません。
3つのラック、ラックごとに2つのノードでNetworkTopologyStrategyを使用すると、Quorumを使用すると、ラック全体が失われ、引き続き動作する可能性があると言うのは正しいです。なぜ計算が変わるのですか?
計算の一部はそうではありません-クォーラムで書き込み、クォーラムで読み取りを行うことはできますが、読み取られているノードにまだデータがない可能性はありますが、読み取りを修復して修正する必要があります。(テーブルなどで有効になっていると仮定します)
ただし、データを失うことはありません。ラックの側面は、ダウンした同じラック内の2つのノードの両方に同じパーティションが表示されていないことをさらに確実にすることも意味するためです。したがって、2つのノードがダウンしている間、同じパーティションの2つのコピーを削除しませんでした-別のラックの少なくとも1つのノードにデータがあります(そうでない場合、クォーラム書き込みは確認されません)
ページ自体のgithubリンクをたどると、htmlで提供される各値の計算を確認できます。次に例を示します。
var dataloss = w - 1;
$('#dataloss').text( dataloss > 1 ? dataloss+" nodes" : dataloss === 1 ? "1 node" : "no nodes");
この場合のwは、「書き込み」整合性レベルであり、クォーラムに設定すると、wは2として計算されます。ラックへの入力もコードでの考慮もありません。