このコピペチェックツールは、分散環境を構築してサービス運営しています。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にアクセスすると以下の画像の様に振り分け状況が確認できます。
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円のクーポンも付いてみたいですよ。
参考にしてみてください。では。