s3fsでマウントが外れた件のお話し
ネットで検索すると予期せずマウントが外れたなんて記事を見かけてて
そんなことあるの〜??
うちは大丈夫でしょ!
なんて鷹を括っていましたが
なんと起きてしまいました。。。
しかも本番で…
まぁ起きてしまったことはしょうがない。。
一応発生した時に再マウントしようとするとエラーがでますのでそれも参考に備忘録しておきます。
発生
A:すいません今大丈夫ですか??
私:ええよ〜
A:なんか画像が表示されないんです。
私:大丈夫ですか言っとる場合やないやん!!
ということで事象の認知がされました。しかも本番です。
インスタンスにログインして確認するとこんな感じです。
※うちは大量のユーザーごとに登録するイメージファイルをイメージディレクトリとS3バケットをマウントすることでEC2のイメージボリュームを抑えるようにしていました。
# cd /image_dir
# ls -a
#
イメージが入ってなぁーい!!
AWSのコンソールからS3のバケットを見るとイメージはある
ということでマウントされているかの確認
# df -h
df: `/image_dir': 通信端点が接続されていません
通信端点が接続されてないってどういうこと?
と思いながらマウントを試みる
# s3fs bucket-name /image_dir -o allow_other,use_cache=/tmp,uid=48,gid=48,passwd_file=/etc/passwd-s3fs
s3fs: unable to access MOUNTPOINT /image_dir: Transport endpoint is not connected
※uid,gidはアパッチ操作なのでそのIDです。
エンドポイントと接続できないと。。。
なんだかこれが出る理由はいろいろあるらしいのですが、意図せずマウントが外れているがNFSではマウントしている情報が残ったりのようなことだったりいろいろ。。。
今まで見てきた記事によるとマウントできない場合は
一度アンマウントしてからマウントすれば成功するよ!!
ってことなので、一度アンマウントして再マウント
# fusermount -u /image_dir
# s3fs bucket-name /image_dir -o allow_other,use_cache=/tmp,uid=48,gid=48,passwd_file=/etc/passwd-s3fs
これでマウントは成功しました。
でもまた起きたらいややん。
ということで、
短期的な対応としてマウントチェックバッチを作ってみた
内容的には、
#!/bin/sh
DATE=`date "+%Y%m%d-%H%M%S"`
image_dir_cmd="s3fs images /image_dir -o allow_other,use_cache=/tmp,uid=48,gid=48,passwd_file=/etc/passwd-s3fs"
image_dir2_cmd="s3fs images2 /image_dir2 -o allow_other,use_cache=/tmp,uid=48,gid=48,passwd_file=/etc/passwd-s3fs"
for dname in "image_dir" "image_dir2"
do
NUM=`df -h | grep ${dname} | grep s3fs | wc -c`
echo "${dname} ${NUM}"
if [ $NUM -le 0 ]; then
`echo "${DATE} ${dname} mount error." >> /home/user/logs/s3fs_mount_check.log`
`fusermount -u /${dname} >> /home/user/logs/s3fs_mount_check.log`
cmd_var_name=${dname}_cmd
`eval echo '$'$cmd_var_name`
fi
done
こんな感じで対象ディレクトリがs3fsでマウントされているかを確認して、なければマウントコマンドを実行する感じです。
これを5分おきにバッチで回して確認するようにしました。
BtoBtoCサービスなのでぶっちゃけ5分どころか1秒もこの事象は起きてはいけないのですが短期的にチェックと復旧をしてしのぐというところです。
恒久的な対応はどうしようかね。。
イメージサーバー構築して画像はそのサーバーが楽な気がする。
キャッシュ使えば負荷も抑えられるし。
恒久的な対応をしたらまた書きます!
コメント
コメントを投稿