すでにググれば情報は見つかりますが、自分でやった備忘録と多分今後使うと思うのでメモ。
負荷分散を手軽にやりたい
ロードバランシングは専用のマシンがあるくらい高価なものもあれば、本エントリにあるようなOSSなものもあるようです。で、今回は手軽に試せそうだし、実績もあるようなのでPoundをインストールして実際に分散してくれるところまでやってみました。公式サイトは以下です:
あと、インストールなや設定は以下のサイトが分かりやすいです(というか、思ったよりやること少なくてビックリ)
ほぼ参考サイトそのままですが…(;´Д`)
環境構成など
以前のエントリ「CentOS 6.x(x86_64)にmysql-clusterを入れて動かすメモ」で使ったVPSを2台分散用に、そしてPound用にもう一台必要だったのですが、さすがに厳しいので、こちらはローカルのVirtualBoxに入れたSceintific Linux(以降、SL)で代用することにしました。よって、今回の環境は以下のようになります。
- Scientific Linux 2.6 (192.168.0.6)(Poundサーバ)
- CentOS 6.2 (xxx.xxx.xxx.xxx)(HTTPサーバ1)
- CentOS 6.2 (yyy.yyy.yyy.yyy)(HTTPサーバ2)
なお、HTTPサーバはそれぞれApacheを入れてデフォルトのまま80番ポートをListenしている状態です。
※本当はこれは意味がありません。本来は内部でリバースプロキシしてハンドリングするはずなので(というか参考サイトはみんなそう)、ここでは簡単に動かすための設定ということで。
Poundのインストール
さて本題です。CentOSならepelのリポジトリにPoundがあるみたいですが、SLには無かったのと、例のごとく勉強のためにソースからインストール。最新版は2.6でした。
# wget http://www.apsis.ch/pound/Pound-2.6.tgz
# tar xvfz Pound-2.6.tgz
# cd Pound
# ./configure
# make
# make install
SSLは有効にしないので、デフォルトのままでインストール。すると、/usr/local/sbin/poundにインストールされました。SSLを有効にする場合はconfigureに--with-ssl=/path/to/ssl_dirのオプションをつければよいみたいです。
設定ファイル記述 → 起動まで
ソースから入れた場合は設定ファイルが無いので、作成します。設定ファイルは/usr/local/etc/poung.cfgです。
# /usr/local/etc/pound
User "www" # wwwユーザで実行
Group "www" # wwwグループで実行
Alive 60 # HertBeatを送る間隔(秒)
Daemon 1 # daemon起動は1らしい
# HTTPのListen設定
ListenHTTP
Address 192.168.0.6 # このサーバのIP
Port 80 # 80番ポートでListen
End
# 分散サーバの設定
Service
# HTTPサーバ1
BackEnd
Address xxx.xxx.xxx.xxx # HTTPサーバ1のIP
Port 80 # プロキシするポート番号
TimeOut 30 # タイムアウトまでの秒数
Priority 5 # このプロキシの優先度
End
# HTTPサーバ2
BackEnd
Address yyy.yyy.yyy.yyy # HTTPサーバ2のIP
Port 80 # プロキシするポート番号
TimeOut 30 # タイムアウトまでの秒数
Priority 5 # このプロキシの優先度
End
End
これだけでOKのようです。簡単ですねー。プロキシするサーバはServiceセクションに記述し、サーバの数だけBackEndセクションを書く感じでしょうか。あと、Priorityの値は優先度で、1から9の値が設定できます。9が優先度最大で、今回は5:5で同じ優先度に指定しています。運用を考えるなら、ログ周りの設定はもう少し見なおすべきですね。あとはpoundコマンドで設定ファイルのテストと起動。
# pound -c
>> Config file /usr/local/etc/pound.cfg is OK
# pound
>> starting...
-cオプションでテストを行い、OKなら起動します。さて、あっけなく設定できましたが、ちゃんと分散してくれるか確認します。ブラウザで192.168.0.6にアクセスすると…
おー、まずはHTTPサーバ1にプロキシされました。ちゃんと動いてる証拠ですね。で、何回かリロードを繰り返すと、
今度はHTTPサーバ2にプロキシされました。うん、大体半分くらいの確率で分散されてる感じですね。
片方のサーバをストップしてみる
ここからが本題ですね。何らかの障害が発生したと仮定して、HTTPサーバ2のApacheがストップしたとしましょう。
# Server 2
# /etc/init.d/httpd stop
>>httpdを停止中...
運用中はこんなこと軽々しくやっちゃうと大変なことになりますが、ともあれストップ。そして再度ブラウザを何回かリロードしてみると… (`;ω;´)< お、俺がなんとかするからServer2を頼む!
みたいな感じで健気なServer1でした。実際振り分けてるのはpoundですがね。
まとめと感想
今後の導入に向けた準備として手を付けましたが意外と簡単でした。
「で、実際負荷分散しないといけないくらいのことやるわけ?」
こ、今後そういうサービス作るかもしれませんから!!