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 -y
Dále nainstalujte HAProxy pomocí příkazu:
yum -y install haproxy
Uká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.bak
Dá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.conf
Chcete-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.conf
Vlož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 rsyslog
Dá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-release
Dále nainstalujte Nginx
yum install nginx -y
Uká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.bak
Dá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.96
Váš 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.