Apacheにおける負荷分散機能(ロードバランサ)

Apacheにおける負荷分散機能(ロードバランサ)

■負荷分散概要
通常の構成においてはロードバランサは専用のアプライアンスを導入する。
その方が多くのリクエストをさばけるからである。
だがApacheにも負荷分散機能が存在し、利用することができる。

負荷分散方式には下記のものがある
1.ラウンドロビン方式・・・順番にサーバにリクエストを割り振る
2.最速応答時間方式・・・最も応答が早いと思われるサーバにリクエストを割りふる
3.最少コネクション方式・・・クライアントと保持しているコネクションが最も少ないサーバにリクエストを割りふる
4.最少トラフィック方式・・・データ通信量が最も少ないサーバにリクエストを割り振る

このほかに、重みつけラウンドロビン方式、CPU負荷分散方式、セッション維持方式等も存在する。

ロードバランサを導入することで、バックエンドで故障の合ったサーバを切り離したりすることなどができ、柔軟に対応することができる。
一方で構成が複雑になり、ログも分散することがあるため、導入は慎重に検討するべきである。

apacheにおける負荷分散

・フォーワードProxy
俗に言う通常のプロキシ。ネットワークは以下におけるそれぞれのクライアントが個々に直接インターネットへアクセスするのではなく
プロキシサーバが中継し、代表してインターネットにアクセスする。
キャッシュがプロキシサーバに保存されるため、応答が早い。ただし逆にコンテンツが更新されていた場合は更新に時間がかかる。

・リバースProxy
本項で述べた負荷分散に用いる機能。正確にはリバースProxy+負荷分散+冗長性によりロードバランシングを実現する。

Apacheのリバースプロキシ関連のモジュールは下記
1. mod_proxy
2. mod_proxy_balancer
3. mod_proxy_ftp
4. mod_proxy_http
5. mod_proxy_ajp
6. mod_proxy_connect

またApacheのproxy機能によって実現できる負荷分散機能は下記
1. リクエスト回数をもとにサーバに処理を割り振る
2. トラフィック量をもとにサーバに処理を割り振る
3. セッション変数を利用している場合は、セッションを作成済みのサーバに対してのみリクエストを割り振る(スティッキーセッション)
4. 設定を動的に変更するマネージャが利用できる
マネージャを通じてバックエンドサーバの状況確認ができる。

またApacheのproxy機能によって実現できる冗長化機能は下記
1. バックエンドサーバのダウンを自動的に検知し、分散対象から外すことが可能
2. バックエンドサーバが障害から復帰した場合には自動的に分散対象に含めることが可能
3. バックエンドのオンライン/オフラインを動的に変更するマネージャが利用できる


■mod_proxyを使用してURLに対応して異なるバックエンドサーバへ処理を割り振る
下記の例では/server1へのアクセスをhttp://192.168.1.1へ転送。
/server2へのアクセスをhttp://127.0.0.1へ転送する。

#Proxyフォーワードの機能はOffとする
ProxyRequests Off

#set the mappings of the reversproxy
ProxyPass /server1 http://192.168.1.1
#replace the response header of http
ProxyPassReverse /server1 http://192.168.1.1

ProxyPass /server2 http://127.0.0.1
ProxyPassReverse /server2 http://127.0.0.1


■mod_proxyを使用してリクエスト回数毎に異なるバックエンドサーバへ処理を割り振る
下記の例では/balancer_testへのアクセスを重み3として127.0.0.1へ、重み2として192.168.1.1へ割り振る

#Proxyフォーワードの機能はOffとする
ProxyRequests Off

ProxyPass /balancer_test balancer://mycluster lbmethod=byrequests timeout=1

BalancerMember http://127.0.0.1 loadfactor=3
BalancerMember http://192.168.1.1 loadfactor=2

※ちなみにトラフィック量によりバックエンドサーバへの処理を振り分ける場合はlbmethod=bytrafficへと変更するだけである


■管理画面を使用してバックエンドサーバの稼働状況を確認する
下記の例では127.0.0.1以外からのアクセスを拒否し、/usr/local/apache2/conf/htpasswdに用意されたファイルをもとにBasic認証を行っている。

SetHandler balancer-manager

Order Deny,Allow
Deny from all
Allow from 127.0.0.1
AuthUserFile /usr/local/apache2/conf/htpasswd
AuthGroupFile /dev/null
AuthName "Balancer Manager"
AuthType Basic
require valid-user