web-dev-qa-db-ja.com

大きなHAProxy構成ファイルを複数の小さなファイルに分割できますか?

複数のフロントエンドとバックエンドを持つhaproxy構成ファイルを構築しています。それは数百行の長さになり、私はむしろそれをロードバランスしたい異なるウェブサイトのそれぞれのために別々のファイルに分割したいと思います。

HAProxyは、メインのhaproxy.cfgファイルから部分的な構成ファイルにリンクする機能を提供しますか?

27
stephenmurdoch

構成ファイルを構成ディレクティブからリンクすることはできません。

ただし、HAProxyは-fスイッチを複数回使用して、コマンドラインから複数の構成ファイルをロードできます。

haproxy -f conf/http-defaults -f conf/http-listeners -f conf/tcp-defaults -f conf/tcp-listeners 

構成ファイルの量に柔軟に対応したい場合は、-f /etc/haproxyのようなディレクトリを指定することもできます。ファイルは字句順に使用され、新しいファイルが古いファイルを上書きします。ドキュメントへのリンクが提供されている場合は、例として メーリングリスト を参照してください。この情報は、通常のドキュメントではなく、管理ガイドに記載されています。

31
Baptiste

つまずいた この答え ここで 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"
8
elpddev

これは、@ 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>.cfghaproxy_<Y>.cfgなどのファイルを任意の名前で作成できます。上記のforループは、これらのファイルが存在する場合、拡張されたdaemon haproxy ...行にこれらのファイルを含めます。そうでない場合、ストックhaproxy.cfgファイルのみが使用されます。

haproxy_<...>.cfgファイル内で、グローバルとデフォルトが「トップレベル」haproxy.cfgファイルで定義されていることを確認する必要があります。残りのファイルには、フロントエンド/バックエンドが必要なだけで、それ以上はありません。

4
slm

この簡単な手順に従うことができます。

  1. 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
  2. systemctl daemon-reloadを使用してデーモン構成をリロードします
  3. ディレクトリを作成mkdir /etc/haproxy/conf.d
  4. デフォルトのhaproxy.cfgをglobal.cfg mv /etc/haproxy/haproxy.cfg /etc/haproxy/conf.d/global.cfgとしてconf.dに移動します
  5. Conf.dディレクトリに他の.cfgファイルを作成します
  6. Haproxyサービスを再起動するsystemctl restart haproxy
  7. 注:/etc/haproxy/haproxy.cfgは、conf.d /のすべてのファイルから自動的に作成されます
1
dek.tiram

@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
0
Chao Guo