Apache2.4のlbmethodの設定

【前提条件】

[環境]

【参考サイト】

Apache2.4ドキュメント
http://httpd.apache.org/docs/2.4/

【概要】

Apache2.4でロードバランシングの設定をしようとしたときに
lbmethodの設定でつまいづいてしまいました。

どうやらApache2.4から追加の設定が必要のようです。
正確にはApache2.3からだそうですが。

【Proxyの設定】

Proxyの設定は↓のように設定しました。

<Proxy balancer://test_html/ >
    BalancerMember http://192.168.1.254:21001
    BalancerMember http://192.168.1.254:21002
</Proxy>

ローカルのサーバにVirtualHostを2つ作成しています。
それぞれ受け付けるポートを変えています。

モジュールの設定はProxy系のものをロードしています

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

【起動時にエラー】

先ほどの設定の状態でApacheを起動すると

AH00526: Syntax error on line 121 of /usr/local/apache2.4/conf/httpd.conf:
ProxyPass Can't find 'byrequests' lb method

「lbmethodって何ですか?」と思い、
調べて見るとロードバランサーアルゴリズムらしいです。

byrequestはリクエスト数による重み付け、
bytraficは転送量による重み付け、
bybusynessは待機プロセス数による重み付けとのことです。

デフォルトではbyrequestが適用されます。

2.4(2.3)ではhearbeateが追加されていて、
mod_heartbeatを使用する時に設定するようです。

アルゴリズムは2.2の時には
proxy_balancer_moduleに含まれていたようですが、
2.4(2.3)からはそれぞれモジュール化されているようです。

↓が追加されたモジュールです。

  • mod_lbmethod_bybusyness
  • mod_lbmethod_byrequests
  • mod_lbmethod_bytraffic
  • mod_lbmethod_heartbeat

【モジュールをロードする】

実際にモジュールを指定する設定を見て見ると
各モジュールの指定があったので、byreqeustだけコメントアウトしました。

LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so

コメントアウトにして起動すると正常に起動して、
バランシングされていました。

【まとめ】

調べて見ると日本語で書かれているサイトが少なかったように思うので、
割とはまる人はいるんではないでしょうか?

普段、Apacheを触らないから苦労しただけかもしれませんが・・・