« qw// -> qw() | メイン | Load Balancer ManagerにアクセスするPerl Module »

mod_proxy_balancerのretry

mod_proxy_balancer(mod_proxy)のretry設定は、

コネクションをプーリングするための、リトライのタイムアウトを秒で 指定します。バックエンドサーバへのコネクションプーリングが失敗した場合は、 タイムアウトの期間が過ぎるまで、そのサーバにリクエストをフォワードしません。

というもので、

BalancerMember http://1.2.3.6:8000 retry=60 loadfactor=10

こんなように書ける。

アプリケーションサーバにデプロイするときに、

  1. httpdの停止
  2. rsync
  3. 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

トラックバック

この一覧は、次のエントリーを参照しています: mod_proxy_balancerのretry:

» mod_proxy_balancerのretryの件 from YappoLogs
mod_proxy_balancerのretry : blog.nomadscafe.jpバックエンドのサーバが十台以上あるようなところだったらいいけれど... [詳しくはこちら]