Привет, %username%
! Тут мы будем устанавливать свежую стабильную версию HAProxy
из исходников, т.к. в репах доступна еще 1.8.15.
Чтобы скомпилировать 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
Если у тебя есть вопросы, комментарии и/или замечания – заходи в чат, а так же подписывайся на канал.