HAProxy, také známý jako High Availability Proxy, napsaný v C od Willyho Tarreaua, je rychlý a lehký nástroj pro vyrovnávání zatížení HTTP a proxy server. Má nízké využití procesoru a je způsobeno malými nároky na paměť. Nástroj pro vyrovnávání zatížení používají populární weby, jako je StackOverflow, Twitter, Github a Tumblr, abychom zmínili jen několik.
V této příručce vám ukážeme, jak nastavit HAProxy jako load balancer pro webový server Nginx na CentOS 7. Load balancer bude sedět před 2 webovými servery Nginx a spravedlivě distribuovat HTTP požadavky na servery.
Algoritmus vyvážení HAProxy
Toto je algoritmus používaný nástrojem pro vyrovnávání zátěže pro výběr webových serverů při distribuci zátěže.
1. Roundrobin
Toto je nejjednodušší z algoritmů. V zásadě bude každé nové připojení zpracováno dalším webovým serverem. Pokud máte například 4 back-end servery, každý z nich bude zpracovávat požadavky postupně. Po dosažení posledního webového serveru v seznamu se nástroj pro vyrovnávání zatížení spustí znovu od prvního webového serveru.
2. Lastconn
Zde bude nový požadavek zpracován serverem s nejmenším počtem připojení. To se hodí, když se zatížení a časy požadavků liší velkými odchylkami.
Začínáme
Chcete-li začít, proveďte předletový kontrolní seznam a ujistěte se, že máte následující.
1. Servery CentOS 7
| Název hostitele | IP adresa serveru | 
|---|---|
| vyvažovač zátěže | 173.82.168.96 | 
| web-server-1 | 173.82.2.236 | 
| web-server-2 | 173.82.94.57 | 
2. SSH přístup na všechny servery
Níže je grafické znázornění nastavení.
 
Krok 1:Konfigurace souboru /etc/hosts v nástroji pro vyrovnávání zatížení
Přihlaste se do nástroje pro vyrovnávání zatížení pomocí SSH a přidejte IP adresy a názvy hostitelů webových serverů Nginx, jak je znázorněno.
vim /etc/hosts
173.82.2.236    web-server-1
173.82.94.57    web-server-2
 
Uložte a ukončete textový editor vim.
 Dále se přihlaste ke každému z webových serverů (web-server-1 a web-server-2) a upravte /etc/hosts soubor tak, aby ukazoval na nástroj pro vyrovnávání zatížení.
173.82.168.96   load-balancer
Uložte a ukončete textový editor.
Krok 2:Nainstalujte a nakonfigurujte HAProxy na serveru pro vyrovnávání zatížení
Úložiště HAProxy je snadno dostupné v úložišti CentOS. Chcete-li nainstalovat a nastavit HAProxy, nejprve se přihlaste a aktualizujte systémová úložiště.
 yum update -yDále nainstalujte HAProxy pomocí příkazu:
yum -y install haproxyUkázkový výstup
 
Jakmile je instalace úspěšná a dokončena, přejděte do adresáře haproxy.
cd /etc/haproxy
 Zálohujte soubor haproxy.cfg soubor přejmenováním na haproxy.cfg.bak 
mv haproxy.cfg  haproxy.cfg.bakDále vytvořte nový konfigurační soubor HAproxy.
vim haproxy.cfg
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    log         127.0.0.1 local2     #Log configuration
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy             #Haproxy running under user and group "haproxy"
    group       haproxy
    daemon
    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
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
#---------------------------------------------------------------------
#HAProxy Monitoring Config
#---------------------------------------------------------------------
listen haproxy3-monitoring *:8080                #Haproxy Monitoring run on port 8080
    mode http
    option forwardfor
    option httpclose
    stats enable
    stats show-legends
    stats refresh 5s
    stats uri /stats                             #URL for HAProxy monitoring
    stats realm Haproxy\ Statistics
    stats auth Password123: Password123            #User and Password for login to the monitoring dashboard
    stats admin if TRUE
    default_backend app-main                    #This is optionally for monitoring backend
#---------------------------------------------------------------------
# FrontEnd Configuration
#---------------------------------------------------------------------
frontend main
    bind *:80
    option http-server-close
    option forwardfor
    default_backend app-main
#---------------------------------------------------------------------
# BackEnd round robin as balance algorithm
#---------------------------------------------------------------------
backend app-main
    balance roundrobin                                     #Balance algorithm
    option httpchk HEAD / HTTP/1.1\r\nHost:\ localhost    #Check the server application is up and healty - 200 status code
    server web-server-1 173.82.2.236:80 check                 #Nginx1
    server web-server-2 173.82.94.57:80 check                 #Nginx2
Poznamenejte si webové servery, které byly specifikovány v posledních 2 řádcích, jak je uvedeno ve výstupu.
Uložte a ukončete textový editor.
Dále nakonfigurujeme rsyslog démona pro protokolování statistik HAProxy.
 Upravte soubor rsyslog.conf aby rsyslog mohl používat UDP port 514.
vim /etc/rsyslog.confChcete-li povolit připojení UDP přes port 154, odkomentujte následující řádky.
$ModLoad imudp
$UDPServerRun 514
 
Uložte a ukončete textový editor.
Dále vytvořte nový konfigurační soubor HAProxy pro syslog.
vim  /etc/rsyslog.d/haproxy.confVložte následující konfiguraci
local2.=info     /var/log/haproxy-access.log    #For Access Log
local2.notice    /var/log/haproxy-info.log      #For Service Info - Backend, loadbalancer
Uložte a ukončete textový editor.
Pokračujte a restartujte rsyslog.
systemctl restart rsyslogDále spusťte a povolte spuštění Haproxy při spuštění.
systemctl start haproxy
systemctl enable haproxy
 
Chcete-li potvrdit, že HaProxy je v provozu, spusťte:
systemctl status haproxy
 
V dalším kroku nainstalujeme Nginx na naše webové servery.
Krok 3:Instalace a konfigurace Nginx
Jediným rozhodujícím krokem, který zbývá, je instalace Nginx na každý z našich webových serverů.
Nejprve však nainstalujte úložiště EPEL, jak je znázorněno
yum install epel-releaseDále nainstalujte Nginx
yum install nginx -yUkázkový výstup
 
 S nainstalovaným Nginx na obou serverech upravíme index.html soubory na každém z webových serverů Nginx, aby se vytvořil rozdíl mezi jednotlivými servery při simulaci pomocí nástroje pro vyrovnávání zatížení HAproxy.
Přejděte do adresáře html, jak je znázorněno:
cd /usr/share/nginx/html/Zálohujte soubor index.html
mv index.html index.html.bakDále vytvořte nový soubor index.html a vložte ukázkový obsah.
Pro webový server 1
echo "web-server-1. Hey ! This is your first web server" > index.html Pro webový server 2
echo "web-server-2. Hey ! This is your second web server" > index.html Dále spusťte Nginx na obou webových serverech a potvrďte, zda je služba spuštěna
systemctl start  nginx
systemctl status nginx
 
Testování vyvažování zátěže
Chcete-li ověřit, že vše proběhlo v pořádku, spusťte opakovaně následující příkaz.
curl 173.82.168.96Váš výstup by měl být podobný tomuto.
 
Jak můžete pozorně pozorovat, s každým dalším spuštěním příkazu curl se výstup střídá mezi prvním a druhým obsahem webového serveru Perfektní!
Nyní zkusme testování pomocí webového prohlížeče.
 https://load-balancer-IP-address 
Tím se zobrazí obsah na kterémkoli z webových serverů, v tomto případě web-server-2.
 
Nyní zkuste obnovit jednou nebo dvakrát a výstup bude ukazovat na druhý webový server, v tomto případě web-server-1.
 
Úžasný! To potvrzuje, že náš nástroj pro vyrovnávání zatížení je schopen spravedlivě distribuovat požadavky HTTP mezi naše webové servery.
Chcete-li získat další statistiky prohlížeče pro vyrovnávání zatížení, přejděte na následující adresu URL
https://load-balancer-IP:8080/stats
 Použijte Password123 jako uživatelské jméno a heslo, jak jsme definovali v haproxy.cfg konfigurační soubor.
 
Toto shrnuje tento návod, jak nastavit HAProxy load balancer pro Nginx na CentOS 7. Neváhejte to vyzkoušet a sdílejte tento návod na svých sociálních sítích. Jako vždy oceníme vaši zpětnou vazbu.