複数のフロントエンドとバックエンドを持つhaproxy構成ファイルを構築しています。それは数百行の長さになり、私はむしろそれをロードバランスしたい異なるウェブサイトのそれぞれのために別々のファイルに分割したいと思います。
HAProxyは、メインのhaproxy.cfgファイルから部分的な構成ファイルにリンクする機能を提供しますか?
構成ファイルを構成ディレクティブからリンクすることはできません。
ただし、HAProxyは-f
スイッチを複数回使用して、コマンドラインから複数の構成ファイルをロードできます。
haproxy -f conf/http-defaults -f conf/http-listeners -f conf/tcp-defaults -f conf/tcp-listeners
構成ファイルの量に柔軟に対応したい場合は、-f /etc/haproxy
のようなディレクトリを指定することもできます。ファイルは字句順に使用され、新しいファイルが古いファイルを上書きします。ドキュメントへのリンクが提供されている場合は、例として メーリングリスト を参照してください。この情報は、通常のドキュメントではなく、管理ガイドに記載されています。
つまずいた この答え ここで author nginxを無効にするスクリプトを作成し、サイトの機能を無効にします。 haproxy init.dスタートアップでは、スクリプトループを使用してhaproxy -fコマンドの連結を構築します。
/ etc/init.d/haproxy:
EXTRAOPTS=`for FILE in \`find /etc/haproxy/sites-enabled -type l | sort
-n\`; do CONFIGS="$CONFIGS -f $FILE"; done; echo $CONFIGS`
haensite
script:
#!/bin/bash
if [[ $EUID -ne 0 ]]; then
echo "You must be a root user" 2>&1
exit 1
fi
if [ $# -lt 1 ]; then
echo "Invalid number of arguments"
exit 1
fi
echo "Enabling $1..."
cd /etc/haproxy/sites-enabled
ln -s ../sites-available/$1 ./
echo "To activate the new configuration, you need to run:"
echo " /etc/init.d/haproxy restart"
hadissite
script:
#!/bin/bash
if [[ $EUID -ne 0 ]]; then
echo "You must be a root user" 2>&1
exit 1
fi
if [ $# -lt 1 ]; then
echo "Invalid number of arguments"
exit 1
fi
echo "Disabling $1..."
rm -f /etc/haproxy/sites-enabled/$1
echo "To activate the new configuration, you need to run:"
echo " /etc/init.d/haproxy restart"
これは、@ stephenmurdochの回答から構築されたソリューションであり、haproxy
実行可能ファイルへの複数の-f <conf file>
引数の使用を伴いました。
標準のCentOS 6.x RPMに含まれる/etc/init.d/haproxy
スクリプトを使用すると、次のように修正できます。
start() {
$exec -c -q -f $cfgfile $OPTIONS
if [ $? -ne 0 ]; then
echo "Errors in configuration file, check with $prog check."
return 1
fi
echo -n $"Starting $prog: "
# start it up here, usually something like "daemon $exec"
#daemon $exec -D -f $cfgfile -f /etc/haproxy/haproxy_ds.cfg -f /etc/haproxy/haproxy_es.cfg -f /etc/haproxy/haproxy_stats.cfg -p $pidfile $OPTIONS
daemon $exec -D -f $cfgfile $(for i in /etc/haproxy/haproxy_*.cfg;do echo -n "-f $i ";done) -p $pidfile $OPTIONS
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
上記の設定が完了したら、haproxy_<X>.cfg
やhaproxy_<Y>.cfg
などのファイルを任意の名前で作成できます。上記のforループは、これらのファイルが存在する場合、拡張されたdaemon haproxy ...
行にこれらのファイルを含めます。そうでない場合、ストックhaproxy.cfg
ファイルのみが使用されます。
haproxy_<...>.cfg
ファイル内で、グローバルとデフォルトが「トップレベル」haproxy.cfg
ファイルで定義されていることを確認する必要があります。残りのファイルには、フロントエンド/バックエンドが必要なだけで、それ以上はありません。
この簡単な手順に従うことができます。
cat /etc/$BASENAME/conf.d/*.cfg > $CFG
に1行のスクリプト(/etc/init.d/haproxy
)を挿入しますCFG=/etc/$BASENAME/$BASENAME.cfg cat /etc/$BASENAME/conf.d/*.cfg > $CFG [ -f $CFG ] || exit 1
systemctl daemon-reload
を使用してデーモン構成をリロードしますmkdir /etc/haproxy/conf.d
mv /etc/haproxy/haproxy.cfg /etc/haproxy/conf.d/global.cfg
としてconf.dに移動しますsystemctl restart haproxy
/etc/haproxy/haproxy.cfg
は、conf.d /のすべてのファイルから自動的に作成されます@Bapstieの答えは、ディレクトリを設定ファイルとしてhaproxyに渡すことができ、その中のファイルはアルファベット順にロードされると述べました。あたりです。
しかし、問題は、CentOS 'base/7/x86_64'リポジトリのパッケージhaproxyが古すぎるため、それをサポートしていないことです。
したがって、-f <individual config file>
をコマンドに追加するラッパーを作成する必要があるか、最新バージョンのhaproxyをインストールする必要があります。
for package in centos-release-scl-rh rh-haproxy18-haproxy; do
yum install -y $package
done
haproxyサービスのドロップイン構成を作成します。
[Service]
ExecStart=
ExecStart=/opt/rh/rh-haproxy18/root/sbin/haproxy -f /etc/haproxy-nutstore/ -p /run/haproxy.pid $OPTIONS