Vyvažovanie záťaže v Zimbra Open-Source Edition pomocou HAProxy

Jednou z hlavných úloh pri budovaní rozsiahlych infraštruktúr Zimbra OSE je správne vyvažovanie záťaže. Okrem toho, že zvyšuje odolnosť služby voči chybám, bez vyvažovania záťaže nie je možné zabezpečiť rovnakú odozvu služby pre všetkých používateľov. Na vyriešenie tohto problému sa používajú vyrovnávače zaťaženia - softvérové ​​a hardvérové ​​riešenia, ktoré prerozdeľujú požiadavky medzi servermi. Medzi nimi sú celkom primitívne, ako RoundRobin, ktorý jednoducho odošle každú nasledujúcu požiadavku na ďalší server v zozname, a existujú aj pokročilejšie, napríklad HAProxy, ktorý je široko používaný vo vysoko zaťažených výpočtových infraštruktúrach kvôli množstvo významných výhod. Poďme sa pozrieť na to, ako môžete dosiahnuť, aby HAProxy load balancer a Zimbra OSE spolupracovali.

Vyvažovanie záťaže v Zimbra Open-Source Edition pomocou HAProxy

Takže, podľa podmienok úlohy, dostaneme infraštruktúru Zimbra OSE, ktorá má dva Zimbra Proxy, dva LDAP a LDAP Replica servery, štyri poštové úložiská s 1000 poštovými schránkami a tri MTA. Vzhľadom na to, že máme čo do činenia s poštovým serverom, bude prijímať tri typy prevádzky, ktoré potrebujú vyváženie: HTTP na sťahovanie webového klienta, ako aj POP a SMTP na odosielanie e-mailov. V tomto prípade bude prenos HTTP smerovať na servery Zimbra Proxy s adresami IP 192.168.0.57 a 192.168.0.58 a prenos SMTP na servery MTA s adresami IP 192.168.0.77 a 192.168.0.78.

Ako už bolo spomenuté, na zabezpečenie rovnomernej distribúcie požiadaviek medzi servermi použijeme nástroj na vyrovnávanie zaťaženia HAProxy, ktorý pobeží na vstupnom uzle infraštruktúry Zimbra so systémom Ubuntu 18.04. Inštalácia haproxy na tento operačný systém sa vykonáva pomocou príkazu sudo apt-get install haproxy. Potom musíte v súbore /etc/default/haproxy zmeniť parameter ZAPNUTÉ = 0 na ZAPNUTÉ = 1. Teraz, aby ste sa uistili, že haproxy funguje, stačí zadať príkaz servisná hapoxy. Ak je táto služba spustená, bude to zrejmé z výstupu príkazu.

Jednou z hlavných nevýhod HAProxy je, že štandardne neprenáša IP adresu pripájajúceho sa klienta a nahrádza ju svojou vlastnou. To môže viesť k situáciám, keď e-maily odoslané útočníkmi nemožno identifikovať podľa adresy IP a pridať ich na čiernu listinu. Tento problém sa však dá vyriešiť. Ak to chcete urobiť, musíte súbor upraviť /opt/zimbra/common/conf/master.cf.in na serveroch s Postfixom a pridajte k nemu nasledujúce riadky:

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

Kvôli tomu otvoríme porty 26, 466 a 588, ktoré budú prijímať prichádzajúcu prevádzku z HAProxy. Po uložení súborov by ste mali reštartovať Postfix na všetkých serveroch pomocou príkazu zmmtactl restart.

Potom začnime nastavovať HAProxy. Ak to chcete urobiť, najprv vytvorte záložnú kópiu súboru s nastaveniami cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Potom otvorte zdrojový súbor v textovom editore /etc/haproxy/haproxy.cfg a začnite doň postupne pridávať potrebné nastavenia. Prvým blokom bude pridanie servera, ktorý berie logy, nastavenie maximálneho povoleného počtu súčasných pripojení, ako aj určenie mena a skupiny užívateľa, do ktorého bude spustený proces patriť.

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

Číslo 5000 4000 súčasných spojení sa objavilo z nejakého dôvodu. Keďže v našej infraštruktúre máme XNUMX XNUMX schránok, musíme zvážiť možnosť, že všetky budú mať prístup k svojmu pracovnému emailu súčasne. Okrem toho je potrebné nechať malú rezervu pre prípad, že by sa ich počet zvýšil.

Teraz pridajme blok s predvolenými nastaveniami:

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

Tento blok nastavuje maximálny časový limit pre klienta a server na ukončenie spojenia po jeho uplynutí a tiež nastavuje prevádzkový režim HAProxy. V našom prípade load balancer pracuje v režime TCP, to znamená, že jednoducho prenáša TCP pakety bez analýzy ich obsahu.

Ďalej pridáme pravidlá pre pripojenia na rôznych portoch. Napríklad, ak sa port 25 používa pre pripojenia SMTP a poštu, potom má zmysel posielať pripojenia k nemu na MTA dostupné v našej infraštruktúre. Ak je pripojenie na porte 80, ide o požiadavku http, ktorú je potrebné preposlať na server Zimbra Proxy.

Pravidlo pre port 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

Pravidlo pre port 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

Pravidlo pre port 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

Pravidlo pre port 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

Pravidlo pre port 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

Upozorňujeme, že v pravidlách pre posielanie TCP paketov na MTA je vedľa ich adries uvedený parameter poslať-proxy. Je to potrebné, aby v súlade so zmenami, ktoré sme vykonali v nastaveniach Postfixu, bola spolu s TCP paketmi odoslaná aj pôvodná IP adresa jeho odosielateľa.

Teraz, keď boli v HAProxy vykonané všetky potrebné zmeny, môžete službu reštartovať pomocou príkazu haproxy reštart služby a začnite ho používať.

So všetkými otázkami týkajúcimi sa apartmánu Zextras sa môžete e-mailom obrátiť na zástupkyňu Zextras Ekaterinu Triandafilidi [chránené e-mailom]

Zdroj: hab.com

Pridať komentár