
Apache 2.2がでました。
mod_dbdとか、mod_proxy_balancerとか気になる新機能てんこ盛りです。
ひげぽんさんの所に
誰か入れてみた人いますか?
超簡単でした
mod_proxyとmod_proxy_balancerを参考にしました。
既に日本語ドキュメント完備!
以下から駆け足で、またセキュリティ的によろしくない設定例が多々あります。
とりあえずこんな設定を仕込んでみました
ProxyPass /lb balancer://TEST stickysession=sesid基本的には、リバースプロクシを仕込むのと大差ありません。
<Proxy balancer://TEST>
#1
BalancerMember http://i.yappo.jp loadfactor=10
#2
BalancerMember http://www.google.co.jp loadfactor=5 route=2
#3
BalancerMember http://www.yahoo.co.jp loadfactor=5 route=3 redirect=2
#4
BalancerMember http://127.0.0.1:8081 loadfactor=1
#5
BalancerMember http://127.0.0.1:8082 loadfactor=1 route=4 redirect=2
</Proxy>
mod_proxy_balancerで嬉しい機能は、バックエンドのWebサーバが停止した事を自動的に検知して、止まってるサーバにリクエストを投げないですむ事です。
また、専用の管理画面も提供しているので、どのクラスタのどのサーバが落ちてるかが一目瞭然です。
<Location /LBMAN>という設定を仕込むと
SetHandler balancer-manager
</Location>
極めつけはstickysessionです。
これは、CookieもしくはURLの文字列の中に指定したパラメータ名があると、そのパラメータを見てどのサーバを振り向けるかを明示的に指定可能になります。
今回の例だとsesidというパラメータ名です。
route=3っていう設定に意味があります。
具体的にはApacheが
GET /lb/ HTTP/1.0というリクエストを受け取ったらYahooに強制的に振り向けます。
Cookie: sesid=hogegege.3;
で、携帯電話とかはCookieが使えないものが有るのでどうしようって、感じですがバッチリ対応しています。
こんなリクエストがくればおkです。
GET /lb/?sesid=iofhwehg.3 HTTP/1.0
POST /lb/?sesid=iofhwehg.3 HTTP/1.0
GET /lb/hogege/sesid=iofhwehg.3 HTTP/1.0
GET /lb/hogege/sesid=iofhwehg.3?id=hogaga HTTP/1.0
GET /lb/dyfoeifYGfiussesid=iofhwehg.3 HTTP/1.0
ただし、下記の例は動きません。
GET /lb/?sesid=iofhwehg.3&id=hoge HTTP/1.0
GET /lb/?sesid=3 HTTP/1.0
GET /lb/sesid=sddas.3/hoge HTTP/1.0
これには理由があって、以下の条件を満たすURL文字列でないといけないのです。
1.stickysessionに指定された文字列がある
2.stickysessionに指定された文字列の直後が=である
3.そのパラメータの値には.が入っている必要がある
4..以降から、URLの末尾もしくは?が出てくるまでの文字列がrouteで設定されてなければならない。
こんな感じです。
だからPOSTでも何でも条件さえ満たしてれば携帯でも使えます。
要はURLの末尾に必ずおけばいいです。
なんてのは大嘘で、おそらくバグがあって上の例じゃどうやっても動きません。
GET /lb/?sesid==iofhwehg.3 HTTP/1.0
のように=を2個つなげればいけると思います。(Cookie使うのだったら問題ない)
たぶん、なんらかの間違いだと思いPatchを付けたバグレポート出してみました
Webアプリ側ではstickysessionに配慮した構築を行わないとstickysessionを使いこなせなさそうですが、stickysession使わなければとてもお手軽にバランシング出来るので、あとは安定稼動すればおkなだけ!
オマケ:管理画面にxmlというパラメータを渡すと…(例: http://localhost/LBMAN?xml=1 )設定がxmlで取り出せます。多分作成中の画面かと。
ロードバランサ機能を有効にした場合
メンバーサーバでのCGI変数はどのようになりますでしょうか?
リバースプロキシを使用したときみたいに
中継サーバからアクセスされたようなCGI変数になるのでしょうか??