web-dev-qa-db-ja.com

1ノードを動的に変更Cassandraクラスターを2ノードに

そのため、ほとんどの場合非常に休止状態になりますが、月のうち数日は高バーストが必要になるアプリケーションがあります。 EC2にデプロイしているので、ほとんどの場合、1つのCassandraサーバーのみを稼働させ、バースト日にもう1つのサーバーを稼働させたい(より多くのRAMおよびCPU(最初のものよりも)は、負荷を処理するのに役立ちます。これを行うための最良の方法は何ですか?別のアプローチを取る必要がありますか?

私がやろうとしていることについてのいくつかのメモ:

  • ノードを起動してすぐに修復します
  • バースト時間が過ぎた後、強力なノードを廃止します
  • 常時接続サーバーをシードノードとして使用する

私の主な質問は、レプリケーション係数2が必要なため(両方のノードにすべてのデータがあるため)、ノードにすべてのデータを共有させる方法ですが、サーバーが1つしかない場合は機能しません。 1台ではなく2台の追加サーバーを立ち上げる必要がありますか?

2
Jason Axelson

非常に簡単にできるようです レプリケーション係数を変更

これは Cassandra wiki にも記載されており、レプリケーション係数を増減するための手順を見つけることができます。

これは、これを実行できるはずであることを意味します。

  • レプリケーション係数を1から2に変更します
  • バーストノードを起動して修復し、すべてのデータのコピーを受信するようにします
  • ... 仕事する ...
  • デコミッションバーストノード
  • レプリケーション係数を2から1に戻します
  • クリーンアップを実行する
1
brain99

私の経験では、レプリケーション係数をオンザフライで変更してもそれほどうまく機能しません:-(少なくとも私にとっては、スキーマの不一致が発生する可能性があり、修正に時間がかかります。

大声で考えているだけですが、別の可能なルートは次のようになります(タイミングを適切に変更する):

  1. Cassandra.yamlのGC猶予期間を延長し(これにより、トゥームストーンがディスクからパージされるまでの存続期間が決まります)、30日と言います。
  2. 必要かどうかに関係なく、15日ごとに2番目のノードを起動します。データ/コミットログなどが実行間で保持されていることを確認してください。これは、2番目のノードをスピンアップする必要があるときに、より早く開始できることを意味します
  3. 最初のCPUよりも多くのRAMおよびCPU

Cassandraは、各ノードが担当するリングの量でワークロードを効果的に分割します。リングの分割を容易にするために、2番目のノードで最初のノードの容量を2倍にするか、最初のノードと同じサイズの2つのノードを追加する方が簡単な場合があります。

ヒントされたハンドオフが残りのノードのディスクを不必要にいっぱいにするので、これはノードをドロップするときに手動のnodetool介入を必要とします。

0
CraigJPerry