2012-10-23

オンサービスのままGlusterFSのVolume容量追加してみた

EC2上の2台のサーバから1つずつbrickを提供しレプリケーションモードで動作させているVolumeに、オンサービスのまま容量を追加するという処理を行ってみました。 最初に試したのは、サーバに既存のBrick(/gfs)よりもサイズが大きい新たなEBSを追加し、これを/gfs2にマウントして既存のBrickと置換するという方法。 小さいファイル数個のおためし環境では
gluster volume replace-brick vol1 x.x.x.x:/gfs x.x.x.x/gfs2 start
で、置換開始
gluster volume replace-brick vol1 x.x.x.x:/gfs x.x.x.x/gfs2 status
で、completeになったことを確認
gluster volume replace-brick vol1 x.x.x.x:/gfs x.x.x.x/gfs2 commit
で、コミット の手順でうまくいったので、実際の環境に試してみました 10GBのVolumeには1.5GBぐらいのデータが書き込まれている状態です
gluster volume replace-brick vol1 x.x.x.x:/gfs x.x.x.x/gfs2 start
コマンドは通ったのですが、みるみるcpu使用率が上昇しコンソール操作もままならない程になってしまいました。 このとき利用していたインスタンスタイプはc1.mediumです。
1時間程経過しても処理は終わらないので一時停止
gluster volume replace-brick vol1 x.x.x.x:/gfs x.x.x.x/gfs2 pause
これでとりあえず負荷は下がったのですが、1GB程の一時領域に書き込みつつreplaceが行えるように待機をしている状態のようでした。
このままではよろしくないと、完全にキャンセルしてみました
gluster volume replace-brick vol1 x.x.x.x:/gfs x.x.x.x/gfs2 abort
それはそれで、マシンリソースを喰いまくり、コマンドライン操作を受け付けないほどになってしまったのでデーモン停止(´・ω・`)
service gluster stop
[失敗] だそうな。。。 なので仕方なくpkillしました
pkill gluster
このあと、安定状態に戻すまでかなりの奮闘をしたのでこの方法は避けた方が良さそうです。 次は、上手くいった方法 Volumeに容量の大きなBrick(/gfs2)を追加し、既存のBrick(/gfs)を削除するという方法
gluster volume add-brick vol1 x.x.x.x:/gfs2 y.y.y.y./gfs2
すんなり追加されました つづいて、既存のBrickを削除
gluster volume remove-brick vol1 x.x.x.x:/gfs y.y.y.y./gfs start
startをつけることで、安全にBrickを削除できるように削除対象ではないところにデータを移動してくれるようです。 cpu使用率が上昇しましたが、replaceのようにコンソール操作を受け付けなくなる程ではありませんでした。
gluster volume remove-brick vol1 x.x.x.x:/gfs y.y.y.y./gfs status
で、状態を確認しながらcompleteになるまで待機 8GB程データがある状態で40分程で終了しました あとはコミットするだけ
gluster volume remove-brick vol1 x.x.x.x:/gfs y.y.y.y./gfs commit
これで無事にオンサービスのまま容量を追加することができましたよヾ(*・ω・)シ

0 件のコメント:

コメントを投稿