php_modが非推奨になったのね

昔のバージョンのphp環境でphpバージョンを上げるという対応中。 apache + PHP8のインスタンスを構築してドキュメントルートまで到達を確認。 対応する人にドキュメントルートまで到達するからプロジェクトのファイルを置いてバージョンアップのエラーを確認してもらうため依頼しましたが HTTP 503 Service Unavailable のエラーが出ているとのこと。 HTMLファイルはアクセスできているからPHPの実行ができていないと思い調べると Apache HTTP サーバーで使用するために PHP に提供されている mod_php モジュールが非推奨になりました。 php-fpmをインストールして起動し、リクエストを流してphp-fmpでphpを実行するようにして解決。 しばらくPHPを触っていなかったのでモジュールが非推奨になったことに気づかずでした。

AWSのS3バケットをマウントするs3fsでマウントが外れた件

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秒もこの事象は起きてはいけないのですが短期的にチェックと復旧をしてしのぐというところです。

恒久的な対応はどうしようかね。。
イメージサーバー構築して画像はそのサーバーが楽な気がする。
キャッシュ使えば負荷も抑えられるし。

恒久的な対応をしたらまた書きます!

コメント

このブログの人気の投稿

nginxで画像が表示されない。。

CakePHP3でHTTPSにする