Giunsa ang Pag-setup sa HAProxy ingon Load Balancer alang sa Nginx sa CentOS 8


Aron masiguro ang labing kadaghan nga magamit sa aplikasyon sa web, scalability, ug taas nga pasundayag, kasagaran na karon nga ipatuman ang mga teknolohiya nga nagpaila sa redundancy, sama sa clustering sa server ug pagbalanse sa load. Pananglitan, ang pag-set up og cluster sa mga server nga ang tanan nagpadagan sa parehas nga (mga) aplikasyon ug dayon nag-deploy sa (mga) load balancer sa ilang atubangan aron maapod-apod ang trapiko.

Ang HAProxy usa ka open-source, gamhanan, taas nga performance, kasaligan, luwas ug kaylap nga gigamit nga high availability TCP/HTTP load balancer, proxy server ug SSL/TLS terminator nga gitukod para sa taas kaayo nga traffic web site. Masaligan kini nga nagdagan sa Linux, Solaris, FreeBSD, OpenBSD ingon man sa mga operating system sa AIX.

Gipakita niini nga giya kung unsaon pag-set up ang usa ka dedikado nga high availability load balancer nga adunay HAProxy sa CentOS 8 aron makontrol ang trapiko sa usa ka cluster sa NGINX web server. Gipakita usab niini kung giunsa ang pag-configure sa pagtapos sa SSL/TLS sa HAProxy.

Usa ka kinatibuk-an nga 4 nga mga server nga adunay gamay nga pag-install sa CentOS 8.

----------- HAProxy Server Setup ----------- 
HA Proxy Server - hostname: haproxy-server.tecmint.lan; IP: 10.42.0.247
Test Site Domain: www.tecmint.lan


----------- Client Web Servers Setup ----------- 
Web Server #1 - hostname: websrv1.tecmint.lan; IP: 10.42.0.200
Web Server #2 - hostname: websrv2.tecmint.lan; IP: 10.42.0.21
Web Server #3 - hostname: websrv3.tecmint.lan; IP: 10.42.0.34

Lakang 1: Pag-set up sa Nginx HTTP Server sa Client Machines

1. Pag-log in sa tanan nimong CentOS 8 client machines ug i-install ang Nginx web server gamit ang dnf package manager sama sa gipakita.

# dnf install Nginx

2. Sunod, sugdi ang serbisyo sa Nginx, sa pagkakaron, himoa kini nga awtomatiko nga magsugod sa system boot ug kumpirmahi nga kini anaa na ug nagdagan pinaagi sa pagsusi sa status niini, gamit ang systemctl commands (buhata kini sa tanan nga mga makina sa kliyente).

# systemctl start nginx
# systemctl enable nginx
# systemctl status nginx

3. Usab, kung ang serbisyo sa firewalld nagdagan sa tanan nga mga makina sa kliyente (nga mahimo nimong susihon pinaagi sa pagpadagan sa systemctl magsugod firewalld), kinahanglan nimong idugang ang mga serbisyo sa HTTP ug HTTPS sa pag-configure sa firewall aron tugutan ang mga hangyo gikan sa load balancer nga moagi sa firewall ngadto sa Nginx web servers. Unya i-reload ang serbisyo sa firewalld aron mabuhat ang mga bag-ong pagbag-o (buhata kini sa tanan nga mga makina sa kliyente).

# firewall-cmd --zone=public --permanent --add-service=http
# firewall-cmd --zone=public --permanent --add-service=https
# firewall-cmd --reload

4. Sunod, ablihi ang usa ka web browser sa imong lokal nga mga makina ug sulayi kung ang pag-instalar sa Nginx maayo ba. Gamita ang IP sa kliyente sa pag-navigate, sa higayon nga makita nimo ang pahina sa pagsulay sa Nginx, kini nagpasabut nga ang web server nga na-install sa makina sa kliyente nagtrabaho sa husto.

5. Sunod, kinahanglan namong maghimo ug mga panid sa pagsulay sa mga makina sa kliyente nga among gamiton unya sa pagsulay sa HAProxy setup.

----------- Web Server #1 ----------- 
# cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
# echo "Showing site from websrv1.tecmint.lan"> /usr/share/nginx/html/index.html

----------- Web Server #2 ----------- 
# cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
# echo "Showing site from websrv2.tecmint.lan"> /usr/share/nginx/html/index.html

----------- Web Server #3 ----------- 
# cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
# echo "Showing site from websrv3.tecmint.lan"> /usr/share/nginx/html/index.html

Lakang 2: Pag-instalar ug Pag-configure sa HAProxy Server sa CentOS 8

6. Karon i-install ang HAProxy package sa HAProxy server pinaagi sa pagpadagan sa mosunod nga sugo.

# dnf install haproxy

7. Sunod, sugdi ang serbisyo sa HAProxy, i-enable kini nga auto-start sa system boot ug verify ang status niini.

# systemctl start haproxy
# systemctl enable haproxy
# systemctl status haproxy

8. Karon atong i-configure ang HAProxy gamit ang mosunod nga configuration file.

# vi /etc/haproxy/haproxy.cfg

Ang configuration file gibahin ngadto sa upat ka dagkong mga seksyon.

  • global settings – nagtakda sa process-wide parameters.
  • mga default - kini nga seksyon nagtakda sa mga default nga parameter alang sa tanan nga uban nga mga seksyon pagkahuman sa deklarasyon niini.
  • frontend – kini nga seksyon naghulagway sa usa ka set sa mga listening socket nga nagdawat sa mga koneksyon sa kliyente.
  • Backend – kini nga seksyon naghulagway sa usa ka set sa mga server diin ang proxy magkonektar sa pagpasa sa umaabot nga mga koneksyon.

Aron masabtan ang mga opsyon ubos sa global settings ug defaults, basaha ang HAProxy documentation (link nga gihatag sa katapusan sa artikulo). Alang niini nga giya, among gamiton ang mga default.

9. Ang HAProxy kung ma-deploy na adunay dakong papel sa imong imprastraktura sa IT, busa ang pag-configure sa pag-log alang niini usa ka batakang kinahanglanon; kini nagtugot kanimo nga makakuha og mga panabut bahin sa matag koneksyon sa imong backend web server.

Ang log parameter (gipasiugda sa mosunod nga screenshot) nagpahayag sa usa ka global Syslog server (sama sa rsyslog ang default sa CentOS) nga makadawat og mga mensahe sa log. Labaw sa usa ka server ang mahimong ipahayag dinhi.

Ang default configuration nagpunting sa localhost (127.0.0.1) ug local2 mao ang default facility code nga gigamit sa pag-ila sa HAProxy log messages ubos sa rsyslog.

10. Sunod, kinahanglan nimo isulti sa rsyslog server kung giunsa pagdawat ug pagproseso ang mga mensahe sa log sa HAProxy. Ablihi ang rsyslog configuration file ngadto sa /etc/rsyslog.conf o paghimo ug bag-ong file sulod sa /etc/rsyslog.d directory, pananglitan /etc/rsyslog.d/haproxy.conf.

# vi /etc/rsyslog.d/haproxy.conf

Kopyaha ug idikit ang mosunod nga configuration aron makolekta ang log gamit ang UDP sa default port 514.

$ModLoad imudp 
$UDPServerAddress 127.0.0.1 
$UDPServerRun 514 

Idugang usab kini nga mga linya sa pagtudlo sa rsyslog sa pagsulat sa duha ka separado nga mga file sa log base sa kagrabe, diin ang local2 mao ang code sa pasilidad nga gihubit sa HAProxy configuration sa ibabaw.

local2.* 	/var/log/haproxy-traffic.log 
local2.notice 	/var/log/haproxy-admin.log

11. I-save ang file ug isira kini. Unya i-restart ang serbisyo sa rsyslog aron magamit ang bag-ong mga pagbag-o.

# systemctl restart rsyslog

12. Niini nga seksyon, among ipakita kung giunsa ang pag-configure sa front-end ug back-end nga mga proxy. Balik sa HAProxy configuration file ug usba ang default front-end ug backend nga mga seksyon sama sa mosunod. Dili kami moadto sa usa ka detalyado nga pagpatin-aw sa matag parameter, mahimo ka kanunay mag-refer sa opisyal nga dokumentasyon.

Ang mosunod nga configuration naghubit sa usa ka seksyon sa pagpamati nga gigamit sa pag-alagad sa HAProxy Stats nga panid. Ang bind parameter nag-assign sa tigpaminaw sa gihatag nga IP address (* para sa tanan niini nga kaso) ug port (9000).

Ang stats enable setting makapahimo sa statistics page nga ma-access gamit ang URI /stats (ie http://server_ip:9000/stats).

Ang stats auth setting kay gigamit para makadugang ug basic authentication sa pag-access sa page (puli sa haproxy ug [email  sa username ug password nga imong gusto).

listen stats
    bind *:9000
    stats enable
    stats hide-version
    stats uri /stats
    stats admin if LOCALHOST
    stats auth haproxy:[email 

13. Ang sunod nga configuration naghubit sa usa ka frontend nga seksyon nga gitawag og TL (mahimo nimong ihatag ang ngalan nga imong gusto). Ang parameter sa mode naghubit sa mode nga naglihok sa HAProxy.

Ang acl (Access Control List) nga parameter gigamit sa paghimo og desisyon base sa sulod nga gikuha gikan sa hangyo. Niini nga pananglitan, ang hangyo giisip nga yano nga HTTP kung wala kini gihimo sa SSL.

Unya ang http-request set-header setting gigamit sa pagdugang og HTTP header sa hangyo. Nakatabang kini sa pagpahibalo sa Nginx nga ang una nga hangyo gihimo sa HTTP (o pinaagi sa port 80).

Ang default_backend o use_backend nga direktiba naghubit sa mga backend server, sa kini nga kaso, gi-refer sa TL_web_servers.

Timan-i nga ang HAProxy magbalik ug \503 Service Unavailable error kung ang usa ka hangyo wala madala sa usa ka use_backend o default_backend nga direktiba.

frontend TL
    bind *:80
    mode http
    acl http  ssl_fc,not
    http-request set-header X-Forwarded-Protocol http if http
    default_backend TL_web_servers

14. Dayon kinahanglan natong ipasabot ang usa ka backend nga seksyon diin ang balanse nga setting naghubit kon giunsa pagpili sa HAProxy ang mga back-end nga mga server aron maproseso ang usa ka hangyo kung walay pamaagi sa pagpadayon nga nag-override sa maong pagpili.

Ang cookie nga direktiba makapahimo sa cookie-based nga pagpadayon, kini nagtudlo sa HAProxy sa pagpadala sa usa ka cookie nga ginganlag SERVERID ngadto sa kliyente ug sa pag-associate niini sa ID sa server nga naghatag sa unang tubag.

Ang direktiba sa server gigamit sa paghubit sa mga upstream server sa format nga sever_name (eg websrv1), server_IP:port ug mga kapilian.

Usa ka yawe nga kapilian mao ang pagsusi nga nagsulti sa HAProxy nga magpadayon sa pagsusi sa pagkaanaa sa usa ka server ug pagreport sa panid sa stats.

backend TL_web_servers
    mode http
    balance roundrobin
    option  httpchk HEAD /
    cookie SERVERUID insert indirect nocache
    server  websrv1 10.42.0.200:80 cookie websrv1 check
    server  websrv2 10.42.0.21:80  cookie websrv2 check
    server  websrv3 10.42.0.34:80  cookie websrv3 check

Ikomento ang bisan unsang ubang frontend ug backend nga mga seksyon sama sa gipakita sa screenshot nga nagsunod. I-save ang file ug isira kini.

15. Karon i-restart ang serbisyo sa HAProxy aron magamit ang bag-ong mga pagbag-o.

# systemctl restart haproxy

16. Sunod, siguroha nga ang HTTP (port 80) ug HTTPS (port 433) nga mga serbisyo giablihan sa firewall aron dawaton ang mga hangyo sa kliyente sama sa mosunod. Usab, ablihi ang port 9000 sa firewall para ma-access ang stats page ug i-reload ang mga setting sa firewall.

# firewall-cmd --zone=public --permanent --add-service=http
# firewall-cmd --zone=public --permanent –add-service=https
# firewall-cmd --zone=public --permanent --add-port=9000/tcp
# firewall-cmd --reload

Lakang 3: Pagsulay sa HAProxy Setup ug Viewing Statistics

17. Karon na ang panahon sa pagsulay sa setup sa HAPrxoy. Sa lokal nga desktop machine diin imong gi-access ang tanan nga mga server gikan, idugang ang mosunod nga linya sa /etc/hosts file aron magamit namo ang dummy site domain.

10.42.0.247  www.tecmint.lan

18. Dayon ablihi ang browser ug navigate gamit ang adres sa server o domain sa site.

http://10.42.0.247/
OR
http://www.tecmint.lan/

19. Aron maka-access sa HAProxy statistics page, gamita ang mosunod nga adres.

http://10.42.0.247:9000/stats

Dayon gamita ang username ug password nga imong gipasabot sa HAProxy configuration file (refer sa stats auth parameter).

Pagkahuman sa usa ka malampuson nga pag-login, moabut ka sa panid sa istatistika sa HAProxy nga nagpakita kanimo mga sukatan nga nagsakup sa kahimsog sa imong mga server, karon nga rate sa paghangyo, mga oras sa pagtubag, ug daghan pa.

Aron ipakita kung giunsa paglihok ang taho sa status bahin sa mga code sa kolor, gibutang namon ang usa sa mga back-end server.

Lakang 4: Pag-configure sa HTTPS sa HAProxy Gamit ang Self-signed SSL Certificate

20. Niining katapusang seksyon, among ipakita kung unsaon pag-configure ang SSL/TLS aron masiguro ang tanang komunikasyon tali sa HAProxy server ug kliyente. Ang HAProxy nagsuporta sa upat ka dagkong HTTPS configuration modes, apan alang niini nga giya, atong gamiton ang SSL/TLS offloading.

Sa SSL/TLS offloading mode, ang HAProxy nag-decipher sa trapiko sa kilid sa kliyente ug makonektar sa klaro nga trapiko sa mga backend server.

Magsugod kami pinaagi sa paghimo sa sertipiko ug yawe sama sa gipakita (tubaga ang mga pangutana sumala sa mga detalye sa imong kompanya sa panahon sa paghimo sa sertipiko, ingon gipasiugda sa screenshot).

# mkdir /etc/ssl/tecmint.lan
# cd /etc/ssl/tecmint.lan/
# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/tecmint.lan.key -out /etc/ssl/tecmint.lan.crt
# cd /etc/ssl/tecmint.lan/
# cat tecmint.crt tecmint.key >tecmint.pem
# ls -l

21. Sunod, ablihi ang HAProxy configuration file (/etc/haproxy/haproxy.cfg) ug i-edit ang front-end nga seksyon.

frontend TL
    bind *:80
    bind *:443 ssl crt /etc/ssl/tecmint.lan/tecmint.pem
    redirect  scheme  https  if  !{ ssl_fc }
    mode http
    acl http  ssl_fc,not
    acl https ssl_fc
    http-request set-header X-Forwarded-Protocol http if http
    http-request set-header X-Forwarded-Protocol https if https
    default_backend TL_web_servers

I-save ang file ug isira kini.

22. Dayon i-restart ang serbisyo sa HAProxy aron magamit ang bag-ong mga kausaban.

# systemctl restart haproxy.service

23. Sunod, pag-abli sa usa ka web browser ug pagsulay sa pag-access sa site sa makausa pa. Ang browser magpakita sa usa ka sayup tungod sa gipirmahan sa kaugalingon nga sertipiko, i-klik ang Advanced aron magpadayon.

Kana lang sa pagkakaron! Ang matag aplikasyon sa web adunay kaugalingon nga hugpong sa mga kinahanglanon, kinahanglan nimo nga magdesinyo ug mag-configure sa pagbalanse sa load aron mahiangay sa imong imprastraktura sa IT ug mga kinahanglanon sa aplikasyon.

Aron makakuha og dugang nga mga panabut sa pipila sa mga kapilian sa pag-configure nga gigamit niini nga giya, ug sa kasagaran kung giunsa paggamit ang HAProxy, tan-awa ang opisyal nga dokumentasyon sa bersyon sa negosyo sa HAProxy. Mahimo nimong i-post ang bisan unsang pangutana o hunahuna pinaagi sa porma sa feedback sa ubos.