Posted at

Apacheによる負荷分散構成

More than 1 year has passed since last update.


はじめに

Apache 2.4 において mod_proxy_balancer でリクエストを配下のWebサーバーに分散させる方法について 簡単にテストした内容をまとめています。


システム構成図

mod_proxy_balancer.png

/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 の管理画面が表示される。

各メンバーのステータスやリクエストの分散状況などが表示される。

balancer-manager.png

(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.confProxyPass にて 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なサーバーのみにリクエストが来ることを確認



参考資料