BalancerMemberにはretry=??を指定しておく
ProxyPassにretry=??改めBalancerMemberにretry=??
mod_proxy_balancerでアプリケーションサーバにコネクションをふっているときに、アプリケーションサーバを落としてアクセスすると、「Service Temporarily Unavailable」が表示されたりする。でアプリケーションサーバを起動しても、しばらくキャッシュが効いていて、「Service Temporarily Unavailable」が続く。実際には1分。
capistranoでRailsをメンテナンスしていると、ちょくちょくmongrel_clusterを再起動する機会があるので、その度に「Service Temporarily Unavailable」がしばらく続くのでは感じが悪い。
バグ対応に比べたら調べる優先度が低いので記憶から落ちてたので、放っといたら、たまたま以下を見たので、これを参考に設定してみた。
http://d.hatena.ne.jp/dayflower/20080215/1202974375
ロードバランサの設定部分にretry=5を追記。(↓)
ProxyPass /app http://backend/app retry=5
その後
/etc/init.d/httpd reload
とやると
httpd を再読み込み中: 設定の構文エラーのため再読み込みしません [失敗]
めげずに、Apacheドキュメントを読んだら
http://httpd.apache.org/docs/2.2/ja/mod/mod_proxy.html#proxypass
Proxy ディレクティブのスキームが balancer:// になっている場合は、 バックエンドサーバと実際には通信しない仮想ワーカーが生成されます。 このワーカーは幾つかの "本物の" ワーカーの管理をつかさどります。 この場合パラメータは、この仮想ワーカーに対して設定されます。
とありました。
id:dayflowerさんのところは別にbalancer:に対する設定ではないみたい。なので、うちの場合は以下のように設定すればよかったみたいです。
<Proxy balancer://mycluster> BalancerMember http://127.0.0.1:8001 retry=5 BalancerMember http://127.0.0.1:8002 retry=5 </Proxy>