Acest tutorial va descrie felul in care se poate instala un load balancer pe doua noduri avand o configuratie activ/pasiv cu ajutorul Heartbeat si HAProxy.
Load balancer-ul va actiona intre doua sau mai multe Web Server-e Apache care pot servii acelasi continut. Acesta trimite cererile catre Web Server-e si verifica de asemenea starea lor. Daca unul dintre Web Server-e este "picat" atunci toate cererile vor fi redirectate automat catre Web Server-ele ramase.
Pe langa cele de mai sus cele doua load-balancer-e se monitorizeaza intre ele folosing hearbeat. Daca nodul master "pica" atunci nodul slave devine activ astfel utilizatorii nu vor simtii pierderea unuia dintre noduri ori pierderea serviciului web. HAProxy este de asemenea si "session-aware" ceea ce inseamna ca se poate folosi impreuna cu el orice aplicatie care se foloseste de sesiuni cu ar fi forumuri ori magazine virtuale.
1 Pregatire
Pentru acest tutorial trebuie mai intai facuta cate o instalare minimala fara GUI a sistemul de operare Fedora ori Centos pentru urmatoarele 4 masini:
1.1 Load Balancer 1
Hostname: ldb1.example.com
IP: 192.168.0.10
IP Comun: 192.168.0.20
1.2 Load Balancer 2
Hostname: ldb2.example.com
IP: 192.168.0.11
IP Comun: 192.168.0.20
1.3 Web Server 1
Hostname: http1.example.com
IP: 192.168.0.12
1.4 Web Server 2
Hostname: http2.example.com
IP: 192.168.0.13
2 HTTP1 & HTTP2
Ca Web Server-ele sa fie accesibile din exterior nu uitati ca trebuiesc deschise in firewall porturile 80 si 443 pe ambele Webserv-e. Comenzile pentru a face acest lucru posibil si permanent sunt:
iptables -A INPUT -p tcp -s 0/0 -m multiport --dports 80,443 -j ACCEPT iptables-save
2.2 Apache Configuration
HAProxy va functiona ca un proxy transparent astfel adresa IP va fi trimisa in campul "X-Forwarded-For" catre Web Server-e. Pentru ca Web Server-ele sa intregistreze corect in loguri adesa IP a celui care face cererea si nu adresa load balancer-ului trebuie sa modificam formatul log-ului, aceasta se tare se gaseste in fisierul de configuratie al Apache-ului si ea trebuie facuta pe ambele Web Server-e. Astfel editam :
vi /etc/httpd/conf/httpd.conf
si schimbam urmatoarele linii sa arate astfel:
[...]
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
[...]
Vom configura HAProxy sa verifice starea Web Server-elor facand de fiecare data cerere pentru fisierul check.txt. Pentru a optimiza marimea logurilor vom personaliza setarile pentru vhost-uri pe ambele Web Server-e astfel incat cererea pentru check.txt sa nu fie inregistrata.
In acest exemplu vhost-urile sunt configurate in fisierul /etc/httpd/conf/httpd.conf:
Adaugati urmatoarea linie in configuratia vhost-ului:
SetEnvIf Request_URI "^/check\.txt$" dontlog
mai adaugati exceptia (env=!dontlog) pe aceeasi linie dupa CustomLog. Un exemplu pentru primul virtual host poate arata in felul urmator:
NameVirtualHost 192.168.0.112:80ServerName webA.example.com ServerAdmin admin@example.com DocumentRoot /var/www/html/webA SetEnvIf Request_URI "^/check\.txt$" dontlog LogLevel warn ErrorLog /var/log/httpd/vhost_error.log CustomLog /var/log/httpd/vhost_access.log combined env=!dontlog
Acum mai trebuie doar sa cream fisierul check.txt in document root-ul primul virtual host:
touch /var/www/haproxy/html/webA
Prin urmatoarele 2 comenzi se va termina configuratia Web-Server-elor, astfel restartam serviciul si facem ca acesta sa porneasca in timpul boot-ari sistemului
/etc/init.d/httpd restart chkconfig httpd on
3 LDB1 & LDB2
3.1 Configurarea Firewall-ului
Conexiunile HTTP si HTTPS vor fi trimise corect intre Web Server-e daca daemon-ul heartbeat poate comunica corect intre noduri, astfel trebuie sa deschidem portul UDP 694 pe ambele load balacer-e folosind urmatoarele comenzi:
iptables -A INPUT -p udp -s 0/0 --dport 694 -j ACCEPT iptables -A INPUT -p tcp -s 0/0 -m multiport --dports 80,443 -j ACCEPT iptables-save
3.2 Pachete necesare pe cele doua Load Balancer-e
Instalarea pachetelor se va face cu yum:
yum -y install haproxy heartbeat
3.3 Configurarea HAProxy
cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg_orig
cat /dev/null > /etc/haproxy/haproxy.cfg
vi /etc/haproxy/haproxy.cfg
Continutul fisierului de configurare pe ambele load balacere-e trebuie sa fie urmatorul:
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 4096
#debug
#quiet
user haproxy
group haproxy
defaults
log global
mode http
option httplog
option dontlognull
retries 3
redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen webservers 192.168.0.20:80
mode http
stats enable
stats auth fedorauser:fedorapassword
balance roundrobin
cookie JSESSIONID prefix
option httpclose
option forwardfor
option httpchk HEAD /check.txt HTTP/1.0
server webA 192.168.0.12:80 cookie A check
server webB 192.168.0.13:80 cookie B check
Nota: Daca doriti sa aflati mai multe despre optiunile de configurare a HAProxy, va putei informa la adresele http://haproxy.1wt.eu/download/1.3/doc/haproxy-en.txt si http://haproxy.1wt.eu/download/1.2/doc/architecture.txt.
3.4 Configurarea Heartbeat
3.4.1 Pe ambele Load Balancer-e
Heartbeat va informa LDB1 si LDB2 ca trebuie sa asculte pe adresa comuna IP (192.168.0.20). In prima faza trebuie sa permitem HAProxy sa foloseasca adresa IP comuna:
vi /etc/sysctl.conf
Adaugati urmatoarele linii in fisier:
# Allow HAProxy shared IP net.ipv4.ip_nonlocal_bind = 1
Apoi rulati:
sysctl -p
Acum trebuie sa cream cele trei fisiere de configuratie pentru heartbeat.
vi /etc/ha.d/authkeys
Continutul fisierului ar trebuii sa arata astfel - trebuie sa inlocuti %auth_password% cu o parola aleasa de dumnevoastra. Daemon-ul heartbeat de pe ambele noduri ale load balancer-ului va folosi aceeasi parola pentru a se unul cu celalat.
auth 3 3 md5 %authpassword%
Schimbati drepturile pe fisier astfel incat doar root sa il poata accesa:
chmod 600 /etc/ha.d/authkeys
Urmatorul fisier va fi:
vi /etc/ha.d/haresources
Continutul acestui fisier trebuie sa arate astfel pe ldb1:
ldb1.example.com 192.168.0.120 haproxy
si pe ldb2
ldb2.example.com 192.168.0.20 haproxy
3.4.2 Pe Load Balancer-ul 1 (LDB1)
vi /etc/ha.d/ha.cf
Continutul acestui fisier trebuie sa arate astfel:
# # keepalive: how many seconds between heartbeats # keepalive 2 # # deadtime: seconds-to-declare-host-dead # deadtime 10 # # What UDP port to use for udp or ppp-udp communication? # udpport 694 bcast eth0 mcast eth0 225.0.0.1 694 1 0 ucast eth0 192.168.0.10 # What interfaces to heartbeat over? udp eth0 # # Facility to use for syslog()/logger (alternative to log/debugfile) # logfacility local0 # # Tell what machines are in the cluster # node nodename ... -- must match uname -n node ldb1.example.com node ldb2.example.com
Pe Load Balancer-ul 2 (LDB2)
vi /etc/ha.d/ha.cf
Continutul acestui fisier trebuie sa arate astfel:
# # keepalive: how many seconds between heartbeats # keepalive 2 # # deadtime: seconds-to-declare-host-dead # deadtime 10 # # What UDP port to use for udp or ppp-udp communication? # udpport 694 bcast eth0 mcast eth0 225.0.0.1 694 1 0 ucast eth0 192.168.0.11 # What interfaces to heartbeat over? udp eth0 # # Facility to use for syslog()/logger (alternative to log/debugfile) # logfacility local0 # # Tell what machines are in the cluster # node nodename ... -- must match uname -n node ldb1.example.com node ldb2.example.com
Apoi putem porni heartbeat pe ambele noduri:
/etc/init.d/heartbeat start
4 Failover Test
4.1 Pentru Web Server-e
Opriti unul dintre cele 2 web server-e si apoi faceti cereri HTTP catre ip-ul 192.168.0.20, astfel server-ul inca functional va trebui sa raspunda si sa va afiseze continutul.
4.2 Pentru Load Balancer
Opriti load balacer-ul activ LDB1 - imediat load balancer-ul pasiv LDB2 va prelua controlul.
5 HAProxy Statistics
HAProxy vine si cu o interfata web pentru statistici. Ea poate fi accesata din web browser via http://192.168.0.20/haproxy?stats. Intrati cu datele pe care le-ati introdus in fisierul de configurare HAProxy (in acest examplu va puteti autentifica cu username "fedorauser" si parola "fedorapassword". Daca nu aveti nevoie de statistici, puteti sterge liniile care incep cu "stats" din fisierul de configurare HAProxy de pe ambele load balancer-e.


Add new comment