Можно ли разделить большой файл конфигурации HAProxy на несколько файлов меньшего размера?
Я создаю конфигурационный файл haproxy, который имеет несколько фронтов и бэкэндов. Это будет несколько сотен строк, и я предпочел бы разделить его на отдельные файлы для каждого из разных сайтов, которые я хочу загрузить.
Предоставляет ли HAProxy возможность ссылаться на частичные файлы конфигурации из основного файла haproxy.cfg?
Ответы
Ответ 1
Файлы конфигурации не могут быть связаны вместе из директивы конфигурации.
Однако HAProxy может загрузить несколько файлов конфигурации из своей командной строки, используя переключатель -f
несколько раз:
haproxy -f conf/http-defaults -f conf/http-listeners -f conf/tcp-defaults -f conf/tcp-listeners
Если вы хотите быть гибкими с количеством конфигурационных файлов, вы можете даже указать каталог, подобный этому: -f/etc/haproxy
. Затем файлы будут использоваться в их лексическом порядке, новые файлы будут заменять более старые. См. Список рассылки для примера, если есть ссылки на документацию. Эту информацию можно найти в руководстве по управлению, а не в обычных документах.
Ответ 2
Наткнулся на этот ответ, где author созданных скриптов для имитации функции nginx disable enable sites. В запуске haproxy init.d он использует цикл script для создания конкатенации 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"
Ответ 3
Это было построение решения из ответа @stephenmurdoch, в котором использовалось несколько аргументов -f <conf file>
для исполняемого файла haproxy
.
Используя запас CentOS 6.x RPM в комплекте /etc/init.d/haproxy
script, вы можете изменить его так:
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
, используя любые имена, которые вы хотите. Вышеуказанный цикл будет содержать эти файлы в расширенной строке daemon haproxy ...
, если эти файлы присутствуют, иначе файл запаса haproxy.cfg
будет использоваться исключительно.
В файлах haproxy_<...>.cfg
вам необходимо убедиться, что ваши глобальные и значения по умолчанию определены в файле "toplevel" haproxy.cfg
. Остальные файлы просто должны иметь интерфейс /backend и ничего больше.
Ответ 4
Вы можете выполнить этот простой шаг.
- Вставьте однострочный скрипт (
cat/etc/$BASENAME/conf.d/*.cfg > $CFG
) в /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
- Переместите haproxy.cfg по умолчанию в conf.d как global.cfg
mv/etc/haproxy/haproxy.cfg/etc/haproxy/conf.d/global.cfg
- Создайте свой другой файл .cfg в каталоге conf.d
- Просто перезапустите ваш haproxy сервис
systemctl restart haproxy
- ПРИМЕЧАНИЕ:
/etc/haproxy/haproxy.cfg
будет автоматически создан из всех файлов в conf.d/
Ответ 5
Ответ @Bapstie отметил, что каталог может быть передан haproxy как файл конфигурации, а файлы внутри будут загружены в алфавитном порядке. Это правильно.
Но проблема в том, что пакет haproxy в репозитории CentOS 'base/7/x86_64' настолько стар, что не поддерживает его.
Поэтому вам нужно написать оболочку для добавления -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