mod_proxy_balancerで負荷分散した時の設定サンプル

mod_proxy_balancerで負荷分散した時の設定サンプル Apache

このコピペチェックツールは、分散環境を構築してサービス運営しています。cakephp2.6で実装されており、以下のようなネットワーク構成になっています。VPSはGMOが提供しているConohaを使っています。

ネットワーク構成

ネットワーク構成

 

APIを実装して、curl_multiで並列アクセスして、高速化を狙っています。

ここでは、このmod_proxy_balancerの動かし出すまでサンプルを公開します。以下の設定をapacheの設定に記述しています。それぞれ、内容を解説していきたいと思います。

※2016-04-26 SetEnv proxy-initial-not-pooled 1を追加しました。理由はこちらです。

ProxyRequests Off

ProxyPass /balancer-manager !
<Location /balancer-manager>
  SetHandler balancer-manager
  Order deny,allow
  Deny from all
  Allow from XXX.XXX.XXX.XXX
</Location>

Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/"  env=BALANCER_ROUTE_CHANGED
ProxyPass / balancer://cluster/
ProxyPreserveHost On
SetEnv proxy-initial-not-pooled 1

<Proxy balancer://cluster/>
    BalancerMember http://XXX.XXX.XXX.XXX loadfactor=10 route=route01 retry=3
    BalancerMember http://XXX.XXX.XXX.XXX loadfactor=10 route=route02 retry=3
    BalancerMember http://XXX.XXX.XXX.XXX loadfactor=10 route=route03 retry=3
    BalancerMember http://XXX.XXX.XXX.XXX loadfactor=10 route=route04 retry=3
    ProxySet stickysession=ROUTEID
</Proxy>

 

■balancer-managerの設定

この部分です。

ProxyPass /balancer-manager !
<Location /balancer-manager>
  SetHandler balancer-manager
  Order deny,allow
  Deny from all
  Allow from XXX.XXX.XXX.XXX
</Location>

balancer-managerとは、どんなふうに振り分けがされているのか確認できるツールです。/balancer-managerにアクセスすると以下の画像の様に振り分け状況が確認できます。

balancer-manager

balancer-manager

Allow fromの設定でIPアドレスによる接続制限をしています。セキュリティ的に良くないので、必ずIPアドレス制限等を行いましょう。

 

■sticky-cookieの設定

この部分です。

Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/"  env=BALANCER_ROUTE_CHANGED

これは、一度アクセスしたら振り分けられたサーバにアクセスし続けるようにします。こうすることで、いろいろなサーバに振り分けられてもセッションが切れることがなくなります。プログラム側で何か考慮をする必要もありません。

この設定をしないと、ロードバランサーがサーバを切り替えるたびにログアウトを繰り返す、といった現象が発生します。

 

■分散設定

この部分です。

ProxyPass / balancer://cluster/
ProxyPreserveHost On
SetEnv proxy-initial-not-pooled 1
<Proxy balancer://cluster/>
    BalancerMember http://XXX.XXX.XXX.XXX loadfactor=10 route=route01 retry=3
    BalancerMember http://XXX.XXX.XXX.XXX loadfactor=10 route=route02 retry=3
    BalancerMember http://XXX.XXX.XXX.XXX loadfactor=10 route=route03 retry=3
    BalancerMember http://XXX.XXX.XXX.XXX loadfactor=10 route=route04 retry=3
    ProxySet stickysession=ROUTEID
</Proxy>

どのサーバに振り分けていくのかという設定です。ロードバランサーを行うサーバからhttp://XXX.XXX.XXX.XXXにアクセスできる必要があります。

BalancerMemberのURL部分の一番後ろに/は付けないようにします。/を付けてしまうと//hogehoge.htmlのようにスラッシュが2つ付加された状態で分散先サーバにアクセスされてしまいます。

※2016-04-26 SetEnv proxy-initial-not-pooled 1を追加しました。理由はこちらです。

また、cakephpでは以下の設定が必須となります。Htmlヘルパーのlinkメソッド出力されるURLやリダイレクトがおかしくなります。

ProxyPreserveHost On

 

という感じです。結構簡単にロードバランサーの機能を持つ環境を構築することができました。Conohaであれば、ローカルネットワークも組めるし、格安で分散環境構築できるかと思います。今なら、2000円のクーポンも付いてみたいですよ。

参考にしてみてください。では。