Je construis un fichier de configuration haproxy qui a plusieurs fronts et backends. Cela va faire plusieurs centaines de lignes et je préfère le diviser en fichiers séparés pour chacun des différents sites Web que je souhaite équilibrer.
HAProxy offre-t-il la possibilité de créer des liens vers des fichiers de configuration partiels à partir du fichier haproxy.cfg principal?
Les fichiers de configuration ne peuvent pas être liés ensemble à partir d'une directive de configuration.
Cependant, HAProxy peut charger plusieurs fichiers de configuration à partir de sa ligne de commande, en utilisant le -f
basculer 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 celui-ci: -f /etc/haproxy
. Les fichiers seront ensuite utilisés dans leur ordre lexical, les fichiers plus récents remplaçant les fichiers plus anciens. Voir la liste de diffusion pour un exemple, si fournit des liens vers la documentation. Ces informations se trouvent dans le guide de gestion, pas dans les documents habituels.
Nous sommes tombés sur cette réponse où auteur a créé des scripts pour imiter la fonctionnalité de désactivation des sites d'activation de nginx. Dans le démarrage haproxy init.d, il utilise la boucle de 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 $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"
Il s'agissait d'une solution reposant sur la réponse de @ stephenmurdoch, qui impliquait l'utilisation de plusieurs arguments -f <conf file>
Pour l'exécutable haproxy
.
En utilisant le script /etc/init.d/haproxy
Inclus de CentOS 6.x RPM, 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 ensuite créer des fichiers tels que haproxy_<X>.cfg
Et haproxy_<Y>.cfg
En utilisant les noms que vous voulez. La boucle for ci-dessus inclura ces fichiers dans une ligne augmentée daemon haproxy ...
Si ces fichiers sont présents, sinon le fichier stock haproxy.cfg
Sera utilisé uniquement.
Dans les fichiers haproxy_<...>.cfg
, Vous devez vous assurer que vos paramètres globaux et par défaut sont définis dans le fichier "toplevel" haproxy.cfg
. Le reste des fichiers doit simplement avoir un frontend/backends et rien de plus.
Vous pouvez suivre cette étape simple.
cat /etc/$BASENAME/conf.d/*.cfg > $CFG
) dans /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
systemctl restart haproxy
/etc/haproxy/haproxy.cfg
sera automatiquement créé à partir de tous les fichiers dans conf.d /réponse de @Bapstie a rappelé que, un répertoire peut être passé à haproxy en tant que fichier de configuration, et les fichiers à l'intérieur seront chargés dans l'ordre alphabétique. C'est correct.
Mais le problème est que le package haproxy dans le référentiel CentOS 'base/7/x86_64' est tellement ancien qu'il ne le supporte pas.
Vous devez donc soit écrire un wrapper pour ajouter -f <individual config file>
à la commande, ou vous devez installer la dernière version de haproxy:
for package in centos-release-scl-rh rh-haproxy18-haproxy; do
yum install -y $package
done
et créez une configuration de dépôt pour le service haproxy:
[Service]
ExecStart=
ExecStart=/opt/rh/rh-haproxy18/root/sbin/haproxy -f /etc/haproxy-nutstore/ -p /run/haproxy.pid $OPTIONS