mod_proxy_balancerを設定するとhttpdが上がらない
Apache2.4.3での話。mod_proxyのbalancer機能を利用してロードバランスを設定。この機能自体はmod_proxyでbalancerが実現されるようになってもうずっと使っていたのですが、新しい環境ではなぜだか動作しない。
こんな設定でいたって普通。
ProxyPass / balancer://cluster/ <Proxy balancer://cluster/ BalancerMember http://back1:8080/ BalancerMember http://back2:8080/ BalancerMember http://back3:8080/ </Proxy>
ところが、apachectl startしてもこんなエラーを吐いてhttpdが上がってこない。
[Wed Dec 05 11:53:04.240728 2012] [proxy_balancer:debug] [pid 27332:tid 140444397807360] mod_proxy_balancer.c(760): AH01178: Doing balancers create: 736, 1 (6) [Wed Dec 05 11:53:04.240829 2012] [proxy_balancer:emerg] [pid 27332:tid 140444397807360] (17)File exists: AH01179: balancer slotmem_create failed
同じような現象は10月31日のエントリでも書いたのですが、今回はファイルを削除してもNG。うーんなんでだ。
Googleさまに聞いてみると、Apacheのコミュニティでもバグとして報告されいるようでパッチもリリースされている。でもこのパッチを摘要しても現象発生します。
うーんなんでだろうとさらにしらべると、どうもセマフォがいっぱいになっているのではないかというレポートを発見。
そこでnobody(httpdを動かしているユーザ)で利用しているセマフォを調べると、おおこれはこれはというくらいいっぱい。httpdはもういないのに。全部削除。
$ ipcs -s | grep nobody | awk '{print $2}' | xargs ipcrm sem
おお、起動できた。もうすこしわかりやすいメッセージだしてくれればいいのに。