Izravnavanje obremenitve v odprtokodni izdaji Zimbra z uporabo HAProxy

Ena od glavnih nalog pri gradnji obsežnih infrastruktur Zimbra OSE je pravilno uravnoteženje obremenitve. Poleg tega, da povečuje toleranco storitve na napake, brez uravnoteženja obremenitve ni mogoče zagotoviti enake odzivnosti storitve za vse uporabnike. Za rešitev tega problema se uporabljajo uravnavalniki obremenitve - programske in strojne rešitve, ki prerazporejajo zahteve med strežniki. Med njimi so precej primitivni, kot je RoundRobin, ki vsako naslednjo zahtevo preprosto pošlje naslednjemu strežniku na seznamu, obstajajo pa tudi bolj napredni, na primer HAProxy, ki se pogosto uporablja v visoko obremenjenih računalniških infrastrukturah zaradi številne pomembne prednosti. Oglejmo si, kako lahko omogočite, da izravnava obremenitve HAProxy in Zimbra OSE delujeta skupaj.

Izravnavanje obremenitve v odprtokodni izdaji Zimbra z uporabo HAProxy

Torej, glede na pogoje naloge, nam je dana infrastruktura Zimbra OSE, ki ima dva Zimbra Proxy, dva strežnika LDAP in LDAP Replica, štiri poštne shrambe s po 1000 nabiralniki in tri MTA. Glede na to, da imamo opravka s poštnim strežnikom, bo prejel tri vrste prometa, ki potrebujejo uravnoteženje: HTTP za prenos spletnega odjemalca ter POP in SMTP za pošiljanje e-pošte. V tem primeru bo promet HTTP šel na strežnike Zimbra Proxy z naslovoma IP 192.168.0.57 in 192.168.0.58, promet SMTP pa na strežnike MTA z naslovoma IP 192.168.0.77 in 192.168.0.78.

Kot smo že omenili, bomo za zagotavljanje enakomerne porazdelitve zahtevkov med strežniki uporabili izravnalnik obremenitve HAProxy, ki se bo izvajal na vhodnem vozlišču infrastrukture Zimbra, ki izvaja Ubuntu 18.04. Namestitev haproxyja v tem operacijskem sistemu se izvede z ukazom sudo apt-get namestite haproxy. Po tem potrebujete v datoteki /etc/default/haproxy spremenite parameter Omogočeno = 0 o Omogočeno = 1. Zdaj, da se prepričate, da haproxy deluje, preprosto vnesite ukaz storitev haproxy. Če se ta storitev izvaja, bo to razvidno iz izhoda ukaza.

Ena od glavnih pomanjkljivosti HAProxy je, da privzeto ne posreduje naslova IP odjemalca, ki se povezuje, in ga nadomesti s svojim. To lahko privede do situacij, ko e-poštnih sporočil, ki jih pošljejo napadalci, ni mogoče prepoznati po naslovu IP, da bi jih dodali na črni seznam. Vendar je to težavo mogoče rešiti. Če želite to narediti, morate urediti datoteko /opt/zimbra/common/conf/master.cf.in na strežnikih s Postfixom in mu dodajte naslednje vrstice:

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

Zaradi tega bomo odprli vrata 26, 466 in 588, ki bodo prejemala dohodni promet iz HAProxy. Ko so datoteke shranjene, znova zaženite Postfix na vseh strežnikih z ukazom zmmtactl restart.

Po tem začnimo nastavljati HAProxy. Če želite to narediti, najprej ustvarite varnostno kopijo datoteke z nastavitvami cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Nato odprite izvorno datoteko v urejevalniku besedila /etc/haproxy/haproxy.cfg in ji začnite korak za korakom dodajati potrebne nastavitve. Prvi blok bo dodajanje strežnika, ki sprejema dnevnike, nastavitev največjega dovoljenega števila hkratnih povezav ter določitev imena in skupine uporabnikov, ki jim bo pripadal izvajalni proces.

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

Številka 5000 hkratnih povezav se je pojavila z razlogom. Ker imamo v naši infrastrukturi 4000 poštnih predalov, moramo upoštevati možnost, da bodo vsi dostopali do službene e-pošte hkrati. Poleg tega je treba pustiti majhno rezervo, če se njihovo število poveča.

Zdaj pa dodamo blok s privzetimi nastavitvami:

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

Ta blok nastavi najdaljšo časovno omejitev za odjemalca in strežnik, da prekineta povezavo, ko ta poteče, in tudi nastavi način delovanja HAProxy. V našem primeru izravnalnik obremenitve deluje v načinu TCP, to pomeni, da preprosto prenaša pakete TCP, ne da bi analiziral njihovo vsebino.

Nato bomo dodali pravila za povezave na različnih vratih. Na primer, če se vrata 25 uporabljajo za povezave SMTP in pošto, je smiselno posredovati povezave do njih MTA-jem, ki so na voljo v naši infrastrukturi. Če je povezava na vratih 80, je to http zahteva, ki jo je treba posredovati Zimbra Proxyju.

Pravilo za vrata 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 vrata 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 vrata 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 vrata 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 vrata 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

Upoštevajte, da je v pravilih za posredovanje paketov TCP na MTA poleg njihovih naslovov parameter send-proxy. To je potrebno, da se v skladu s spremembami, ki smo jih naredili prej v nastavitvah Postfix, originalni naslov IP pošiljatelja pošlje skupaj s paketi TCP.

Zdaj, ko so bile v HAProxy narejene vse potrebne spremembe, lahko znova zaženete storitev z ukazom ponovni zagon storitve haproxy in ga začni uporabljati.

Za vsa vprašanja v zvezi z Zextras Suite se lahko obrnete na predstavnico Zextras Ekaterino Triandafilidi po elektronski pošti. [e-pošta zaščitena]

Vir: www.habr.com

Dodaj komentar