HAProxy je bezplatný nástroj pro vyrovnávání zatížení a proxy server s vysokou dostupností HTTP/TCP. Šíří požadavky mezi více serverů, aby se zmírnily problémy vyplývající z selhání jediného serveru. HA Proxy používá řada vysoce profilovaných webů včetně GitHub, Bitbucket, Stack Overflow, Reddit, Tumblr, Twitter a Tuenti a používá se v produktu OpsWorks od Amazon Web Services.
Zde v LinuxAPT, jako součást našich služeb správy serveru, pravidelně pomáháme našim zákazníkům provádět související konfigurační dotazy HAProxy.
V této souvislosti se podíváme na to, jak nainstalovat HAProxy na váš systém CentOS 8.
Postup instalace a konfigurace HAProxy na CentOS 8
1. Proveďte aktualizaci systému
Za prvé, začněme tím, že zajistíme, aby byl váš systém aktuální:
$ sudo clean all
$ sudo dnf update
2. Nainstalujte HAProxy do systému
HAProxy je k dispozici na výchozím CentOS 8, nyní použijte následující příkaz dnfa k instalaci HAProxy:
$ sudo dnf install haproxy
Dále musíme ověřit, že se HAProxy spustí pokaždé, když restartujeme náš server. Můžeme toho dosáhnout pomocí příkazu chkconfig níže:
$ chkconfig haproxy on
3. Nakonfigurujte HAProxy
Vytvoříme konfigurační soubor /etc/haproxy/haproxy.cfg obsahující potřebná nastavení a konfigurace:
$ sudo nano /etc/haproxy/haproxy.cfg
Do souboru zadejte následující:
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
stats socket /var/lib/haproxy/stats
ssl-default-bind-ciphers PROFILE=SYSTEM
ssl-default-server-ciphers PROFILE=SYSTEM
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
frontend main
bind *:5000
acl url_static path_beg -i /static /images /javascript /stylesheets
acl url_static path_end -i .jpg .gif .png .css .js
use_backend static if url_static
default_backend app
backend static
balance roundrobin
server static 127.0.0.1:4331 check
backend app
balance roundrobin
server app1 127.0.0.1:5001 check
server app2 127.0.0.1:5002 check
server app3 127.0.0.1:5003 check
server app4 127.0.0.1:5004 check
Podrobnosti o konfiguraci a další informace si můžete prohlédnout na této adrese URL. Jakmile nakonfigurujete HAProxy, je čas spustit službu:
$ sudo systemctl start haproxy
$ sudo systemctl enable haproxy
4. Nakonfigurujte bránu firewall
Přidáme HAProxy do firewallu CentOS 8 a aktualizujeme pravidla pomocí následujících příkazů:
$ sudo firewall-cmd --add-port=8088/tcp --permanent
$ sudo firewall-cmd --reload
5. Nakonfigurujte protokolování HAProxy
Chcete-li nakonfigurovat standardní protokolování HAProxy, upravte soubor /etc/rsyslog.conf a povolte příjem Syslog UDP na portu 514:
$ sudo nano /etc/rsyslog.conf
...
# Provides UDP syslog reception
# for parameters see http://www.rsyslog.com/doc/imudp.html
module(load="imudp") # needs to be done just once
input(type="imudp" port="514")
...
*.info;mail.none;authpriv.none;cron.none,local2.none /var/log/messages
local2.* /var/log/haproxy.log
...
Poté uložte konfigurační soubor a spusťte níže uvedený příkaz, abyste zkontrolovali případné chyby:
$ rsyslogd -N1
$ sudo systemctl restart rsyslog haproxy
6. Nakonfigurujte Apache X-Forwarded-For Logging na serverech backend
Nyní se přihlásíme k backendovým serverům a nakonfigurujeme Apache tak, aby protokoloval hlavičky X-Forwarded-For. Výchozí řádek, který měníme, je:
...
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
...
Upravte tento řádek tak, aby vypadal takto:
...
LogFormat "\"%{X-Forwarded-For}i\" %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
...
Uložte soubor a restartujte Apache:
$ apachectl configtest
$ sudo systemctl restart httpd
Jak testovat HAProxy Load Balancer?
Chcete-li ověřit, že je HAProxy schopno načítat požadavky HTTP, přejděte do prohlížeče a přistupte k HAProxy pomocí názvu hostitele nebo IP adresy.
Jak restartovat HAProxy?
Po konfiguraci vrstvy 4 nebo vrstvy 7 restartujte HAProxy pomocí následujícího příkazu:
$ systemctl restart haproxy
Úspěšný restart nebude mít za následek žádný výstup, což znamená, že HAProxy je v provozu se změnami, které jste právě implementovali.