ElastiCacheのリーダーエンドポイントを導入し、サービス中に台数を増減させた際の挙動メモ
前提情報
・phpで動くwebサービス
・インフラは全てAWS
・キャッシュはElastiCahceのredisを利用
・非クラスターredisを利用しておりphp側ではホストにリーダーエンドポイントを指定
・redisの接続オプションは「persistent:true」
状況
・セールにより一時的に負荷上昇
・オンサービス中にノード追加を実施
・php-fpmプロセスは「pm.max_children」数分だけ既に立ち上がっておりredisとの接続を1度は確立済み
挙動
・リーダーエンドポイントでホストを指定しているが追加されたノードへはリクエストが振り分けられない
・「persistant:true」としているのでリーダーエンドポイントの先にある特定ノードとの接続情報がプロセスに保存されている状態
対処法
- 手動でphp-fpmを再起動し全プロセスを作り直す (※ただし瞬断する
- 1プロセスがpm.max_requests分だけリクエストを処理すれば1プロセスごとに自動で再起動されるので、不急であれば放置
参考
php-fpmの設定
https://hackers-high.com/linux/php-fpm-config/