2013年3月2日土曜日

StorageGatewayってなんじゃ?(GlusterFSで復旧編)

前回GlusterFSを使ってStorageGatewayインスタンスを冗長化しました。
今回は、インスタンスが落ちた場合の復旧方法を見てみます。

Gatewayインスタンスが落ちた場合





gatewayインスタンスを落とします。



ブリックである/mnt/sgwをみてみると


# ls -l /mnt/sgw
ls: reading directory /mnt/sgw: 入力/出力エラーです
合計 16
-rw-r--r-- 2 root root 27  3月  1 13:24 2013 1.txt
-rw-r--r-- 2 root root 27  3月  1 13:24 2013 4.txt


IOエラーがでます。


Glusterボリュームのマウントポイントをみてみると


# ls -lrt /mnt/gv
合計 24
-rw-r--r-- 1 root root 27  3月  1 13:51 2013 1.txt
-rw-r--r-- 1 root root 27  3月  1 13:51 2013 2.txt
-rw-r--r-- 1 root root 27  3月  1 13:51 2013 3.txt
-rw-r--r-- 1 root root 27  3月  1 13:51 2013 4.txt
-rw-r--r-- 1 root root 27  3月  1 13:51 2013 5.txt
-rw-r--r-- 1 root root 27  3月  1 13:52 2013 6.txt
-rw-r--r-- 1 root root 27  3月  1 13:52 2013 7.txt
-rw-r--r-- 1 root root 27  3月  1 13:52 2013 8.txt
-rw-r--r-- 1 root root 27  3月  1 13:52 2013 9.txt
-rw-r--r-- 1 root root 27  3月  1 13:52 2013 10.txt
-rw-r--r-- 1 root root 27  3月  1 13:52 2013 11.txt
-rw-r--r-- 1 root root 27  3月  1 13:53 2013 12.txt
-rw-r--r-- 1 root root 27  3月  1 13:53 2013 13.txt
-rw-r--r-- 1 root root 27  3月  1 13:53 2013 14.txt
-rw-r--r-- 1 root root 27  3月  1 13:53 2013 15.txt

# cat /mnt/gv/*
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ


正しくレプリケーションされています。


gatewayインスタンスを復帰させます。




インスタンスが立ち上がったら、一度10.0.1.8のglusterfsを解除して、iSCSIボリュームを再マウントします。

# ps -ax | grep gluster
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
24350 ?        Ssl    0:00 /usr/sbin/glusterd -p /var/run/glusterd.pid
24371 ?        Ssl    0:00 /usr/sbin/glusterfsd -s localhost --volfile-id gv0.10.0.1.8.mnt-sgw -p /var/lib/glusterd/vols/gv0/run/10.0.1.8-mnt-sgw.pid -S /tmp/6f580d4f3eab1dcb22c5aef9d7fb2275.socket --brick-name /mnt/sgw -l /var/log/glusterfs/bricks/mnt-sgw.log --xlator-option *-posix.glusterd-uuid=4f2e8dff-1b51-423e-8ac0-b0e892bd2e0d --brick-port 24013 --xlator-option gv0-server.listen-port=24013
24377 ?        Ssl    0:00 /usr/sbin/glusterfs -s localhost --volfile-id gluster/nfs -p /var/lib/glusterd/nfs/run/nfs.pid -l /var/log/glusterfs/nfs.log -S /tmp/f34a5ad241dbfecb7dcb5f2c14aab1f4.socket
24383 ?        Ssl    0:00 /usr/sbin/glusterfs -s localhost --volfile-id gluster/glustershd -p /var/lib/glusterd/glustershd/run/glustershd.pid -l /var/log/glusterfs/glustershd.log -S /tmp/c019293c2e261dcab94469694dc5674e.socket --xlator-option *replicate*.node-uuid=4f2e8dff-1b51-423e-8ac0-b0e892bd2e0d
24393 pts/1    S+     0:00 grep gluster
# kill -9 24350 24371 24377 24383

# umount /mnt/sgw
# umount /mnt/gv
# iscsiadm --mode discovery --type sendtargets --portal 10.0.1.5:3260
# iscsiadm --mode node --targetname iqn.1997-05.com.amazon:memorycraft-sgw1 --portal 10.0.1.5:3260,1 --logout
# iscsiadm --mode node --targetname iqn.1997-05.com.amazon:memorycraft-sgw1 --portal 10.0.1.5:3260,1 --login
# mount /dev/sda /mnt/sgw
# /etc/init.d/glusterd start
# mount -t glusterfs 10.0.1.8:/gv0 /mnt/gv



ここでブリック(GlusterFSを構成するディレクトリ)である/mnt/sgwをみてみると、

# ls -l /mnt/sgw
合計 112
-rw-r--r-- 2 root root  0  3月  1 13:51 2013 1.txt
-rw-r--r-- 2 root root  0  3月  1 13:52 2013 10.txt
-rw-r--r-- 2 root root  0  3月  1 13:52 2013 11.txt
-rw-r--r-- 2 root root 27  3月  1 14:07 2013 12.txt
-rw-r--r-- 2 root root  0  3月  1 13:53 2013 13.txt
-rw-r--r-- 2 root root 27  3月  1 14:07 2013 14.txt
....略....
-rw-r--r-- 2 root root  0  3月  1 14:00 2013 58.txt
-rw-r--r-- 2 root root  0  3月  1 13:52 2013 6.txt
-rw-r--r-- 2 root root 27  3月  1 14:07 2013 7.txt
-rw-r--r-- 2 root root  0  3月  1 13:52 2013 8.txt
-rw-r--r-- 2 root root  0  3月  1 13:52 2013 9.txt



ファイルの内容は同期されましたが、ファイルサイズが0のままです。
これをマウントポイントから読み出しを行うと即座に完全同期できます。

# find /mnt/gv -type f -exec dd if='{}' of=/dev/null bs=1M \; > /dev/null 2>&1

# ls -l /mnt/sgw
-rw-r--r-- 2 root root 27  3月  1 14:12 2013 1.txt
-rw-r--r-- 2 root root 27  3月  1 14:12 2013 10.txt
-rw-r--r-- 2 root root 27  3月  1 14:12 2013 11.txt
-rw-r--r-- 2 root root 27  3月  1 14:07 2013 12.txt
-rw-r--r-- 2 root root 27  3月  1 14:12 2013 13.txt
-rw-r--r-- 2 root root 27  3月  1 14:07 2013 14.txt
-rw-r--r-- 2 root root 27  3月  1 14:12 2013 15.txt
-rw-r--r-- 2 root root 27  3月  1 14:12 2013 16.txt
...略.....
-rw-r--r-- 2 root root 27  3月  1 14:12 2013 56.txt
-rw-r--r-- 2 root root 27  3月  1 14:12 2013 57.txt
-rw-r--r-- 2 root root 27  3月  1 14:12 2013 58.txt
-rw-r--r-- 2 root root 27  3月  1 14:14 2013 59.txt
-rw-r--r-- 2 root root 27  3月  1 14:12 2013 6.txt
-rw-r--r-- 2 root root 27  3月  1 14:14 2013 60.txt

これで同期が復旧しました。
その後も投入されつづけたファイルが同期されているのがわかります。




イニシエータインスタンスが落ちた場合




10.0.1.8をstopしてみます。




10.0.1.9では投入が反映され続けられています。
# ls -lrt /mnt/gv
.....略......
-rw-r--r-- 1 root root 27  3月  1 17:37 2013 562.txt
-rw-r--r-- 1 root root 27  3月  1 17:37 2013 563.txt
-rw-r--r-- 1 root root 27  3月  1 17:37 2013 564.txt
-rw-r--r-- 1 root root 27  3月  1 17:37 2013 565.txt
-rw-r--r-- 1 root root 27  3月  1 17:38 2013 566.txt
-rw-r--r-- 1 root root 27  3月  1 17:38 2013 567.txt
-rw-r--r-- 1 root root 27  3月  1 17:39 2013 568.txt
-rw-r--r-- 1 root root 27  3月  1 17:39 2013 569.txt
-rw-r--r-- 1 root root 27  3月  1 17:39 2013 570.txt
-rw-r--r-- 1 root root 27  3月  1 17:39 2013 571.txt
-rw-r--r-- 1 root root 27  3月  1 17:39 2013 572.txt
-rw-r--r-- 1 root root 27  3月  1 17:39 2013 573.txt
-rw-r--r-- 1 root root 27  3月  1 17:40 2013 574.txt
-rw-r--r-- 1 root root 27  3月  1 17:40 2013 575.txt
-rw-r--r-- 1 root root 27  3月  1 17:40 2013 576.txt
-rw-r--r-- 1 root root 27  3月  1 17:40 2013 577.txt
-rw-r--r-- 1 root root 27  3月  1 17:40 2013 578.txt
-rw-r--r-- 1 root root 27  3月  1 17:40 2013 579.txt
-rw-r--r-- 1 root root 27  3月  1 17:41 2013 580.txt
-rw-r--r-- 1 root root 27  3月  1 17:41 2013 581.txt


10.0.1.8をstartします。



SSHで入り、ブリックと、Glusterボリュームをマウントしなおします。

# df -h
Filesystem            Size  Used Avail Use% マウント位置
/dev/xvde1            6.0G  2.6G  3.1G  46% /
none                  3.7G     0  3.7G   0% /dev/shm

# mount /dev/sda /mnt/sgw
# mount -t glusterfs 10.0.1.8:/gv0 /mnt/gv
# ls -lrt /mnt/gv
.....略......
-rw-r--r-- 1 root root 27  3月  1 20:34 2013 1602.txt
-rw-r--r-- 1 root root 27  3月  1 20:34 2013 1603.txt
-rw-r--r-- 1 root root 27  3月  1 20:34 2013 1604.txt
-rw-r--r-- 1 root root 27  3月  1 20:34 2013 1605.txt
-rw-r--r-- 1 root root 27  3月  1 20:35 2013 1606.txt
-rw-r--r-- 1 root root 27  3月  1 20:35 2013 1607.txt
-rw-r--r-- 1 root root 27  3月  1 20:35 2013 1608.txt
-rw-r--r-- 1 root root 27  3月  1 20:35 2013 1609.txt
-rw-r--r-- 1 root root 27  3月  1 20:35 2013 1610.txt
-rw-r--r-- 1 root root 27  3月  1 20:35 2013 1611.txt
-rw-r--r-- 1 root root 27  3月  1 20:36 2013 1612.txt


# ls -lrt /mnt/sgw
.....略.....
rw-r--r-- 2 root root 27  3月  1 20:34 2013 1602.txt
-rw-r--r-- 2 root root 27  3月  1 20:34 2013 1603.txt
-rw-r--r-- 2 root root 27  3月  1 20:34 2013 1604.txt
-rw-r--r-- 2 root root 27  3月  1 20:34 2013 1605.txt
-rw-r--r-- 2 root root 27  3月  1 20:35 2013 1606.txt
-rw-r--r-- 2 root root 27  3月  1 20:35 2013 1607.txt
-rw-r--r-- 2 root root 27  3月  1 20:35 2013 1608.txt
-rw-r--r-- 2 root root 27  3月  1 20:35 2013 1609.txt
-rw-r--r-- 2 root root 27  3月  1 20:35 2013 1610.txt
-rw-r--r-- 2 root root 27  3月  1 20:35 2013 1611.txt
-rw-r--r-- 2 root root 27  3月  1 20:36 2013 1612.txt

マウントポイントに復帰され、投入が反映されています。
起動時に自動でマウントするにはfstabに以下のように設定します。

# cat /etc/fstab
/dev/sda         /mnt/sgw  ext4    _netdev         0 0
10.0.1.8:/gv0 /mnt/gv glusterfs defaults,_netdev 0 0


以上です。