Balansiranje opterećenja u Zimbra Open-Source izdanju pomoću HAProxy

Jedan od glavnih zadataka pri izgradnji velikih Zimbra OSE infrastruktura je ispravno balansiranje opterećenja. Osim što povećava toleranciju greške servisa, bez balansiranja opterećenja nemoguće je osigurati jednaku responzivnost servisa za sve korisnike. Za rješavanje ovog problema koriste se load balanceri - softverska i hardverska rješenja koja redistribuiraju zahtjeve između poslužitelja. Među njima ima dosta primitivnih, poput RoundRobina, koji svaki sljedeći zahtjev jednostavno šalje sljedećem poslužitelju na popisu, a ima i naprednijih, primjerice HAProxy, koji se široko koristi u visokoopterećenim računalnim infrastrukturama zbog niz značajnih prednosti. Pogledajmo kako možete natjerati HAProxy load balancer i Zimbra OSE da rade zajedno.

Balansiranje opterećenja u Zimbra Open-Source izdanju pomoću HAProxy

Dakle, prema uvjetima zadatka, dana nam je Zimbra OSE infrastruktura, koja ima dva Zimbra Proxyja, dva LDAP i LDAP Replica poslužitelja, četiri skladišta pošte s po 1000 poštanskih sandučića i tri MTA. S obzirom na to da se radi o poslužitelju e-pošte, on će primati tri vrste prometa koje treba balansirati: HTTP za preuzimanje web klijenta, kao i POP i SMTP za slanje e-pošte. U ovom slučaju, HTTP promet će ići na Zimbra Proxy poslužitelje s IP adresama 192.168.0.57 i 192.168.0.58, a SMTP promet će ići na MTA poslužitelje s IP adresama 192.168.0.77 i 192.168.0.78.

Kao što je već spomenuto, kako bismo osigurali ravnomjernu raspodjelu zahtjeva između poslužitelja, koristit ćemo HAProxy balanser opterećenja, koji će se izvoditi na ulaznom čvoru Zimbra infrastrukture koji pokreće Ubuntu 18.04. Instalacija haproxyja na ovaj operativni sustav vrši se pomoću naredbe sudo apt-get instalirajte haproxy. Nakon ovoga trebate u datoteku /etc/default/haproxy promijeniti parametar Omogućeno = 0 na Omogućeno = 1. Sada, kako biste bili sigurni da haproxy radi, samo unesite naredbu usluga haproxy. Ako je ova usluga pokrenuta, to će biti jasno iz izlaza naredbe.

Jedan od glavnih nedostataka HAProxyja je da prema zadanim postavkama ne prenosi IP adresu klijenta koji se povezuje, zamjenjujući je vlastitom. To može dovesti do situacija u kojima se e-pošta koju šalju napadači ne može identificirati prema IP adresi kako bi se dodala na crnu listu. Međutim, ovaj se problem može riješiti. Da biste to učinili, morate urediti datoteku /opt/zimbra/common/conf/master.cf.in na poslužiteljima s Postfixom i dodajte mu sljedeće retke:

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

Zbog toga ćemo otvoriti portove 26, 466 i 588 koji će primati dolazni promet s HAProxyja. Nakon što su datoteke spremljene, trebali biste ponovno pokrenuti Postfix na svim poslužiteljima pomoću naredbe zmmtactl restart.

Nakon toga, počnimo postavljati HAProxy. Da biste to učinili, prvo napravite sigurnosnu kopiju datoteke postavki cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Zatim otvorite izvornu datoteku u uređivaču teksta /etc/haproxy/haproxy.cfg i počnite mu dodavati potrebne postavke korak po korak. Prvi blok će biti dodavanje poslužitelja koji uzima zapise, postavljanje maksimalno dopuštenog broja istovremenih veza, kao i određivanje imena i grupe korisnika kojoj će pripadati proces koji se izvršava.

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

Brojka od 5000 istodobnih veza pojavila se s razlogom. Budući da u našoj infrastrukturi imamo 4000 poštanskih sandučića, moramo razmotriti mogućnost da će svi oni istovremeno pristupiti svojoj poslovnoj e-pošti. Osim toga, potrebno je ostaviti malu rezervu za slučaj da se njihov broj poveća.

Dodajmo sada blok sa zadanim postavkama:

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

Ovaj blok postavlja maksimalno vremensko ograničenje za klijenta i poslužitelja za zatvaranje veze kada ona istekne, a također postavlja način rada HAProxy. U našem slučaju, balanser opterećenja radi u TCP modu, odnosno jednostavno prenosi TCP pakete bez analize njihovog sadržaja.

Zatim ćemo dodati pravila za veze na različitim portovima. Na primjer, ako se port 25 koristi za SMTP veze i poštu, tada ima smisla proslijediti veze na njega MTA-ovima dostupnim u našoj infrastrukturi. Ako je veza na portu 80, onda je to http zahtjev koji treba proslijediti Zimbra Proxyju.

Pravilo za priključak 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

Pravilo za priključak 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

Pravilo za priključak 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

Pravilo za priključak 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

Pravilo za priključak 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

Imajte na umu da u pravilima za prosljeđivanje TCP paketa MTA-u pored njihovih adresa postoji parametar poslati-proxy. Ovo je neophodno kako bi se, u skladu s promjenama koje smo ranije napravili u postavkama Postfixa, izvorna IP adresa pošiljatelja poslala zajedno s TCP paketima.

Sada kada su napravljene sve potrebne promjene na HAProxy, možete ponovo pokrenuti uslugu pomoću naredbe servis haproxy ponovno pokretanje i počnite ga koristiti.

Za sva pitanja vezana uz Zextras Suite možete kontaktirati predstavnicu Zextrasa Ekaterinu Triandafilidi putem e-maila [e-pošta zaštićena]

Izvor: www.habr.com

Dodajte komentar