2

新しいデータセンターを追加すると、データがまだそこにないときに、dynamicSnitch によって新しい DC からデータが読み取られます。

3 つのデータセンターで実行されている cassandra (1.0.11) クラスターがあり、4 つ目のデータセンターを追加したいと考えています。クラスターは、PropertyFileSnitch と DynamicSnitch が 0.0 のバッドネス ファクターで有効化されて構成されています。関連するキースペース レプリケーション ファクターは、DC1:2、DC2:2、DC3:2 です。私たちの計画は、新しいデータセンターをリングに追加し、それをスキーマに追加して、すべてのノードでローリング リペア -pr を実行し、新しいノードが必要なデータをすべて取得できるようにすることでした。プロセスを開始すると、新しいデータセンターは他のデータセンターから読み取り呼び出しを受信することに気付きました。これは、負荷が低く、DynamicSnitch がそこから読み取る方がよいと判断したためです。問題は、データ センターにまだデータがなく、結果が返されないことです。

誰かがこの問題に遭遇しましたか? DynamicSnitch によって選択されないように、特定のデータ センターのスコアに直接影響を与える方法はありますか? Cassandra 1.0.11 にデータセンターを追加するより良い方法はありますか? これらの問題を処理するスニッチを書いた人はいますか?

ありがとう、イジク。

4

1 に答える 1

3

ブートストラップなしでリングに追加してから修復する代わりに、ノードをブートストラップできます。前者は、必要なデータがすべて揃うまで、読み取りがルーティングされないようにします。(これが、Cassandra がデフォルトである理由でauto_bootstrap: trueあり、実際にそれを無効にすることは、例の cassandra.yaml から削除したのは十分に悪い考えです。)

これに関する問題、およびドキュメントが最初にブートストラップなしですべてのノードを追加することを推奨している理由は、DC4 用に構成された N 個のレプリカがある場合、Cassassandra がそのキースペースのデータセット全体を最初に追加した N 個のノードに複製しようとするためです。これは問題になる可能性があります!

だからここに私が見るオプションがあります:

  1. データセットが十分に小さい場合は、ブートストラップ プランを使用してください
  2. 読み取りを増やしConsistencyLevelて、データを持っているレプリカと持っていないレプリカに常にアクセスするようにします
  3. 1.2 にアップグレードしConsistencyLevel.LOCAL_ONE、クロス DC リクエストを行わないように強制する読み取りで使用します
于 2013-11-14T15:39:51.593 に答える