Установка HAProxy на Centos 8

Привет, %username%! Тут мы будем устанавливать свежую стабильную версию HAProxy из исходников, т.к. в репах доступна еще 1.8.15.
⚠️ CentOS Linux 8 — EOL с 31 декабря 2021. Пост оставлен как есть, инструкция по сборке из исходников работает и на Rocky Linux 9 / AlmaLinux 9 — команды
dnf,firewall-cmdи systemd-юниты идентичны. РепозиторийPowerToolsна EL9 называетсяcrb(dnf config-manager --enable crb). На текущий момент стабильная ветка HAProxy уже 3.x — обнови ссылку на архив на актуальную при сборке.
Чтобы скомпилировать HAProxy, нужно будет убедиться, что установлено несколько пакетов из стандартных репозиториев. Один из необходимых пакетов находится в репе PowerTools. Включить данный репозиторий можно так:
dnf config-manager --enable PowerToolsПосле чего нам необходимо установить набор обязательных утилит, которые потребуются при сборке из исходников:
dnf install gcc openssl-devel readline-devel systemd-devel make pcre-devel tar lua lua-develДалее идем на официальный сайт
и узнаём последний стабильный релиз, копируем ссылку на архив и скачиваем. В моём случае (на момент написания этих строк) последний стабильный 2.1.4:
wget http://www.haproxy.org/download/2.1/src/haproxy-2.1.4.tar.gz -O ~/haproxy.tar.gzРаспаковываем и переходим в директорию с исходниками:
tar xzvf ~/haproxy.tar.gz -C ~/
cd haproxy-2.1.4/Далее компилируем и устанавливаем:
make USE_NS=1 USE_TFO=1 \
USE_OPENSSL=1 USE_ZLIB=1 \
USE_LUA=1 USE_PCRE=1 \
USE_SYSTEMD=1 USE_LIBCRYPT=1 \
USE_THREAD=1 TARGET=linux-glibc \
EXTRA_OBJS="contrib/prometheus-exporter/service-prometheus.o"
make installСоздаем пользователя под которым будет запускаться демон HAProxy:
groupadd -g 992 haproxy
useradd -g 992 -u 995 -m -d /var/lib/haproxy -s /sbin/nologin -c haproxy haproxyТеперь нам необходимо создать SystemD Unit файл для корректного запуска демона:
cat /etc/systemd/system/haproxy.service
[Unit]
Description=HAProxy
After=syslog.target network.target
[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/haproxy
ExecStart=/usr/local/sbin/haproxy -f $CONFIG_FILE -p $PID_FILE $CLI_OPTIONS
ExecReload=/bin/kill -USR2 $MAINPID
ExecStop=/bin/kill -USR1 $MAINPID
[Install]
WantedBy=multi-user.targetСигнал USR2 дает команду HAProxy перезагрузить свою конфигурацию, не приводя ее в действие. Сигнал USR1 позволяет процессам закончить то, что они делали до выхода.
Теперь нам необходимо создать environment-файл для HAProxy:
cat /etc/sysconfig/haproxy
CLI_OPTIONS="-Ws"
CONFIG_FILE=/etc/haproxy/haproxy.cfg
PID_FILE=/var/run/haproxy.pid Параметр -Ws запускает HAProxy в режиме, в котором он может уведомить SystemD, когда он будет запущен.
После этого необходимо попросить SystemD перечитать информацию о демонах:
systemctl daemon-reloadПодготавливаем конфигурацию для HAProxy:
cat /etc/haproxy/haproxy.cfg
global
daemon
maxconn 256
user haproxy
group haproxy
chroot /var/lib/haproxy
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend http
bind *:8000
default_backend servers
backend servers
server server 127.0.0.1:81Теперь запускаем HAProxy и включаем в автозапуск:
systemctl start haproxy.service
systemctl enable haproxy.serviceТак же не забудьте про firewall-cmd и открытие портов:
firewall-cmd --permanent --zone=public --add-port=8000/tcp
firewall-cmd --reloadНа этом всё! Profit!
UPD: Поправил параметры сборки, для того, чтобы свежесбилженый HAProxy включил поддержку Prometheus
Если у тебя есть вопросы, комментарии и/или замечания – заходи в чат , а так же подписывайся на канал .
О способах отблагодарить автора можно почитать на странице “Донаты ”.