いつも小ネタのかっぱこと川原 洋平(@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 設定ファイル大杉
元記事はこちらです。