So-net無料ブログ作成

インフラエンジニアのためのCassandra情報 ノードの取り外し [Cassandra]

ノードをクラスタから取り外す場合を考えます。
連続稼動で運用していると、クラスタ全体を止められないので、メンテナンスやハードの入れ替
えを実施したい場合は、ノード1台単位または数台単位で切り離して実施することになるで
しょう。その場合、いきなり稼動中のノードのCassandraサービスを停止したりマシンの電源を
落としてしまうと、クラスタからはそのノードが障害ノードとして扱われてしまいます。
そのように、障害ではなく計画的にノードの取り外しを行いたいときには、decommission処理を
実施します。decommissionすることで、取り外す予定のノードが担当していたデータを他の
ノードへ再配布し、切り離しても問題ないような状態にします。
実行には、nodetoolの動かせるどこかのノードで、
$ ./nodetool -h [取り外す予定のノードアドレス] decommission

とする。このコマンド発行時に、実際にデータの移動が発生するので、コマンドが完了するまで
しばらく待ちます。
コマンドの実行が終了したら、ノードは取り外せる状態なので、取り外すノードでCassandra
サービスを停止します。
メンテナンスが完了して、ノードをクラスタへ再度参加させる場合は、前回説明したノードの
追加手順を実施します。

ノードを取り外すもう一つのパターンは、障害発生時でしょう。それもすぐ復旧して障害が
取り除けるようなものではなく、ノードの再構築が必要になるような深刻な場合です。
この場合も、復旧までクラスタを障害ノードを抱えた状態のままにはしたくないので、一旦
ノードを取り外してしまいます。
しかし、対象ノードに障害が発生しているので、上で説明したようなdecommisson処理が行えない
のが通例でしょう。(出来たとして)障害ノードのCassandraを停止しても、電源を落としても
クラスタノードからは障害ノードとしての情報が残ったままになります。
そのような場合は、正常稼動中の他のノードから、障害ノードの切り離し処理を実施します。
障害ノードが担当していたデータは、稼動中の他のノードが保持しているレプリカを使って
再配布します。
実行は以下のようにします。
まず、取り外したいノードのtoken値をnodetoolで確認します。もちろん、稼動しているノードで。
$ ./nodetool -h localhost ring
Address       Status     Load          Range                                      Ring
                                       145972149051168265451647504111542163748
10.0.0.1      Up         143.15 MB     50557248265472408366546551795111910667     |<--|
10.0.0.2      Down       330.19 MB     145972149051168265451647504111542163748    

Statusが「Down」と表示された欄の、Rangeで示される数値の並びがそれです。
そして、そのtoken値を使って以下のようにします。
$ ./nodetool -h localhost removetoken 145972149051168265451647504111542163748

なお、ここで指定しているlocalhostは稼動しているノードのことなので間違えないように。
decommisson処理の時と同様、担当範囲のデータの再配布が行われるので、コマンドの実行に
少し時間がかかります。障害のあるノードからデータをコピーしているわけではないので、
完了を待たずに障害ノードは取り外せるでしょう。
完了すると、ringの結果から「Down」だったノード欄が消えて、そこにあったデータ(Loadに
表示されている)が他のノードにコピーされ、どこかのノードの担当データ量が増えているのが
確認できるはずです。
障害が取り除かれて、改めてクラスタに復旧する場合は、前回のように新規ノード追加と
同じ処理を行ってください。(Autobootstrapをお忘れなく)

最後に、ノードの取り外しや復帰を繰り返した結果、ノード間でのデータ量においてアンバランスが
気になってきた場合は、以下のコマンドで手動調整してください。
$ ./nodetool -h localhost loadbalance


この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。

×

この広告は1年以上新しい記事の更新がないブログに表示されております。