2012-10-23

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

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

0 件のコメント:

コメントを投稿