Koormuse tasakaalustamine Zimbra avatud lähtekoodiga väljaandes HAProxy abil

Suuremahuliste Zimbra OSE infrastruktuuride ehitamisel on üks peamisi ülesandeid õige koormuse tasakaalustamine. Lisaks sellele, et see suurendab teenuse tõrketaluvust, on ilma koormuse tasakaalustamiseta võimatu tagada kõigile kasutajatele teenuse samasugune reageerimisvõime. Selle probleemi lahendamiseks kasutatakse koormuse tasakaalustajaid – tarkvara- ja riistvaralahendusi, mis jagavad päringuid serverite vahel ümber. Nende hulgas on üsna primitiivseid, nagu RoundRobin, mis saadab iga järgmise päringu lihtsalt loendis järgmisele serverile, ja on ka täiustatumaid, näiteks HAProxy, mida kasutatakse laialdaselt suure koormusega andmetöötluse infrastruktuurides. mitmeid olulisi eeliseid. Vaatame, kuidas saate HAProxy koormuse tasakaalustaja ja Zimbra OSE koos töötama.

Koormuse tasakaalustamine Zimbra avatud lähtekoodiga väljaandes HAProxy abil

Seega antakse meile vastavalt ülesande tingimustele Zimbra OSE infrastruktuur, millel on kaks Zimbra puhverserverit, kaks LDAP ja LDAP Replica serverit, neli 1000 postkastiga meilisalvestusruumi ja kolm MTA-d. Arvestades, et tegemist on meiliserveriga, saab see tasakaalustamist vajavat kolme tüüpi liiklust: HTTP veebikliendi allalaadimiseks ning POP ja SMTP e-kirjade saatmiseks. Sel juhul suunatakse HTTP-liiklus Zimbra puhverserveritesse IP-aadressidega 192.168.0.57 ja 192.168.0.58 ning SMTP-liiklus MTA-serveritesse IP-aadressidega 192.168.0.77 ja 192.168.0.78.

Nagu juba mainitud, kasutame päringute ühtlase jaotuse tagamiseks serverite vahel HAProxy koormuse tasakaalustajat, mis töötab Zimbra infrastruktuuri sissepääsusõlmes, kus töötab Ubuntu 18.04. Haproxy installimine sellele operatsioonisüsteemile toimub käsu abil sudo apt-get install haproxy. Pärast seda peate faili sisestama /etc/default/haproxy muuta parameetrit LUBATUD = 0 edasi LUBATUD = 1. Nüüd, veendumaks, et haproxy töötab, sisestage lihtsalt käsk teenuse haproxy. Kui see teenus töötab, selgub see käsu väljundist.

HAProxy üks peamisi puudusi on see, et vaikimisi ei edasta ta ühendava kliendi IP-aadressi, asendades selle enda omaga. See võib põhjustada olukordi, kus ründajate saadetud kirju ei saa IP-aadressi järgi tuvastada, et neid musta nimekirja lisada. Selle probleemi saab siiski lahendada. Selleks peate faili redigeerima /opt/zimbra/common/conf/master.cf.in Postfixiga serverites ja lisage sellele järgmised read:

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

Seoses sellega avame pordid 26, 466 ja 588, mis hakkavad HAProxylt sissetulevat liiklust vastu võtma. Pärast failide salvestamist peaksite taaskäivitama Postfixi kõigis serverites, kasutades käsku zmmtactl restart.

Pärast seda alustame HAProxy seadistamist. Selleks looge esmalt seadete failist varukoopia cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Seejärel avage lähtefail tekstiredaktoris /etc/haproxy/haproxy.cfg ja alustage sellele samm-sammult vajalike sätete lisamist. Esimene plokk on logisid võtva serveri lisamine, samaaegsete ühenduste maksimaalse lubatud arvu määramine, samuti kasutaja nime ja grupi määramine, kuhu käivitav protsess kuulub.

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

Arv 5000 samaaegset ühendust ilmus põhjusega. Kuna meie infrastruktuuris on 4000 postkasti, siis peame arvestama võimalusega, et nad kõik pääsevad korraga ligi oma töömeilile. Lisaks on vaja jätta väike reserv juhuks, kui nende arv suureneb.

Nüüd lisame vaikesätetega ploki:

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

See plokk määrab maksimaalse ajalõpu, mille jooksul klient ja server ühenduse aegumisel sulgevad, ning määrab ka HAProxy töörežiimi. Meie puhul töötab koormuse tasakaalustaja TCP-režiimis, see tähendab, et see lihtsalt edastab TCP-pakette ilma nende sisu analüüsimata.

Järgmisena lisame erinevate portide ühenduste reeglid. Näiteks kui porti 25 kasutatakse SMTP-ühenduste ja kirjade jaoks, siis on mõttekas suunata sellega ühendused meie infrastruktuuris saadaolevatele MTA-dele. Kui ühendus on pordis 80, siis on see http-päring, mis tuleb Zimbra puhverserverile edastada.

Reegel pordi 25 jaoks:

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

Reegel pordi 465 jaoks:

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

Reegel pordi 587 jaoks:

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

Reegel pordi 80 jaoks:

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

Reegel pordi 443 jaoks:

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

Pange tähele, et TCP-pakettide MTA-le edastamise reeglites on nende aadresside kõrval parameeter saada-puhverserver. See on vajalik selleks, et vastavalt muudatustele, mida me varem Postfixi sätetes tegime, saadetakse koos TCP-pakettidega ka selle saatja algne IP-aadress.

Nüüd, kui HAProxys on kõik vajalikud muudatused tehtud, saate käsu abil teenuse taaskäivitada teenuse haproxy taaskäivitamine ja hakka seda kasutama.

Kõigi Zextras Suite'i puudutavate küsimuste korral võite pöörduda Zextras esindaja Ekaterina Triandafilidi poole e-posti teel [meiliga kaitstud]

Allikas: www.habr.com

Lisa kommentaar