3

RF = 2、書き込み CL = 1、読み取り CL = 1 の 2 ノードの Cassandra クラスターで KairosDB を実行しています。ノード 2 へのデータの半分 (例: METRIC_5001 から METRIC_10000 へのメトリック)。理想的には、各ノードには常にすべてのデータのコピーがあります。しかし、1 つのノードが死んでいる場合、クライアントはすべてのデータを生きているノードに送信します。

クライアントがクラスターへのデータ送信を開始しました。30 分後、ノード 2 を 10 分間オフにしました。この 10 分間で、クライアントはすべてのデータをノード 1 に適切に送信しました。その後、ノード 2 を再起動すると、クライアントは 2 つのノードに適切にデータを送信し続けました。1 時間後、クライアントを停止しました。

ノード 2 が停止したときにノード 1 に送信されたデータが、ノード 2 に自動的に複製されたかどうかを確認したかったのです。これを行うために、ノード 1 をオフにして、ノード 2 がノード 2 から停止した時間内にデータをクエリしましたが、何も返されませんでした。これは、データがノード 1 からノード 2 にレプリケートされていないと思いました。私は質問を投稿しましたCassandra は、ノードがダウンして再びアップしたときに「遅い」レプリケーションを実行しませんか? . データは自動的に複製されたようですが、とても遅かったです。

私が期待しているのは、2つのサーバーの両方のデータが同じであることです(冗長性のため)。つまり、ノード 2 が停止したときにシステムに送信されたデータは、ノード 2 が使用可能になった後、ノード 1 からノード 2 に自動的に複製される必要があります (RF = 2 のため)。

ここでいくつか質問があります。

1) レプリケーションは本当に遅いですか? または、何か間違った設定をしましたか?

2)この質問のようにクライアントが各ノードにデータの半分を送信すると、データが失われる可能性があると思います(たとえば、ノード1がクライアントからデータを受信し、ノード1がデータをノード2に複製しているときに突然ダウンします)。私は正しいですか?

3) 2) で正しければ、次のようにします。クライアントはすべてのデータを 2 つのノードの両方に送信します。これにより 2) が解決され、1 つのノードが停止して後で使用可能になった場合にレプリケーションを利用することもできます。しかし、2つのノードの両方が同じデータを受信するため、これによりデータの重複が発生するのではないかと思っています。ここに問題はありますか?

ありがとうございました!

4

1 に答える 1