2012年01月21日
HAProxyの設定メモ
HAProxy関連のメモ書き。
ローカルのメモがひどい状況になってるので少しずつまとめる予定。
前回の記事 HAProxyで作るL7ロードバランサ
■HAProxyのステータスを表示
--------------------------------------------------
listen hastats 192.168.0.254:80
mode http
maxconn 64
contimeout 5000
clitimeout 10000
srvtimeout 10000
stats enable
stats show-legends
stats uri /haproxy?hastats
stats auth haadmin:adminpass * 認証用のIDとPassを書く
--------------------------------------------------
haproxy reload後、http://192.168.0.254/haproxy?hastats へアクセスするとこんな画面が見れるようになる。
Sessions数だとか、TrafficのIn/Outなんかも見れて中々便利。
ただし、haproxyをrestartなんかさせるとデータが初期化されてしまうので、統計データをとる必要がある場合は、"CSV export"からGETして、DBかなんかに突っ込んでおけば良いと思う。
■URLバランシングの設定
例えば、http://192.168.0.100/ 以下のリクエスト内容により、バランシングするサーバを分けたい場合に利用する。
(設定例)
"/" → srv01, srv02 でバランシング
"/cms/" → srv03 のみへ振り分け
"/phpmyadmin/" → srv04 のみへ振り分け
* srv03, srv04 は特にヘルスチェックを行わない。
--------------------------------------------------
listen www
bind 192.168.0.100:80
mode http
balance leastconn
maxconn 1024
contimeout 5000
clitimeout 10000
srvtimeout 10000
option httpchk GET /check.html HTTP/1.0
option log-health-checks
option forwardfor
reqisetbe ^[^\ ]*\ /cms/ www:cms
reqisetbe ^[^\ ]*\ /phppgadmin/ www:myadmin
server srv01 192.168.0.1:80 check inter 2000 fall 2
server srv02 192.168.0.2:80 check inter 2000 fall 2
backend www:cms
mode http
balance leastconn
contimeout 5000
srvtimeout 10000
server srv03 192.168.0.3:80
backend www:myadmin
mode http
balance leastconn
contimeout 5000
srvtimeout 10000
server srv04 192.168.0.4:80
--------------------------------------------------
reqisetbeで正規表現を書いて、それにマッチした場合は"www:cms"と結びついた"backend www:cms"(のサーバ)に振り分けるという設定になる。
便宜上、"www:***"と書いているが、ここはhogeでもhugaでも何でも良い。
当たり前だけどhaproxyが1セッション毎にHTTPヘッダを読んで処理するので、LB上で何でもかんでもやってしまったり、途方も無い処理量だったりすると当然パフォーマンスは落ちる。
設定の見直しが一番だけど、kernelや、haproxy自体のチューニングを弄れば多少は良くなるかも。深く調べてないがhaproxyだと下記パラメータあたりだと思う。
"nbproc", "maxconn", "tune.bufsize", "tune.maxaccept", "tune.maxpollevents", "tune.maxrewrite"
設定はシンプルだけど、アクセスが尋常なくてLBが死にそうなんだけどって人は、haproxyをL4モードで動かすとかなり早くなるはず。
具体的な設定例としては、haproxy.cfgの"mode http"を"mode tcp"に変えるだけ。ただし、forwardforとかのオプションは利用できなくなるので悩ましいところ。
あとは、DNSラウンドロビンとheartbeat何かをうまく使えば、LBのなんちゃってデュアルプライマリ構成も取れると思うんだけどこちらは未検証。
セッション管理さえクリアすれば冗長したLBを無駄なく使えてよさそうな気がしてる。
今度試してみるかな。
ローカルのメモがひどい状況になってるので少しずつまとめる予定。
前回の記事 HAProxyで作るL7ロードバランサ
■HAProxyのステータスを表示
--------------------------------------------------
listen hastats 192.168.0.254:80
mode http
maxconn 64
contimeout 5000
clitimeout 10000
srvtimeout 10000
stats enable
stats show-legends
stats uri /haproxy?hastats
stats auth haadmin:adminpass * 認証用のIDとPassを書く
--------------------------------------------------
haproxy reload後、http://192.168.0.254/haproxy?hastats へアクセスするとこんな画面が見れるようになる。
Sessions数だとか、TrafficのIn/Outなんかも見れて中々便利。
ただし、haproxyをrestartなんかさせるとデータが初期化されてしまうので、統計データをとる必要がある場合は、"CSV export"からGETして、DBかなんかに突っ込んでおけば良いと思う。
■URLバランシングの設定
例えば、http://192.168.0.100/ 以下のリクエスト内容により、バランシングするサーバを分けたい場合に利用する。
(設定例)
"/" → srv01, srv02 でバランシング
"/cms/" → srv03 のみへ振り分け
"/phpmyadmin/" → srv04 のみへ振り分け
* srv03, srv04 は特にヘルスチェックを行わない。
--------------------------------------------------
listen www
bind 192.168.0.100:80
mode http
balance leastconn
maxconn 1024
contimeout 5000
clitimeout 10000
srvtimeout 10000
option httpchk GET /check.html HTTP/1.0
option log-health-checks
option forwardfor
reqisetbe ^[^\ ]*\ /cms/ www:cms
reqisetbe ^[^\ ]*\ /phppgadmin/ www:myadmin
server srv01 192.168.0.1:80 check inter 2000 fall 2
server srv02 192.168.0.2:80 check inter 2000 fall 2
backend www:cms
mode http
balance leastconn
contimeout 5000
srvtimeout 10000
server srv03 192.168.0.3:80
backend www:myadmin
mode http
balance leastconn
contimeout 5000
srvtimeout 10000
server srv04 192.168.0.4:80
--------------------------------------------------
reqisetbeで正規表現を書いて、それにマッチした場合は"www:cms"と結びついた"backend www:cms"(のサーバ)に振り分けるという設定になる。
便宜上、"www:***"と書いているが、ここはhogeでもhugaでも何でも良い。
当たり前だけどhaproxyが1セッション毎にHTTPヘッダを読んで処理するので、LB上で何でもかんでもやってしまったり、途方も無い処理量だったりすると当然パフォーマンスは落ちる。
設定の見直しが一番だけど、kernelや、haproxy自体のチューニングを弄れば多少は良くなるかも。深く調べてないがhaproxyだと下記パラメータあたりだと思う。
"nbproc", "maxconn", "tune.bufsize", "tune.maxaccept", "tune.maxpollevents", "tune.maxrewrite"
設定はシンプルだけど、アクセスが尋常なくてLBが死にそうなんだけどって人は、haproxyをL4モードで動かすとかなり早くなるはず。
具体的な設定例としては、haproxy.cfgの"mode http"を"mode tcp"に変えるだけ。ただし、forwardforとかのオプションは利用できなくなるので悩ましいところ。
あとは、DNSラウンドロビンとheartbeat何かをうまく使えば、LBのなんちゃってデュアルプライマリ構成も取れると思うんだけどこちらは未検証。
セッション管理さえクリアすれば冗長したLBを無駄なく使えてよさそうな気がしてる。
今度試してみるかな。


