Apacheでロードバランシング
mod_proxy_balancerとは?
Apache2.2系から使えるようになったらL7のロードバランシング機能を持つmodule。
触れる機会があったのでちょっと調べてみる。
実際にはApacheでロードバランシングしているところを、AWSで言うELBに置き換えたいので調べてみたというところ。
ロードするmoduleは以下。
LoadModule status_module modules/mod_status.so LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so LoadModule proxy_http_module modules/mod_proxy_http.so
ロードバランシングの設定は以下。
<Proxy balancer://mycluster> BalancerMember http://127.0.0.1:81 retry=10 loadfactor=10 BalancerMember http://127.0.0.1:82 retry=10 loadfactor=50 </Proxy> ProxyPass /test balancer://mycluster
このように設定すると http://127.0.0.1:8080/test でLB機にアクセスした場合にBalancerMemberで指定した2つのバックエンドサーバへとアクセスを振り分けられる。
BalancerMemberのパラメータについて
パラメータ | 説明 |
---|---|
retry | コネクションを保持するためのリトライのタイムアウト値を秒単位で指定する。デフォルトで60秒。 |
loadfactor | 1~100までの値で負荷係数を重み付けできる。デフォルトで1。 |
詳細は以下
ロードバランサの管理画面
以下のように設定すると管理画面を表示することができる。
バランサマネージャと呼ぶらしい。この管理画面ではメンバを変更したり、特定のメンバをオフラインにするといった動的な管理ができる。
なので、Deny from all を指定して接続できる端末を制御する必要がある。ドメイン指定でも可能。
<Location /balancer-manager> SetHandler balancer-manager Order Deny,Allow Deny from all Allow from 127.0.0.1 </Location>
TODO
dockerで試したけど、キャプチャを取り忘れたのであとで貼ります。。。
LB用Apacheコンテナ * 1
バックエンドサーバ用Apacheコンテナ * 2
な最小構成を試してみました。