Instalacja HAProxy na CentOS 7/8

Gdyby ktoś zapytał mnie, która dystrybucja linuxa jest moim zdaniem najlepsza – bez kozery odpowiedziałbym CentOS – przede wszystkim z racji tego, że najczęściej mam z tą dystrybucją do czynienia, a wydaje mi się przy tym, iż CentOS zaraz obok Ubuntu jest najpopularniejszy. Oraz najbliżej mu do „industry standard” – Red Hata. Z kolei gdybym miał odpowiedzieć na pytanie co mi się w CentOSie nie podoba – to równie szybko i bez namysłu odpowiem – dostępność nowych paczek instalacyjnych wielu popularnych aplikacji. Nie inaczej jest w przypadku HAProxy.

HAProxy to jeden z bardziej popularnych load balancerów na rynku. Bowiem najnowsza wersja dostępna w oficjalnych repozytoriach dla CentOS 7 to wersja 1.5.18 – nieco lepiej wygląda to w CentOS 8 – tu najnowsza wersja dostępna oznaczona jest numerkiem 1.8.23. Jednak na chwilę obecną najnowsze stabilne wydanie HAProxy to 2.2.2 i na próżno szukać takiej wersji w repozytoriach dla systemów CentOS. Nie pozostaje nic innego jak powrót do staroszkolnego systemu – „instalacji ze źródeł”

Zanim jednak pójdziemy tą drogą kilka słów o zależnościach dla HAProxy – jednym z najbardziej wymaganych jest pakiet Lua – a ten z kolei choć rzadko aktualizowany ma obcenie stabilna wersję oznaczoną numerkiem 5.4.0 – podczas gdy ponownie w repozytoriach dla CentOS jest w nieco starszych wersjach. i tak CentOS 7 może się pochwalić wersją 5.1.4 zaś CentOS 8 – 5.3.4. Ja jednak jestem orędownikiem reguły, że najstarszą dostępną wersją oprogramowania może być co najwyżej wersja n-1, zaś pożądana wersja to zawsze ta najbardziej aktualna. Nie wspominałbym o tym, gdyby nie fakt, że Lua to skryptowy język programowania, który jest niezbędny do prawidłowej pracy managera pakietów yum / dnf. Usunięcie go i instalacja ze źródeł nie wchodzi w grę – musimy zastosować mały trick.

Ale do rzeczy. Oczywiście na początek musimy pobrać obydwa pakiety (nie będę wskazywał miejsca – bo przedszkole linuxowe, chyba każdy ma za sobą):

wget https://www.lua.org/ftp/lua-5.4.0.tar.gz
wget http://www.haproxy.org/download/2.2/src/haproxy-2.2.2.tar.gz
tar zxvf haproxy-2.2.2.tar.gz
tar zxvf lua-5.4.0.tar.gz

Gdyby ktoś zapytał czemu 'zxvf’ – nie wiem, ot po prostu pamięć mięśniowa. Można zawsze skorzystać ze skryptu jaki opublikowałem tu 7! lat temu… pewnie nadal działa 😉

Zacznijmy od zainstalowania Lua – jako, że yum instaluje ten pakiet w swoich domyślnych folderach – /usr/bin /usr/share /usr/lib oraz /usr/lib64 dodatkowy pakiet na potrzeby HaProxy należy zainstalować gdzie indziej (nie mam zielonego pojęcia czy jest to prawidłowe podejście do tematu – u mnie w praktyce zadziałało i nie powoduje konfliktów). Aby zaoszczędzić sobie kilku nerwów – proponuje zawczasu doinstalować następujące pakiety:

yum install make gcc openssl-devel readline-devel systemd-devel pcre-devel

Dalej można już instalować:

cd lua-5.4.0
make INSTALL_TOP=/opt/lua-5.4.0 linux install

Wracamy do HAProxy:

cd ../haproxy-2.2.2

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 \
LUA_INC=/opt/lua-5.4.0/include \
LUA_LIB=/opt/lua-5.4.0/lib

make PREFIX=/opt/haproxy-2.2.2 install

Następnie potrzeba stworzyć plik:

/etc/systemd/system/haproxy-2.2.2.service

Z następującą zawartością:

[Unit]
Description=HAProxy 2.2.2
After=syslog.target network.target
[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/haproxy-2.2.2
ExecStart=/opt/haproxy-2.2.2/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

Oraz kolejny:

/etc/sysconfig/haproxy-2.2.2

Zawierający:

#Command line options to pass to HAProxy at startup
#The default is:
#CLI_OPTIONS="-Ws"
CLI_OPTIONS="-Ws"
#Specify an alternate configuration file. The default is:
#CONFIG_FILE=/etc/haproxy/haproxy.conf
CONFIG_FILE=/etc/haproxy/haproxy.conf
#File used to track process IDs. The default is:
#PID_FILE=/var/run/haproxy-2.2.2.pid
PID_FILE=/var/run/haproxy-2.2.2.pid

Teraz pozostaje tylko przygotowanie pliku /etc/haproxy/haproxy.conf według potrzeb oraz przeładować usługi:

systemctl daemon-reload
systemctl enable haproxy-2.2.2
systemctl start haproxy-2.2.2

Opcjonalnie można utworzyć symboliczny link:

ln -s /opt/haproxy-2.2.2/sbin/haproxy /sbin/haproxy

Na sam koniec nie pozostaje nic innego jak sprawdzić wersję oraz status usługi:

Jak widać – wszystko działa jak należy w najnowszej wersji – wspieranej przez najbliższe 5 lat.

Piotr Berent

Piotr Berent od 2002 w pocie czoła pracujący w środowisku IT, obecnie freelancer - Inżynier Systemowy. Entuzjasta wirtualizacji, automatyzacji i rozwiązań opartych o narzędzia open-source.

2 komentarze

  1. Łukasz pisze:

    Zamiast USE=LUA=1 powinno raczej być USE_LUA=1 – jeden znak a tyle zmienia 🙂

    • Piotr Berent pisze:

      Dzięki,
      Dostaniesz order 🙂 Jak kiedyś zaczniemy zarabiać 🙂

      Przynajmniej ktoś czyta nasze teksty ze zrozumieniem 😉

Leave a Reply