Apkrovos balansavimas Zimbra atvirojo kodo leidime naudojant HAProxy

Viena iš pagrindinių užduočių kuriant didelio masto Zimbra OSE infrastruktūrą yra tinkamas apkrovos balansavimas. Be to, kad tai padidina paslaugos atsparumą gedimams, be apkrovos balansavimo neįmanoma užtikrinti vienodo paslaugos reagavimo visiems vartotojams. Šiai problemai išspręsti naudojami apkrovos balansuotojai – programinės ir techninės įrangos sprendimai, perskirstantys užklausas tarp serverių. Tarp jų yra gana primityvių, tokių kaip RoundRobin, kuris tiesiog siunčia kiekvieną paskesnę užklausą kitam sąraše esančiam serveriui, taip pat yra ir pažangesnių, pavyzdžiui, HAProxy, kuri plačiai naudojama didelės apkrovos skaičiavimo infrastruktūrose dėl daug reikšmingų pranašumų. Pažiūrėkime, kaip galite priversti HAProxy apkrovos balansavimo įrenginį ir Zimbra OSE veikti kartu.

Apkrovos balansavimas Zimbra atvirojo kodo leidime naudojant HAProxy

Taigi, pagal užduoties sąlygas, mums duota Zimbra OSE infrastruktūra, kurioje yra du Zimbra Proxy, du LDAP ir LDAP Replica serveriai, keturios pašto saugyklos po 1000 pašto dėžučių ir trys MTA. Atsižvelgiant į tai, kad turime reikalų su pašto serveriu, jis gaus trijų tipų srautą, kurį reikia subalansuoti: HTTP žiniatinklio klientui atsisiųsti, taip pat POP ir SMTP el. paštui siųsti. Tokiu atveju HTTP srautas bus nukreiptas į Zimbra Proxy serverius, kurių IP adresai yra 192.168.0.57 ir 192.168.0.58, o SMTP srautas – į MTA serverius, kurių IP adresai yra 192.168.0.77 ir 192.168.0.78.

Kaip jau minėta, norėdami užtikrinti, kad užklausos būtų tolygiai paskirstytos tarp serverių, naudosime HAProxy apkrovos balansavimo priemonę, kuri veiks Zimbra infrastruktūros įėjimo mazge, kuriame veikia Ubuntu 18.04. Haproxy įdiegimas šioje operacinėje sistemoje atliekamas naudojant komandą sudo apt-get install haproxy. Po to jums reikia į failą /etc/default/haproxy pakeisti parametrą ĮJUNGTA = 0 apie ĮJUNGTA = 1. Dabar, norėdami įsitikinti, kad haproxy veikia, tiesiog įveskite komandą paslaugų haproxy. Jei ši paslauga veikia, tai bus aišku iš komandos išvesties.

Vienas iš pagrindinių HAProxy trūkumų yra tai, kad pagal nutylėjimą jis neperduoda jungiančio kliento IP adreso, pakeisdamas jį savo. Tai gali sukelti situacijas, kai užpuolikų siunčiamų el. laiškų negalima atpažinti pagal IP adresą, kad būtų galima įtraukti juos į juodąjį sąrašą. Tačiau šią problemą galima išspręsti. Norėdami tai padaryti, turite redaguoti failą /opt/zimbra/common/conf/master.cf.in serveriuose su Postfix ir pridėkite prie jo šias eilutes:

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

Dėl to atidarysime 26, 466 ir 588 prievadus, kurie priims įeinantį srautą iš HAProxy. Išsaugoję failus, turėtumėte iš naujo paleisti Postfix visuose serveriuose naudodami komandą zmmtactl restart.

Po to pradėkime HAProxy sąranką. Norėdami tai padaryti, pirmiausia sukurkite atsarginę nustatymų failo kopiją cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Tada atidarykite šaltinio failą teksto rengyklėje /etc/haproxy/haproxy.cfg ir pradėkite žingsnis po žingsnio pridėti reikiamus nustatymus. Pirmasis blokas bus serverio, kuris priima žurnalus, pridėjimas, didžiausias leistinas vienu metu jungiamų prisijungimų skaičius, taip pat vartotojo, kuriam priklausys vykdomasis procesas, vardas ir grupė.

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

5000 jungčių vienu metu atsirado dėl priežasties. Kadangi savo infrastruktūroje turime 4000 pašto dėžučių, turime apsvarstyti galimybę, kad jos visos vienu metu pasieks savo darbo el. Be to, būtina palikti nedidelį rezervą, jei jų skaičius padidėtų.

Dabar pridėkime bloką su numatytaisiais nustatymais:

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

Šis blokas nustato maksimalų skirtąjį laiką, per kurį klientas ir serveris turi uždaryti ryšį, kai jis baigiasi, taip pat nustato HAProxy veikimo režimą. Mūsų atveju apkrovos balansavimo priemonė veikia TCP režimu, tai yra tiesiog perduoda TCP paketus, neanalizuodamas jų turinio.

Toliau pridėsime jungčių įvairiuose prievaduose taisykles. Pavyzdžiui, jei 25 prievadas naudojamas SMTP ryšiams ir paštui, prasminga persiųsti ryšius į jį į mūsų infrastruktūroje esančius MTA. Jei ryšys yra per 80 prievadą, tai yra http užklausa, kurią reikia persiųsti į Zimbra Proxy.

25 prievado taisyklė:

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

465 prievado taisyklė:

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

587 prievado taisyklė:

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

80 prievado taisyklė:

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

443 prievado taisyklė:

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

Atkreipkite dėmesį, kad TCP paketų persiuntimo į MTA taisyklėse šalia jų adresų yra parametras siųsti-proxy. Tai būtina, kad pagal anksčiau atliktus „Postfix“ nustatymų pakeitimus kartu su TCP paketais būtų siunčiamas ir originalus siuntėjo IP adresas.

Dabar, kai atlikti visi būtini HAProxy pakeitimai, galite iš naujo paleisti paslaugą naudodami komandą paslaugos haproxy paleidimas iš naujo ir pradėkite jį naudoti.

Visais su Zextras Suite susijusiais klausimais galite kreiptis į Zextras atstovę Ekaterina Triandafilidi el. [apsaugotas el. paštu]

Šaltinis: www.habr.com

Добавить комментарий