以前「StorageGatewayってなんじゃ?(Gatewayインスタンスの冗長化:GlusterFS編)」の記事を紹介しました。
今回は、インスタンスが落ちた場合の復旧方法を紹介します。

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

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

ブリック(GlusterFSを構成するディレクトリ)である/mnt/sgwを確認してみるとIOエラーが出力されています。

# 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

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を確認してみると、
ファイルの内容は同期されましたが、ファイルサイズが0のままです。

# 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

これをマウントポイントから読み出しを行うと即座に完全同期できます。

# 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

こちらの記事はなかの人(memorycraft)監修のもと掲載しています。
元記事は、こちら