mod_proxy_balancerのretry
mod_proxy_balancer(mod_proxy)のretry設定は、
コネクションをプーリングするための、リトライのタイムアウトを秒で 指定します。バックエンドサーバへのコネクションプーリングが失敗した場合は、 タイムアウトの期間が過ぎるまで、そのサーバにリクエストをフォワードしません。
というもので、
BalancerMember http://1.2.3.6:8000 retry=60 loadfactor=10
こんなように書ける。
アプリケーションサーバにデプロイするときに、
- httpdの停止
- rsync
- httpdの開始
という順番で行うのが通常だと思うけど、デフォルトのretry間隔が60秒になっているため、httpdを開始してからアクセスがバックエンドに届くには、最大1分間待たなければならない。
バックエンドのサーバが十台以上あるようなところだったらいいけれど、2~3台のサービスで間をあけずにデプロイしてしまうと下手するとサービスが数秒間、全落ちになってしまう可能性がある。
ということで、普通にretryを短く(数秒)にすればいいんじゃね。
な訳だが、ほんとにバックエンドが落ちたという場合に「connection refused」のログがいっぱいになるし、確認してないけど負荷もちょっとあがりそうなので、retryの秒数を2段階にできればいいなとか、Apacheのmoduleの人に相談中。
それともtimeoutとかmaxattemptsとか工夫すればできるんかなぁ。
http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypass