BookmarkLINEロードバランサはAWSなどクラウドサービス出現のおかげでかなり気軽に使えるようになりました。いえ、アプリケーションの開発時に冗長化構成下の動作確認を気軽に行いたいと思う場合もあったりします。今回は、負荷分散や冗長化の基本をさらいつつ、Apacheを使って冗長化構成時のロードバランシングを行います。今回の開発環境は以下の通りです。2.4仮想環境でWEBサーバを3機用意しています。WEBサーバ2負荷分散とロードバランサ処理やトラフィックなどWEBサーバ1台では処理しきれない場合に、サーバを複数台用意して負荷分散装置「ロードバランサ」を用いて各サーバへ振り分けを行う事で、サーバ1台にかかる負荷を分散させる事が出来ます。負荷分散方式ロードバランサで用いられる負荷分散方式は以下の通りです。一定時間で転送されたデータ量が最も少ないサーバへ割り振るCPU負荷分散方式CPUの負荷が最も低いサーバへ割り振るセッション維持方式IPやCookieなどを基にサーバへ割り振るロードバランサ導入時の注意点システム構成が複雑化するログがサーバ台数分散らばるApacheのProxyと負荷分散Apacheでの負荷分散はProxy機能を応用する事で実現しています。フォワードProxyキャッシュされたデータをWEBサーバの代わりに返す外部ネットワークから断絶されているイントラネット内のクライアントが外部のサイトを参照したりできるリバースProxyロードバランシングはこっちインターネット側からのリクエストを中継し、WEBサーバへ割り振るコンテンツの分散やWEBサーバ構成を外部から隠蔽する時などで使われるリバースProxy機能に負荷分散や冗長性を装備する事でロードバランサとして使用できるApacheでProxy機能を使うには、拡張モジュール「mod_proxy」が必要になります。拡張モジュール「mod_proxy_balancer」で実現します。HTTP/サーブレットコンテナ/AJP13/FTPのバランシングが可能です。負荷分散リクエスト回数を基に割り振るトラフィック量を基に割り振るセッション変数を利用する場合、セッション情報を保持しているサーバに接続して割り振る設定を動的に変更できるマネージャを利用できるマネージャを利用する事で各バックエンドサーバの状態を確認できるマネージャはWEBブラウザから利用できる冗長化httpdの再起動不要でバックエンドサーバをオンライン/オフラインできるバックエンドサーバのダウンを自動で検知し分散対象から外すバックエンドサーバが障害から復帰した場合は自動で分散対象にするバックエンドサーバのオンライン/オフラインを変更するマネージャが使えるマネージャを利用する事で各バックエンドサーバの状態を確認できるマネージャはWEBブラウザから利用できる冗長化とセッションPHPではアプリケーションでログインでのユーザ認証などでセッションを使う事があります。IPや固有IDを埋め込んだCookie情報を基に、サーバ側でクライアントを識別しクライアントごとの変数をサーバ側で保持するようにすることで、WEBブラウザが画面遷移してもログインなどの情報を引き継げます。その時にサーバ側で保存されるのが「セッション変数」です。冗長化構成下では、リクエストが振り分けられるので、認証を行ったサーバではないところへ割り振られた場合、認証情報を引き継ぐ事ができずWEBブラウザとHTTPサーバとでは永続的な処理を行う事ができません。ロードバランサを導入して冗長化構成にする場合、サーバ間でセッション情報を共有する必要があります。Tomcatのようなアプリケーションサーバではメモリ・ディスク・RDBMSにセッション情報を保存する「セッションレプリケーション」が提供されていますが、これに頼らなくてもApache2.2以降ではクライアントからのリクエストを、セッション変数が保存されているサーバに固定して割り振ることができます。これを「スティッキーセッション方式」と呼び、セッション変数を永続化して利用できます。(shared)最低でも以下がインストールされている必要があります。proxy_module(mod_proxy)proxy_balancer_module(mod_proxy_balancer)URLでの割り振り以下のルールでバックエンドサーバへの割り振りを設定します。割り振りconfファイルを設定します。http://192.168.80.12</IfModule>ProxyRequestsディレクティブをoffにする事でフォワードProxy機能を無効化し、リバースProxyを有効化しています。ProxyPass/ProxyPassReverseディレクティブでURLのマッピングを行っています。リモートサーバをローカルサーバの名前空間にマップしています。httpdを再起動し、ブラウザからアクセスしてみます。URLによってサーバが割り振られている事が確認できました。以下の順で設定します。アルゴリズムは以下の2つで設定します。設定する事で、振り分けの比率を設定することが出来ます。(設定値は1~100)maxattemptsに関して、バックエンドサーバがダウンした場合は自動で振り分け対象から外れます(フェイルオーバー)が、それを判断する為の接続試行回数になります。ちなみに、振り分け対象から外れた時には、ロードバランサ側のerror_logに以下のようにロギングされます。60s尚、これらの項目は全てが必ず設定しなくてはいけないものではなく、以下に関しては未設定ならばデフォルト値が設定されます。timeout=1maxattempts=1loadfactor=1httpd再起動の後、ブラウザからアクセスしてみます。振り分けが行われている事が確認できました。スティッキーセッションの設定スティッキーセッションを設定しセッション情報を維持するには以下のように設定します。