Balancimi i ngarkesës në Zimbra me burim të hapur Edition duke përdorur HAProxy

Një nga detyrat kryesore kur ndërtohen infrastruktura në shkallë të gjerë Zimbra OSE është balancimi i duhur i ngarkesës. Përveç faktit që rrit tolerancën ndaj gabimeve të shërbimit, pa balancim të ngarkesës është e pamundur të sigurohet e njëjta përgjegjshmëri e shërbimit për të gjithë përdoruesit. Për të zgjidhur këtë problem, përdoren balancuesit e ngarkesës - zgjidhje softuerike dhe harduerike që rishpërndajnë kërkesat midis serverëve. Midis tyre ka mjaft primitive, si RoundRobin, i cili thjesht dërgon çdo kërkesë pasuese në serverin tjetër në listë, dhe ka edhe më të avancuara, për shembull HAProxy, i cili përdoret gjerësisht në infrastrukturat informatike me ngarkesë të lartë për shkak të një një numër avantazhesh domethënëse. Le të hedhim një vështrim se si mund ta bëni balancuesin e ngarkesës HAProxy dhe Zimbra OSE të punojnë së bashku.

Balancimi i ngarkesës në Zimbra me burim të hapur Edition duke përdorur HAProxy

Pra, sipas kushteve të detyrës, na jepet infrastruktura Zimbra OSE, e cila ka dy serverë Zimbra Proxy, dy serverë LDAP dhe LDAP Replica, katër depo postare me 1000 kuti postare secila dhe tre MTA. Duke qenë se kemi të bëjmë me një server mail, ai do të marrë tre lloje trafiku që kanë nevojë për balancim: HTTP për shkarkimin e klientit në internet, si dhe POP dhe SMTP për dërgimin e emailit. Në këtë rast, trafiku HTTP do të shkojë te serverët Zimbra Proxy me adresat IP 192.168.0.57 dhe 192.168.0.58, dhe trafiku SMTP do të shkojë te serverët MTA me adresat IP 192.168.0.77 dhe 192.168.0.78.

Siç u përmend tashmë, për të siguruar që kërkesat të shpërndahen në mënyrë të barabartë midis serverëve, ne do të përdorim balancuesin e ngarkesës HAProxy, i cili do të funksionojë në nyjen hyrëse të infrastrukturës Zimbra që ekzekuton Ubuntu 18.04. Instalimi i haproksi në këtë sistem operativ bëhet duke përdorur komandën sudo apt-get install haproxy. Pas kësaj ju duhet në dosje /etc/default/haproxy ndryshimi i parametrit E ÇAJTSON = 0 mbi E ÇAJTSON = 1. Tani, për t'u siguruar që haproksi po funksionon, thjesht futni komandën shërbim harproksi. Nëse ky shërbim po funksionon, kjo do të jetë e qartë nga dalja e komandës.

Një nga disavantazhet kryesore të HAProxy është se si parazgjedhje nuk transmeton adresën IP të klientit lidhës, duke e zëvendësuar atë me të tijën. Kjo mund të çojë në situata ku emailet e dërguara nga sulmuesit nuk mund të identifikohen nga adresa IP për ta shtuar atë në listën e zezë. Megjithatë, kjo çështje mund të zgjidhet. Për ta bërë këtë, ju duhet të redaktoni skedarin /opt/zimbra/common/conf/master.cf.in në serverët me Postfix dhe shtoni linjat e mëposhtme në të:

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

Për shkak të kësaj, ne do të hapim portet 26, 466 dhe 588, të cilat do të marrin trafikun në hyrje nga HAProxy. Pasi të jenë ruajtur skedarët, duhet të rinisni Postfix në të gjithë serverët duke përdorur komandën e rinisjes zmmtactl.

Pas kësaj, le të fillojmë të konfigurojmë HAProxy. Për ta bërë këtë, së pari krijoni një kopje rezervë të skedarit të cilësimeve cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Pastaj hapni skedarin burim në një redaktues teksti /etc/haproxy/haproxy.cfg dhe filloni t'i shtoni cilësimet e nevojshme hap pas hapi. Blloku i parë do të jetë shtimi i një serveri që merr regjistrat, duke vendosur numrin maksimal të lejuar të lidhjeve të njëkohshme, si dhe duke specifikuar emrin dhe grupin e përdoruesit të cilit do t'i përkasë procesi ekzekutiv.

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

Shifra e 5000 lidhjeve të njëkohshme u shfaq për një arsye. Meqenëse kemi 4000 kuti postare në infrastrukturën tonë, duhet të shqyrtojmë mundësinë që të gjithë të kenë akses në emailin e tyre të punës në të njëjtën kohë. Përveç kësaj, është e nevojshme të lihet një rezervë e vogël në rast se numri i tyre rritet.

Tani le të shtojmë një bllok me cilësimet e paracaktuara:

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

Ky bllok cakton kohën maksimale për klientin dhe serverin për të mbyllur lidhjen kur skadon, dhe gjithashtu cakton mënyrën e funksionimit të HAProxy. Në rastin tonë, balancuesi i ngarkesës funksionon në modalitetin TCP, domethënë thjesht transmeton paketat TCP pa analizuar përmbajtjen e tyre.

Më pas do të shtojmë rregullat për lidhjet në porte të ndryshme. Për shembull, nëse porti 25 përdoret për lidhjet SMTP dhe postën, atëherë ka kuptim t'i përcillni lidhjet me të në MTA të disponueshme në infrastrukturën tonë. Nëse lidhja është në portin 80, atëherë kjo është një kërkesë http që duhet të përcillet te Zimbra Proxy.

Rregulli për portin 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

Rregulli për portin 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

Rregulli për portin 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

Rregulli për portin 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

Rregulli për portin 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

Ju lutemi vini re se në rregullat për përcjelljen e paketave TCP në MTA, pranë adresave të tyre ka një parametër dërgo-proxy. Kjo është e nevojshme në mënyrë që, në përputhje me ndryshimet që kemi bërë më parë në cilësimet e Postfix, adresa IP origjinale e dërguesit të saj të dërgohet së bashku me paketat TCP.

Tani që të gjitha ndryshimet e nevojshme janë bërë në HAProxy, mund ta rinisni shërbimin duke përdorur komandën rinisja e shërbimit haproksi dhe filloni ta përdorni.

Për të gjitha pyetjet në lidhje me Zextras Suite, mund të kontaktoni Përfaqësuesen e Zextras Ekaterina Triandafilidi me e-mail [email mbrojtur]

Burimi: www.habr.com

Shto një koment