2016-04-22 7 views
1

私は2つのcassandraノード[NodeAとNodeBと呼ぶようにしましょう]の開発用cassandraクラスタを持っています。 NodeAでデータを継続的に送信しているスクリプトもあります。私は以下のパラメータでデータベースを作成しました:ノードの1つがダウンしているときにCassandraが動作しない

CREATE KEYSPACE test_database WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'} AND durable_writes = true; 

ここで、NodeBはしばらくして停止しています。しかし、NodeBが停止すると、NodeAにデータを送信しているスクリプトがデータ挿入エラーを出し始めます。

誰でも同じ理由が考えられますか。

更新:両方のノードがシードノードです。

+0

あなたは複製係数が1であるため、cassandraはそのデータを格納するノードにのみデータを書き込むことができます。 – Whitefret

+0

レプリケーションファクタ= 2の場合、cassandraはノードAに書き込みを行い、ノードbが再起動すると、ノードAはダウンしたときにノードBが見逃すすべてのデータを送信します。 – Whitefret

+0

あなたはcassandraの複製因子、トークン、データ再分割の説明をしたいのですか? – Whitefret

答えて

1

カサンドラの各キーは、トークンに変換することができ

を再分割。クラスタをインストールすると、ノードは受け入れるトークンの範囲を計算します。ノードA店0-4とノードB店5との間のすべてのトークンの間にすべてのトークン:

あなたは2つのノードとなり、0〜9の単純な配分に行くトークンを持っている:
は、簡単な例を見てみましょう-9。あなたがデータを受け取ること、コーディネーター(あなたのケースではノードA)を選択しますカサンドラが書き込み

ための仕組み

。このノードはトークンを計算します。最初の例で見られるように、すべてのノードにはトークンの範囲が割り当てられています。キーがトークン4に変換されたとすると、データはノードA(ここではコーディネーター)に送られます。トークンが8であれば、データはB.

をノードに送信されますカサンドラデータ複製因子

は何複製因子は、あなたのデータがクラスタに保存されますどのように多くの時間です。ラックがない単一のデータベース(ケース)の場合、データはまずキーに関連付けられたトークンを所有するノードに送信され、レプリカはトポロジの次のノードに送信されます。
1つのノードに障害が発生した場合、レプリカはノードのデータ復元に役立ちます。
レプリカはありません。ノードが停止している場合、Cassandraはデータを保存できず、エラーがスローされます。レプリケーションファクタ2を使用している場合、CassandraはノードAにレプリカを格納でき、失敗しないはずです。

+0

の下にコメントしてください。つまり、挿入しようとしているデータポイントの一部が成功し、データがコーディネーターによってどこにルーティングされているかに応じて、失敗する可能性があります。あれは正しいですか? –

+0

はいそうです。しかし、cassandraのポイントは無限であるため、おそらく少なくとも3つのノードと複製因子> 1で作業しようとするべきである。 – Whitefret

+0

はい、わかった。ありがとう:) –

1

カサンドラのレプリケーションファクタ: は、我々は、入力データが「n」のノードから取得/保存されます与えられた意味複製因子として「n」を考えてみましょう。 t レプリケーションファクタに '1'と記述すると、1つのノードだけがデータを持つことになります。

パーティショニング: あなたはデータを挿入する時はいつでも私たちは、2つのノードを持っているとしましょう。両方のノードには、前述のパーティショニングアルゴリズムに基づいて、いくつかのデータがあります。 例: ハッシングおよびパーティショニングアルゴリズムに基づいて10レコードを挿入していますが、レコードごとに書き込むノードを選択します。デフォルトでは 、カサンドラは常にで書き込み、ディスクにフラッシュする前にコミットログ:のコースノードの識別は、コーディネーター:)

耐久性のある書き込みによって行われます。 falseに設定すると、コミットログをバイパスしてディスク(SSTable)に直接書き込みます。

あなたが挙げた問題は、たとえば、10行を挿入していると言えます。 わかりやすくするために、パーティショニング/ハッシング計算をn/2にすることができます。

したがって、カサンドラのコーディネータノードは、データを2つに分割し(単純な計算では10/2になります)、前半を第1ノードに入れて成功させ、後半を第2ノードに入れようとします(コミットログへの書き込み)、エラーが発生していないため使用できません。カサンドラは、データを扱う方法

関連する問題