読者です 読者をやめる 読者になる 読者になる

うまいぼうぶろぐ

linuxとhttpdとperlのメモ

glusterfs 復旧に関するメモ

glusterfs
  • replica volume 復旧メモ

2 node でreplica 2 (つまりただの冗長目的)

sv01, sv02

gluster peer probe sv02
gluster vol create vol1 sv01:/export/vol1 sv02:/export/vol1
gluster vol start vol1


この状態でsv02が完全に壊れて、再度replica 2の状態に戻すことを想定したメモ

参照

(バージョン古いけど最新のdocumentが見つからなかったので)

方法 ↑のdocment通り hostname, ipを引き継いでsv02を再構築する

1. hostname, ipを引き継いでsv02を再構築
シミュレーションの場合はglusterをkillしてログ等、brickのディレクトリを削除するUUIDは前のものを引き継ぐ。
(既存のnodeからgluster peer status するとわかる)

UUID引き継がなかったら新規に勝手に作成されて、それでも動くみたいだけど、既存のnodeが認識してるUUIDと実際のUUID食い違って気持ち悪くなるので引き継いでおいたほうが良さそう。

pkill -9 gluster
rm -rf /export/vol1
rm -rf /var/log/glusterfs/*
cp /var/lib/glusterd/glusterd.info /tmp
rm -rf /var/lib/glusterd/*
cp /tmp/glusterd.info /var/lib/glusterd/

glusterd起動して、sv02から既存のsv01をpeer probeする

/etc/init.d/glusterd start
gluster peer probe sv01
/etc/init.d/glusterd restart

この状態ではsv02はまだgluster vol statusでOnlineになっていない。
sv02:/export/vol1 ディレクトリは自動で生成されるが同期もはじまっていない。
ドキュメントではgluster vol heal vol1 full を実行する
or fuseでmountしているクライアントから
"find /path/to/mount -noleaf -print0 | xargs --null stat"
をすると同期される、みたいな記述があったけどダメだった。

とりあえず手元でやった結果、以下の操作をすると同期がかかることはわかった。
が、fuseでmountしている一部のclientからは一時的にファイルが見えなくなる。。。

gluster vol status vol1
## sv02はまだonlineになっていない
gluster vol start vol1 force && gluster vol heal vol1 full
gluster vol status vol1
## start vol1 force するとsv02はonlineになる

fuseでmountしているclientから一時的に見えなくなるのは
gluster vol start vol1 force 実行後、
gluster vol heal vol1 full が完了するまで。
(nfs でmountしているclientは影響なかった)

vol start vol1 force を実行すると、sv02はvolume onlineになるが、
この時点では/export/vol1 の中はまだ空っぽでデータは同期されていない。
fuse でmountしているとハッシュ計算の結果など?で直接sv02 にアクセスすることがあるのでclientによっては見えなくなってしまっているのかも?
(なぜnfsだと影響ないのかは不明)