いつも小ネタのかっぱこと川原 洋平(@inokara)です。どうも。暫くは小ネタでいきます Yo!
HA Proxy の設定ファイルって分割したり include 出来たりしないのかしら
結論
出来ます
なんで?
いや、設定ファイルが長くのなるのはメンテナンス性も悪くなるから
基礎知識
HA Proxy の設定(デフォルトでは haproxy.cfg)を見ると以下のようなディレクティブに分かれているのが見て取れます。
- global
- default
- frontend
- backend
- listen
上記のディレクティブ毎に設定を持てればメンテナンス性も上がりそうです。
やり方
設定ファイルの分割
簡単です。例えば global と default は一緒のファイルにしておいて、frontend と backend は分けたい場合には以下のように設定ファイルを分けます。
haproxy.cfg
global log 127.0.0.1 local0 user haproxy group haproxy daemon listen private_monitoring :8101 mode http stats enable stats uri /stats stats refresh 5s
global ディレクティブには HA Proxy のプロセス全体の設定を書きましょう。あと、listen にはモニタリングの設定を入れておきます。
frontend.cfg
frontend test-cluster1 bind 0.0.0.0:80 mode http timeout client 1s default_backend hogehoge-backend option forwardfor option httplog clf log global refresh 5s
frontend ディレクティブには HA Proxy で受け付けたいポートやそれに準ずる設定を入れておきます。
backend.cfg
backend hogehoge-backend mode http timeout server 2s option httpchk GET /check HTTP/1.0 option http-keep-alive balance roundrobin server web1 ${backend_host}:1919 check
backend ディレクティブには default_backend で指定しているバックエンドのサーバーの設定を入れておきます。
起動
haproxy を起動する際に以下のように起動することで上記で分割した設定ファイルを読み込むことが可能です。
/usr/sbin/haproxy -V -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/frontend.cfg -f /etc/haproxy/backend.cfg
また、/etc/init.d/haproxy のスクリプトから起動するのであればスクリプトに手心を加える必要があります。
--- haproxy.original 2014-07-26 01:13:03.419628627 +0000 +++ haproxy 2014-07-26 01:12:06.432551055 +0000 @@ -37,14 +37,16 @@ RETVAL=0 start() { - /usr/sbin/$BASENAME -c -q -f /etc/$BASENAME/$BASENAME.cfg + /usr/sbin/$BASENAME -c -q -f /etc/$BASENAME/$BASENAME.cfg + -f /etc/$BASENAME/frontend.cfg + -f /etc/$BASENAME/backend.cfg if [ $? -ne 0 ]; then echo "Errors found in configuration file, check it with '$BASENAME check'." return 1 fi echo -n "Starting $BASENAME: " - daemon /usr/sbin/$BASENAME -D -f /etc/$BASENAME/$BASENAME.cfg -p /var/run/$BASENAME.pid + daemon /usr/sbin/$BASENAME -D -f /etc/$BASENAME/$BASENAME.cfg -f /etc/$BASENAME/frontend.cfg -f /etc/$BASENAME/backend.cfg -p /var/run/$BASENAME.pid RETVAL=$? echo [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$BASENAME @@ -81,7 +83,9 @@ } check() { - /usr/sbin/$BASENAME -c -q -V -f /etc/$BASENAME/$BASENAME.cfg + /usr/sbin/$BASENAME -c -q -V -f /etc/$BASENAME/$BASENAME.cfg + -f /etc/$BASENAME/frontend.cfg + -f /etc/$BASENAME/backend.cfg } rhstatus() {
上記の修正を施したスクリプトで起動すると分割したファイルを読み込んで起動してくれます。
最後に
- いい感じです
補足
Apache 等のように include *.cfg とかして複数の設定ファイルを読み込めないのかという議論が以前から行われていたようです。
パッチもあたったりしていますが、include オプションは利用出来ないようなので取り込まれなかったようです…。
HA Proxy の状態監視と認証機能
HA Proxy には stats enable と指定することでレポーティング機能が有効になります。
frontend test-cluster1 bind 0.0.0.0:80 mode http timeout client 1s default_backend application-backend option forwardfor option httplog clf log global stats enable stats hide-version stats scope . stats uri /admin?stats
以下のように frontend ディレクティブに関するセッション情報等がブラウザで確認出来ます。
さらに設定に以下を追加すると上記のページに対して認証をかけることが出来ます。
stats realm Haproxy Statistics stats auth admin_example:password_example
認証情報を設定ファイルに直接記載するのはちょっち頂けませんが簡単ですね。
さいごに一言
- HA Proxy 設定ファイル大杉
元記事はこちらです。