はじめに
Apache 2.4 において mod_proxy_balancer
でリクエストを配下のWebサーバーに分散させる方法について 簡単にテストした内容をまとめています。
システム構成図
/balancer
にアクセスが来ると、バックエンドのservice1 ~ 3 に順番にリクエストを振り分ける
- 動作確認では localhost にて試したが、バックエンドは別サーバーでも問題ない
- 今回は service1 ~ 3 に
Hello World
という文字列を返すだけのHTTPサーバーを用意した
設定
httpd.conf
(1) httpd-balancer.conf
の作成
バランサー設定を一箇所にまとめるよう、設定ファイルを作成
ProxyPass /balancer balancer://mycluster lbmethod=byrequests timeout=1
<Proxy balancer://mycluster>
BalancerMember http://127.0.0.1:8081 loadfactor=1
BalancerMember http://127.0.0.1:8082 loadfactor=1
BalancerMember http://127.0.0.1:8083 loadfactor=1
</Proxy>
<Location /manager>
SetHandler balancer-manager
</Location>
/balancer
にアクセスがあると <Proxy>
に登録された BalancerMember
にリクエストを振り分ける。
loadfactor
は重み付けで、数字が大きいメンバーに優先してリクエストを振り分けられる。
/manager
にアクセスがあると、 mod_proxy_balancer
の管理画面が表示される。
各メンバーのステータスやリクエストの分散状況などが表示される。
(2) httpd.conf
にて以下のモジュールを有効にする
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
#LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
#LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
#LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule status_module modules/mod_status.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
今回は単純にリクエストを順に振り分けるので、 mod_lbmethod_byrequests.so
を有効にする。
httpd-balancer.conf
の ProxyPass
にて lbmethod=byrequests
以外のメソッドを使用する場合は、該当するモジュールのコメントアウトを外す。
(3) httpd-balancer.conf
を読み込む
httpd.conf
の末尾で httpd-balancer.conf
を読み込むように Include
を追加する。
Include conf/extra/httpd-proxy-balancer.conf
(4) Apacheを再起動する
(5) 動作確認
-
/balancer
にアクセスし、Hello World
が表示されることを確認 - 何度かブラウザのリロードを繰り返し、各ダミーサーバーに順繰りにリクエストが来ることを確認
- service1 ~ 3 のいずれかを停止した状態でブラウザのリロードを繰り返すと、Activeなサーバーのみにリクエストが来ることを確認