Debian に HAProxy をインストール
HAProxy はロードバランサで、複数の Web サーバに処理を振り分けるために使われたりするもの。
このマシンで Web サーバとして使い始めた nginx も同じ用途で使えるので、通常あれば HAProxy を入れなくても大体同じことができる。
が、密かに企んでいる将来の目的にはどうも nginx が使えないらしい。目的の詳細についてはまた別な記事で語ることにして、今回は取りあえず HAProxy を経由して nginx に接続させるところまでやってみる。
最初の時点でなんかわりと色々と書いてあるのだが、今回は真面目にロードバランサとして使うわけではないので取りあえずファイルをバックアップしつつ全面的に書きなおす方向で進める。
HAProxy がポート 80 番を使いたいので、nginx 側を 60080 に切り替えることにした。
/usr/local/nginx/nginx.conf も編集する。
今後は nginx には HAProxy が接続しにいくようになるので、当然ながら REMOTE_ADDR を参照しようとすると必ず 127.0.0.1 になってしまう。
この辺は恐らく /usr/local/nginx/fastcgi.conf を編集すれば REMOTE_ADDR を HTTP_X_FORWARDED_FOR の値に書き換えることもできそうな気配だけど、取りあえず保留にしておく。
2010-12-01 追記 --- 現時点で把握している問題点
このマシンで Web サーバとして使い始めた nginx も同じ用途で使えるので、通常あれば HAProxy を入れなくても大体同じことができる。
が、密かに企んでいる将来の目的にはどうも nginx が使えないらしい。目的の詳細についてはまた別な記事で語ることにして、今回は取りあえず HAProxy を経由して nginx に接続させるところまでやってみる。
apt-get install haproxyインストールができたら、/etc/default/haproxy の ENABLED を 1 に変更する。
vim /etc/default/haproxy
#ENABLED=0 ENABLED=1更に haproxy の設定ファイルを書き換える。
最初の時点でなんかわりと色々と書いてあるのだが、今回は真面目にロードバランサとして使うわけではないので取りあえずファイルをバックアップしつつ全面的に書きなおす方向で進める。
cd /etc/haproxy cp haproxy.cfg haproxy.cfg.default vim haproxy.cfg
global user haproxy group haproxy daemon defaults mode http retries 3 option redispatch option forwardfor except 127.0.0.1/8 option SERVERID rewrite backend web timeout client 30s timeout server 30s timeout connect 1s balance roundrobin server web1 127.0.0.1:60080 rspirep ^(Location:\ [a-z]+://[-.a-z0-9]+)(:[0-9]+)(.*)$ \1\3 frontend all 0.0.0.0:80 default_backend web※2010-12-01 追記 - Locationヘッダの書き換えを追加
HAProxy がポート 80 番を使いたいので、nginx 側を 60080 に切り替えることにした。
/usr/local/nginx/nginx.conf も編集する。
vim /usr/local/nginx/nginx.conf
# listen 80; listen 127.0.0.1:60080;現在は nginx が動作中、haproxy は停止中なのでそれぞれ reload, start させる。
invoke-rc.d nginx reload && invoke-rc.d haproxy startブラウザからアクセスしてみると上手くいっているようなので、haproxy を daemontools 経由で起動させるようにする。
update-rc.d -f haproxy remove cd /etc/service mkdir haproxy cd haproxy vim run
#!/bin/sh exec 2>&1 exec /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -db -q -p /var/run/haproxy.pid停止して改めて起動させてみる。
chmod 700 run invoke-rc.d haproxy stop && svc -u /etc/service/haproxy立ち上がっているようなので成功した模様。確認のために一応 netstat -lnp もしておく。
netstat -lnpタイムアウトの時間の設定の適切なところがよくわからんのでその辺は状況次第で考えないとダメそうかなあ。
今後は nginx には HAProxy が接続しにいくようになるので、当然ながら REMOTE_ADDR を参照しようとすると必ず 127.0.0.1 になってしまう。
この辺は恐らく /usr/local/nginx/fastcgi.conf を編集すれば REMOTE_ADDR を HTTP_X_FORWARDED_FOR の値に書き換えることもできそうな気配だけど、取りあえず保留にしておく。
2010-12-01 追記 --- 現時点で把握している問題点
- pid ファイルが作成されない
どうやら HAProxy は daemon 起動でなければ pid ファイルを作成しないらしい。
普段は困ることはないものの、invoke-rc.d haproxy reload などが使えない。
この辺見直した方がよさそうだ。