Echilibrarea încărcăturii în Zimbra Open-Source Edition folosind HAProxy

Una dintre sarcinile principale în construirea infrastructurilor Zimbra OSE la scară largă este echilibrarea competentă a sarcinii. Pe lângă creșterea toleranței la erori a serviciului, fără echilibrarea sarcinii este imposibil să se asigure aceeași capacitate de răspuns a serviciului pentru toți utilizatorii. Pentru a rezolva această problemă, se folosesc echilibratori de încărcare - soluții software și hardware care redistribuie cererile între servere. Printre acestea, există atât unele destul de primitive, cum ar fi RoundRobin, care pur și simplu trimite fiecare cerere următoare către următorul server din listă, și există altele mai avansate, de exemplu, HAProxy, care este utilizat pe scară largă în infrastructurile de calcul foarte încărcate datorită o serie de avantaje semnificative. Să aruncăm o privire la modul în care echilibrul de încărcare HAProxy și Zimbra OSE pot lucra împreună.

Echilibrarea încărcăturii în Zimbra Open-Source Edition folosind HAProxy

Deci, conform termenilor problemei, ni se oferă infrastructura Zimbra OSE, care are două proxy Zimbra, două servere LDAP și LDAP Replica, patru magazine de e-mail cu câte 1000 de căsuțe poștale fiecare și trei MTA-uri. Având în vedere că avem de-a face cu un server de mail, acesta va primi trei tipuri de trafic care trebuie echilibrat: HTTP pentru descărcarea clientului web, precum și POP și SMTP pentru trimiterea de email. În acest caz, traficul HTTP va merge către serverele Zimbra Proxy cu adrese IP 192.168.0.57 și 192.168.0.58, iar traficul SMTP va merge către serverele MTA cu adrese IP 192.168.0.77 și 192.168.0.78.

După cum sa menționat deja, pentru a asigura o distribuție uniformă a cererilor între servere, vom folosi echilibrul de încărcare HAProxy, care va rula pe nodul de intrare al infrastructurii Zimbra care rulează Ubuntu 18.04. Instalarea haproxy pe acest sistem de operare se face folosind comanda sudo apt-get install haproxy. După aceea, este necesar în dosar /etc/default/haproxy modifica parametrul ACTIVAT = 0 pe ACTIVAT = 1. Acum, pentru a vă asigura că haproxy funcționează, trebuie doar să introduceți comanda serviciu haproxy. În cazul în care acest serviciu rulează, va fi clar din rezultatul comenzii.

Unul dintre principalele deficiențe ale HAProxy este că în mod implicit nu transmite adresa IP a clientului conectat, înlocuindu-l cu propria sa. Acest lucru poate duce la situații în care scrisorile trimise de atacatori nu pot fi identificate prin adresa IP pentru a le adăuga pe lista neagră. Cu toate acestea, această problemă poate fi rezolvată. Pentru a face acest lucru, trebuie să editați fișierul /opt/zimbra/common/conf/master.cf.in pe serverele Postfix și adăugați următoarele linii la acesta:

26      inet  n       -       n       -       1       postscreen
        -o postscreen_upstream_proxy_protocol=haproxy
 
466    inet  n       -       n       -       -       smtpd
%%uncomment SERVICE:opendkim%%  -o content_filter=scan:[%%zimbraLocalBindAddress%%]:10030
        -o smtpd_tls_wrappermode=yes
        -o smtpd_sasl_auth_enable=yes
        -o smtpd_client_restrictions=
        -o smtpd_data_restrictions=
        -o smtpd_helo_restrictions=
        -o smtpd_recipient_restrictions=
        -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
        -o syslog_name=postfix/smtps
        -o milter_macro_daemon_name=ORIGINATING
        -o smtpd_upstream_proxy_protocol=haproxy
%%uncomment LOCAL:postjournal_enabled%% -o smtpd_proxy_filter=[%%zimbraLocalBindAddress%%]:10027
%%uncomment LOCAL:postjournal_enabled%% -o smtpd_proxy_options=speed_adjust
 
588 inet n      -       n       -       -       smtpd
%%uncomment SERVICE:opendkim%%  -o content_filter=scan:[%%zimbraLocalBindAddress%%]:10030
        -o smtpd_etrn_restrictions=reject
        -o smtpd_sasl_auth_enable=%%zimbraMtaSaslAuthEnable%%
        -o smtpd_tls_security_level=%%zimbraMtaTlsSecurityLevel%%
        -o smtpd_client_restrictions=permit_sasl_authenticated,reject
        -o smtpd_data_restrictions=
        -o smtpd_helo_restrictions=
        -o smtpd_recipient_restrictions=
        -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
        -o syslog_name=postfix/submission
        -o milter_macro_daemon_name=ORIGINATING
        -o smtpd_upstream_proxy_protocol=haproxy
%%uncomment LOCAL:postjournal_enabled%% -o smtpd_proxy_filter=[%%zimbraLocalBindAddress%%]:10027
%%uncomment LOCAL:postjournal_enabled%% -o smtpd_proxy_options=speed_adjust

Din acest motiv, vom deschide porturile 26, 466 și 588, care vor primi trafic de intrare de la HAProxy. După ce fișierele au fost salvate, reporniți Postfix pe toate serverele folosind comanda zmmtactl restart.

După aceea, să începem configurarea HAProxy. Pentru a face acest lucru, creați mai întâi o copie de rezervă a fișierului de setări cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Apoi deschideți fișierul sursă într-un editor de text /etc/haproxy/haproxy.cfg și începeți să adăugați treptat setările necesare. Primul bloc va fi adăugarea unui server care preia jurnalele, setarea numărului maxim de conexiuni simultane permise, precum și specificarea numelui și grupului utilizatorului căruia îi va aparține procesul executabil.

global
    user daemon
    group daemon
    daemon
    log 127.0.0.1 daemon
    maxconn 5000
    chroot /var/lib/haproxy

Cifra de 5000 de conexiuni simultane a apărut cu un motiv. Deoarece există 4000 de cutii poștale în infrastructura noastră, este necesar să se prevadă posibilitatea ca toate să meargă la poșta de serviciu în același timp. În plus, este necesar să lăsați o marjă mică în cazul în care numărul acestora crește.

Acum să adăugăm un bloc cu setări implicite:

defaults
        timeout client 1m
        log global
        mode tcp
        timeout server 1m
        timeout connect 5s

Acest bloc setează timpul maxim de așteptare pentru client și server pentru a închide conexiunea atunci când expiră și setează, de asemenea, modul de funcționare HAProxy. În cazul nostru, echilibratorul de încărcare funcționează în modul TCP, adică pur și simplu transferă pachete TCP fără a le analiza conținutul.

În continuare, vom adăuga reguli pentru conexiunile pe diferite porturi. De exemplu, dacă portul 25 este utilizat pentru conexiuni SMTP și transfer de e-mail, atunci este logic să redirecționăm conexiunile către acesta către MTA-urile pe care le avem în infrastructura noastră. Dacă conexiunea este pe portul 80, atunci aceasta este o solicitare http care trebuie redirecționată către proxy-ul Zimbra.

Regula pentru portul 25:

frontend smtp-25
bind *:27
default_backend backend-smtp-25
 
backend backend-smtp-25
server mta1 192.168.0.77:26 send-proxy
server mta2 192.168.0.78:26 send-proxy

Regula pentru portul 465:

frontend smtp-465
bind *:467
default_backend backend-smtp-465

backend backend-smtp-465
server mta1 192.168.0.77:466 send-proxy
server mta2 192.168.0.78:466 send-proxy

Regula pentru portul 587:

frontend smtp-587
bind *:589
default_backend backend-smtp-587
 
backend backend-smtp-587
server mail1 192.168.0.77:588 send-proxy
server mail2 192.168.0.78:588 send-proxy

Regula pentru portul 80:

frontend http-80
bind    *:80
default_backend http-80
 
backend http-80
mode tcp
server zproxy1 192.168.0.57:80 check
server zproxy2 192.168.0.58:80 check

Regula pentru portul 443:

frontend https
bind  *:443
default_backend https-443
 
backend https-443
mode tcp
server zproxy1 192.168.0.57:80 check
server zproxy2 192.168.0.58:80 check

Vă rugăm să rețineți că în regulile de redirecționare a pachetelor TCP către MTA, lângă adresele acestora se află parametrul trimite-proxy. Acest lucru este necesar pentru ca, în conformitate cu modificările pe care le-am făcut mai devreme la setările Postfix, adresa IP originală a expeditorului său să fie trimisă și ea împreună cu pachetele TCP.

Acum că au fost făcute toate modificările necesare la HAProxy, puteți reporni serviciul cu comanda repornirea serviciului haproxy și începe să-l folosești.

Pentru toate întrebările legate de Zextras Suite, puteți contacta Reprezentantul Zextras Ekaterina Triandafilidi prin e-mail [e-mail protejat]

Sursa: www.habr.com

Adauga un comentariu