Puis-je diviser un grand fichier de configuration HAProxy en plusieurs fichiers plus petits?

je suis en train de construire un fichier de configuration haproxy qui a plusieurs interfaces front et backends. Il va y avoir plusieurs centaines de lignes et je préférerais le diviser en fichiers séparés pour chacun des différents sites Web que je veux mettre en équilibre.

est-ce que HAProxy offre la possibilité de créer un lien vers des fichiers de configuration partiels à partir de haproxy principal.fichier cfg?

21
demandé sur stephenmurdoch 2014-09-11 01:52:07

4 réponses

les fichiers de Configuration ne peuvent pas être reliés entre eux à partir d'une directive de configuration.

cependant HAProxy peut charger plusieurs fichiers de configuration à partir de sa ligne de commande, en utilisant le -f passer plusieurs fois:

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

Si vous voulez être flexible avec la quantité de fichiers de configuration, vous pouvez même spécifier un répertoire comme ceci: -f /etc/haproxy. Les fichiers seront alors utilisés dans leur ordre lexical, les fichiers plus récents supplantant les fichiers plus anciens. Voir le liste de diffusion pour un exemple, si fournit des liens vers la documentation. Cette information se trouve dans le guide de gestion et non dans les documents réguliers.

25
répondu Baptiste 2018-02-03 14:40:06

suis Tombé sur cette réponseauteur création de scripts pour imiter nginx désactiver la fonctionnalité activer les sites. Dans l'init haproxy.d démarrage il utilise la boucle script pour construire la concaténation des commandes 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 ..."

cd /etc/haproxy/sites-enabled
ln -s ../sites-available/ ./

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 ..."

rm -f /etc/haproxy/sites-enabled/

echo "To activate the new configuration, you need to run:"
echo "  /etc/init.d/haproxy restart"
7
répondu elpddev 2016-06-28 12:12:11

il s'agissait d'une solution construite à partir de la réponse de @stephenmurdoch qui impliquait l'utilisation de multiples -f <conf file> arguments haproxy exécutable.

en utilisant les CentOS de stock 6.x TR / min inclus /etc/init.d/haproxy script, vous pouvez le modifier comme suit:

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
}

avec ce qui précède en place, vous pouvez alors créer des fichiers tels que haproxy_<X>.cfg et haproxy_<Y>.cfg utilisez les noms que vous voulez. Le ci-dessus pour boucle d'inclure ces fichiers dans un augmentée daemon haproxy ... ligne si ces fichiers sont présents, sinon le stock haproxy.cfg fichier sera utilisé uniquement.

dans les haproxy_<...>.cfg fichiers vous devez vous assurer que votre global et par défaut sont définis dans le "toplevel" haproxy.cfg fichier. Le reste des fichiers simplement besoin d'avoir frontend/backend et rien de plus.

4
répondu slm 2016-08-29 18:06:01

vous pouvez suivre cette simple étape.

  1. Insérer une ligne de script (cat /etc/$BASENAME/conf.d/*.cfg > $CFG)/etc/init.d/haproxy

    Voici la position où vous devez insérer la ligne

    CFG=/etc/$BASENAME/$BASENAME.cfg cat /etc/$BASENAME/conf.d/*.cfg > $CFG [ -f $CFG ] || exit 1
  2. recharger la config de daemon avec systemctl daemon-reload
  3. directory mkdir /etc/haproxy/conf.d
  4. Déplacer par défaut haproxy.cfg à conf.d comme mondial.cfg mv /etc/haproxy/haproxy.cfg /etc/haproxy/conf.d/global.cfg
  5. créer votre autre .fichier cfg dans conf.d répertoire
  6. redémarrez simplement votre service haproxy systemctl restart haproxy
  7. NOTE:/etc/haproxy/haproxy.cfg sera automatiquement créé à partir de tous les fichiers de conf.d/
1
répondu dek.tiram 2018-07-16 12:13:26