「L7ロードバランサHaproxyを使う(その1 インストールまで)」の続きです。
前回では、
Haproxyのインストール
起動スクリプトの設置
起動確認
デフォルトの設定ファイル(ひな形)のコピー
まで行いました。
今回は設定ファイルを編集して、ロードバランサ(またはProxy)として動かしてみます。
では、設定ファイルを開きます。
vim /etc/haproxy/haproxy.cfgひな形としてすでに何か書かれていると思います。
設定ファイルは大きく分けて5つのセクションから成っています。
1.globalセクション
全体の挙動に関する設定を行う。
2.defaultsセクション
以下の「listen」「frontend」「backend」に関するデフォルトの設定を行う。
3.listenセクション ※必須ではない
frontendやbackendの設定をこのセクションでまとめて行える。
または、hastatsというステータス情報を出力するページの設定を行う。
4.frontendセクション
クライアントからのパケット受け入れに関する設定を行う。
5.backendセクション
ロードバランス(またはProxy)するサーバ(群)に対する設定を行う。
では、簡単に見ていきます。
#--------------------------------------------------------------------- # Global settings #--------------------------------------------------------------------- global # ログの出力 ※次回説明します。。 log 127.0.0.1 local6 debug # pidファイルのパス pidfile /var/run/haproxy.pid # 1プロセスに対する最大接続数 maxconn 4096 # 実行ユーザとグループ user haproxy group haproxy # 起動プロセスはバックグラウンドで動作します。。 daemon # 起動するプロセス数。公式には'1'のままで良いとのことですが、16コアCPUだと4くらいが最もパフォーマンスが出た。。 nbproc 2 # プロセスごとの最大ファイルディスクリプタを設定。書かなくても自動で設定されるらしい。 ulimit-n 12000 # 統計情報が見れる。※ただし要設定!次回説明します。。 stats socket /var/run/haproxy/stats.socket uid 105 gid 105次に、defaultsセクション。
#--------------------------------------------------------------------- # common defaults that all the 'listen' and 'backend' sections will # use if not designated in their block #--------------------------------------------------------------------- defaults # L7でロードバランス。'mode tcp'とすればTCPレベル(L4)でロードバランスするので処理速度の向上が見込める。 mode http # globalセクションでの設定が引き継がれる。 log global # このオプションよう分からん。。NULLなコネクションのログを書き出さない? option dontlognull # ヘルスチェックのログを書き出す。 option log-health-checks # backendサーバに接続できない時のタイムアウト秒数(ミリ秒) timeout connect 10000 # default 10 second time out if a backend is not found # クライアントサイドでのタイムアウト秒数。' timeout server 'と同じ値が推奨とのこと。 timeout client 30000 # サーバサイドのタイムアウト秒数 timeout server 30000 # 接続に失敗した際のリトライ回数 retries 3
次はlistenセクション。僕はhastats(ステータスページ)で使っています。
# 8088ポートで待受ける listen hastats *:8088 mode http maxconn 64 contimeout 5000 clitimeout 10000 srvtimeout 10000 stats enable stats show-legends stats uri /haproxy?hastats # IDとパスワード stats auth username:yourpasswordこれで、http://example.com/haproxy?hastatsを入力するとHaproxyのステータスが表示される。
次にfrontendセクション。
# 80番ポートで待ち受ける。 frontend all 0.0.0.0:80 # URLの最初に/static /images /javascript /stylesheetsがあれば url_static をTRUEに設定する。 acl url_static path_beg -i /static /images /javascript /stylesheets # URLの最後が .jpg .gif .png .css .jsだったら url_static をTRUEに設定する。 acl url_static path_end -i .jpg .gif .png .css .js # もし url_staticがTRUEだったら、バックエンドは static を使う。 use_backend static if url_static # デフォルトのバックエンドは app を使う。 default_backend appこのACLがhaproxyの強みで、いろんな条件に応じてバックエンドサーバを振り分けることが可能です。
※ACLについては「HAProxyのACLとCriteria」が詳しかったです。またはここのGoogle Docs。
URLやIPアドレス、ポート、HTTPヘッダなどを見て振り分けられます。
次にbackendセクション
#--------------------------------------------------------------------- # static backend for serving up images, stylesheets and such #--------------------------------------------------------------------- # static というバックエンドサーバ backend static # ラウンドロビンでの振り分け(デフォルト)。比重の設定も可能。 balance roundrobin # 127.0.0.1:4331で起動。IPを変えて他サーバにすることが可能。 # checkでヘルスチェックを有効にする。 server static 127.0.0.1:4331 check #--------------------------------------------------------------------- # round robin balancing between the various backends #--------------------------------------------------------------------- # app というバックエンドサーバ群 backend app # ラウンドロビンで振り分け。 balance roundrobin # サーバは以下の4台でラウンドロビン。ちなみに weight '数値' とすることで振り分けの比重を設定できる。 server app1 127.0.0.1:5001 check server app2 127.0.0.1:5002 check server app3 127.0.0.1:5003 check server app4 127.0.0.1:5004 checkこんな感じです。
これで起動させてみましょう。
service haproxy startURLの末尾が xxx.jpg とかだと、きっと127.0.0.1:4331へProxyされるはずです。
ちょっと長くなったのでログ出力と'stats socket'についてはまた次回書きます。
以上でぇぇえっぇぇぇぇす。
※2013.11.16追記
「L7ロードバランサHaproxyを使う(その3 syslogの設定とコマンドラインツール)」書きました。
0 件のコメント:
コメントを投稿