つまり、ほとんどの時間は非常に休止状態ですが、月に数日は高バーストを必要とするアプリケーションがあります。EC2 にデプロイしているので、ほとんどの時間 Cassandra サーバーを 1 台だけ稼働させ、バースト日には負荷に対応するためにもう 1 台のサーバー (最初のサーバーよりも RAM と CPU が多い) を稼働させたいと思います。これを行う最善の方法は何でしょうか。別のアプローチを取るべきでしょうか。
私が計画していることについてのいくつかのメモ:
- ノードを起動してすぐに修復してください
- バースト時間が終了したら、強力なノードを廃止する
- 常時接続サーバーをシードノードとして使用する
私の主な質問は、レプリケーション係数を 2 にしたいので (つまり、両方のノードにすべてのデータがある)、ノードですべてのデータを共有するにはどうすればよいかということですが、サーバーが 1 つしかない場合は機能しません。1 台ではなく 2 台のサーバーを追加で起動する必要がありますか?
答え1
答え2
私の経験では、レプリケーション係数をその場で変更することは、あまりうまくいきません :-( 少なくとも私の場合は、修正に時間のかかるスキーマの不一致が発生する可能性があります。
ただ声に出して考えているだけですが、別の可能なルートとしては次のようなものがあります (タイミングは適宜変更してください)。
- cassandra.yaml の GC 猶予期間 (これは、ディスクから削除されるまでのトゥームストーンの存続期間を決定します) を 30 日間に増やします。
- 必要かどうかに関わらず、15日ごとに2番目のノードを起動します。実行間でデータやコミットログなどが保存されていることを確認します。これにより、2番目のノードを起動する必要があるときに、より迅速に開始できるようになります。
初代よりもRAMとCPUが充実
Cassandra は、各ノードが担当するリングの量によってワークロードを効果的に分割します。リングの分割を容易にするために、2 番目のノードの容量を最初のノードの 2 倍にするか、最初のノードと同じサイズのノードを 2 つ追加する方が簡単かもしれません。
ただし、ヒント付きハンドオフによって残りのノードのディスクが不必要にいっぱいになるため、ノードを削除するときには手動での nodetool の介入が必要になります。