HAProxy nebo High Availability Proxy je open source software pro vyrovnávání zátěže TCP a HTTP a proxy server. HAProxy byl napsán Willy Tarreau v C, podporuje SSL, komprese, zachování, vlastní formáty protokolů a přepisování záhlaví. HAProxy je rychlý a lehký proxy server a nástroj pro vyrovnávání zatížení s malou paměťovou náročností a nízkým využitím CPU. Používají ho velké weby jako Github, StackOverflow, Reddit, Tumblr, Twitter a další. V posledních letech se stal nejoblíbenějším softwarovým nástrojem pro vyrovnávání zatížení a proxy serverem.
V tomto tutoriálu projdete instalací a konfigurací HAProxy na RHEL 8 / CentOS 8. Nainstalujeme HAProxy na jeden server a poté nainstalujeme webový server Nginx na ostatní servery. HAProxy bude fungovat jako vyvažovač zatížení pro webové servery Nginx.
V tomto tutoriálu se naučíte:
- Architektura a koncepty HAProxy
- Nakonfigurujte soubor hostitelů pro rozlišení názvů
- Nainstalujte a nakonfigurujte HAProxy
- Nainstalujte a nakonfigurujte Nginx
- Testování funkce Load Balancing
- Přístup k adrese URL statistiky HAProxy
Požadavky na software a použité konvence
Kategorie | Požadavky, konvence nebo použitá verze softwaru |
---|---|
Systém | RHEL 8 / CentOS 8 |
Software | HAProxy, Nginx |
Jiné | Privilegovaný přístup k vašemu systému Linux jako root nebo prostřednictvím sudo příkaz. |
Konvence | # – vyžaduje, aby dané linuxové příkazy byly spouštěny s právy root buď přímo jako uživatel root, nebo pomocí sudo příkaz$ – vyžaduje, aby dané linuxové příkazy byly spouštěny jako běžný neprivilegovaný uživatel |
Architektura a koncepty HAProxy
HAProxy může běžet ve dvou režimech:TCP režim Layer 4 a HTTP Mode Layer 7. V režimu Layer 4 TCP předává HAProxy RAW TCP pakety z klienta na aplikační servery. V režimu HTTP vrstvy 7 HAProxy analyzuje hlavičku HTTP, než je předá aplikačním serverům. V tomto tutoriálu použijeme Nginx jako webový server, který podporuje režim HTTP Layer 7.
Balance Algorithm je algoritmus, který používá HAProxy k výběru serveru při vyrovnávání zátěže. K dispozici jsou následující režimy:
Roundrobin
Toto je nejjednodušší balanční algoritmus. Každé nové připojení bude zpracováno dalším backendovým serverem. Pokud je dosaženo posledního backendového serveru v seznamu, začne znovu od začátku backendového seznamu.
Leastconn
Nové připojení bude zpracováno backendovým serverem s nejmenším počtem připojení. To je užitečné, když se čas a zatížení požadavků hodně liší.
Zdroj
Toto je pro pevné relace, IP klienta bude hashována, aby se určil backendový server, který přijal poslední požadavek z této IP. Takže IP A bude vždy zpracována backendem1 a IP B bude vždy zpracována banckend2, aby nedošlo k přerušení relací.
Nakonfigurujte soubor hostitelů pro rozlišení názvů
Přihlaste se k serveru nástroje pro vyrovnávání zatížení a upravte /etc/hosts
soubor a HAProxy loadbalancer, názvy hostitelů nginx1, nginx2. Zkopírujte stejný soubor na další dva uzly nginx a zkontrolujte síťové připojení pomocí příkazu ping.
# vim /etc/hosts
192.168.1.108 loadbalancer.example.com
192.168.1.104 nginx1.example.com
192.168.1.105 nginx2.example.com
Nainstalujte a nakonfigurujte HAProxy
HAProxy je k dispozici v úložišti RHEL 8 / CentOS 8, proto se přihlaste k serveru loadbalancer a nainstalujte balíček HAProxy pomocí tohoto příkazu yum.
# yum install haproxy
Po úspěšné instalaci můžete použít níže uvedený příkaz k ověření instalace.
# yum info haproxy
# yum info haproxy Updating Subscription Management repositories. Updating Subscription Management repositories. Last metadata expiration check: 0:06:03 ago on Sat 16 Mar 2019 11:40:24 PM +04. Installed Packages Name : haproxy Version : 1.8.14 Release : 1.el8 Arch : x86_64 Size : 4.1 M Source : haproxy-1.8.14-1.el8.src.rpm Repo : @System From repo : rhel-8-for-x86_64-appstream-beta-rpms Summary : HAProxy reverse proxy for high availability environments URL : http://www.haproxy.org/ License : GPLv2+ Description : HAProxy is a TCP/HTTP reverse proxy which is particularly suited for high : availability environments. Indeed, it can: : - route HTTP requests depending on statically assigned cookies : - spread load among several servers while assuring server persistence : through the use of HTTP cookies : - switch to backup servers in the event a main one fails : - accept connections to special ports dedicated to service monitoring : - stop accepting connections without breaking existing ones : - add, modify, and delete HTTP headers in both directions : - block requests matching particular patterns : - report detailed status to authenticated users from a URI : intercepted from the application
Po dokončení instalace přejděte do /etc/haproxy/
adresář a zálohujte původní konfigurační soubor.
# cd /etc/haproxy/ # cp haproxy.cfg haproxy.cfg.orig
Dále proveďte níže uvedené změny v konfiguračním souboru HAProxy haproxy.cfg
s kterýmkoli editorem.
#--------------------------------------------------------------------- # Example configuration for a possible web application. See the # full configuration options online. # # https://www.haproxy.org/download/1.8/doc/configuration.txt # #--------------------------------------------------------------------- #--------------------------------------------------------------------- # Global settings #--------------------------------------------------------------------- global # to have these messages end up in /var/log/haproxy.log you will # need to: # # 1) configure syslog to accept network log events. This is done # by adding the '-r' option to the SYSLOGD_OPTIONS in # /etc/sysconfig/syslog # # 2) configure local2 events to go to the /var/log/haproxy.log # file. A line like the following can be added to # /etc/sysconfig/syslog # # local2.* /var/log/haproxy.log # log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon # turn on stats unix socket stats socket /var/lib/haproxy/stats # utilize system-wide crypto-policies ssl-default-bind-ciphers PROFILE=SYSTEM ssl-default-server-ciphers PROFILE=SYSTEM #--------------------------------------------------------------------- # 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 stats bind loadbalancer.example.com: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 admin:admin # User and Password for login to the monitoring dashboard #stats admin if TRUE default_backend loadbalancer # This is optionally for monitoring backend #--------------------------------------------------------------------- # main frontend which proxys to the backends #--------------------------------------------------------------------- frontend loadbalancer bind loadbalancer.example.com:80 #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 option http-server-close option forwardfor default_backend loadbalancer #--------------------------------------------------------------------- # static backend for serving up images, stylesheets and such #--------------------------------------------------------------------- #backend static # balance roundrobin # server static 127.0.0.1:4331 check #--------------------------------------------------------------------- # round robin balancing between the various backends #--------------------------------------------------------------------- backend loadbalancer 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 nginx1.example.com 192.168.1.104:80 check # NGINX Server1 server nginx2.example.com 192.168.1.105:80 check # NGNIX Server2
Uložte tento konfigurační soubor a ukončete jej.
Nyní nakonfigurujeme démona rsyslog pro protokolování statistik HAProxy. Upravte soubor rsyslog.conf
aby rsyslog mohl používat UDP port 514. Otevřete konfigurační soubor rsyslog a odkomentujte řádky, abyste povolili připojení UDP.
# vim /etc/rsyslog.conf
module(load="imudp") # needs to be done just once input(type="imudp" port="514")
Uložte soubor s výše uvedenými změnami a ukončete. Poté vytvořte nový konfigurační soubor HAProxy pro rsyslog a přidejte do něj níže uvedené položky.
# cd /etc/rsyslog.d/ # vi haproxy.conf
local2.=info /var/log/haproxy-access.log # For Access Log local2.notice /var/log/haproxy-info.log # For Service Info - Backend, loadbalancer
Nyní restartujte rsyslog a poté spusťte službu HAProxy a přidejte HAProxy, aby se spustila při spouštění.
# systemctl restart rsyslog # systemctl start haproxy # systemctl enable haproxy
Nainstalujte a nakonfigurujte Nginx
Nginx je již součástí stávajícího repozitáře RHEL 8 / CentOS 8 a lze jej nainstalovat pomocí následujícího příkazu.
# yum install nginx
Po instalaci můžete instalaci ověřit pomocí tohoto příkazu.
# yum info nginx
# yum info nginx Updating Subscription Management repositories. Updating Subscription Management repositories. Last metadata expiration check: 0:06:14 ago on Sat 16 Mar 2019 11:40:24 PM +04. Installed Packages Name : nginx Epoch : 1 Version : 1.14.0 Release : 3.el8+1631+ba902cf0 Arch : x86_64 Size : 568 k Source : nginx-1.14.0-3.el8+1631+ba902cf0.src.rpm Repo : rhel-8-for-x86_64-appstream-beta-rpms Summary : A high performance web server and reverse proxy server URL : http://nginx.org/ License : BSD Description : Nginx is a web server and a reverse proxy server for HTTP, SMTP, POP3 and : IMAP protocols, with a strong focus on high concurrency, performance and low : memory usage.
Jakmile je Nginx nainstalován, přejděte do webového adresáře a změňte index.html
soubor podle toho. Ujistěte se, že na serveru nginx1 a nginx2 provádíte níže uvedené kroky.
# cd /usr/share/nginx/html # ls -lrth total 20K -rw-r--r--. 1 root root 2.8K Oct 31 2016 poweredby.png -rw-r--r--. 1 root root 368 Oct 31 2016 nginx-logo.png -rw-r--r--. 1 root root 3.7K Mar 16 20:39 50x.html -rw-r--r--. 1 root root 3.6K Mar 16 20:39 404.html -rw-r--r--. 1 root root 3.7K Mar 16 20:42 index.html
Dále přidejte Nginx, aby se spustil v době spouštění, a poté spusťte démona pomocí příkazů níže.
# systemctl enable nginx # systemctl start nginx
Testování funkce Load Balancing
Testování lze provést procházením a přístupem k loadbalanceru IP 192.168.1.108 (pro můj případ) a uvidíte, že jednou to jde do uzlu Nginx1 a podruhé to půjde do uzlu Nginx2 v kruhovém režimu.
Webová stránka na NGINX Node1. Webová stránka na NGINX Node2.
Můžete také zkontrolovat /var/log/haproxy-access.log
abyste získali podrobné informace o vyrovnávání zátěže.
Přístup k URL statistiky HAProxy
Přístup k řídicímu panelu pro HAProxy Statistical Report, který běží na portu 8080 s uživatelským jménem a heslem definovaným v haproxy.cfg
soubor.
http://192.168.1.108:8080/statsPřístup k URL statistik HAProxy. Dashboard statistiky HAProxy.
HAProxy funguje úspěšně a funguje jako vyvažovač zatížení pro dva webové servery Nginx.
Závěr
HAProxy nebo High Availability proxy je software s otevřeným zdrojovým kódem, který poskytuje vysokou dostupnost pro služby založené na TCP, funguje jako vyrovnávání zatížení HTTP a proxy server. Tento software je napsán v jazyce C a podporuje SSL, keep-alive a kompresi. HAProxy je správnou volbou pro každého, kdo potřebuje nástroj pro vyrovnávání zátěže a proxy server, který je rychlý a lehký, má malé nároky na paměť a nízké využití CPU. Haproxy může běžet v režimu Layer 4 TCP a Layer 7 HTTP. Nginx podporuje pouze režim HTTP Layer 7 s HAProxy. Pokud chcete použít režim TCP na 4. vrstvě, můžete použít jiné webové servery, jako je Apache. Na RHEL 8 / CentOS 8 Linux je HAProxy k dispozici ve výchozím úložišti. Snadno se instaluje a konfiguruje.