Kuormituksen tasapainotus Zimbra Open-Source Editionissa HAProxylla

Yksi tärkeimmistä tehtävistä rakennettaessa suuria Zimbra OSE -infrastruktuureja on oikea kuormituksen tasapainotus. Sen lisäksi, että se lisää palvelun vikasietoisuutta, ilman kuormituksen tasausta on mahdotonta varmistaa kaikille käyttäjille samanlaista palvelun reagointikykyä. Tämän ongelman ratkaisemiseksi käytetään kuormituksen tasapainottajia - ohjelmisto- ja laitteistoratkaisuja, jotka jakavat pyynnöt uudelleen palvelimien välillä. Niiden joukossa on varsin primitiivisiä, kuten RoundRobin, joka yksinkertaisesti lähettää jokaisen seuraavan pyynnön luettelon seuraavalle palvelimelle, ja on myös edistyneempiä, esimerkiksi HAProxy, jota käytetään laajalti korkean kuormituksen laskentainfrastruktuureissa. useita merkittäviä etuja. Katsotaanpa, kuinka voit saada HAProxy-kuormituksen tasapainottimen ja Zimbra OSE:n toimimaan yhdessä.

Kuormituksen tasapainotus Zimbra Open-Source Editionissa HAProxylla

Joten tehtävän ehtojen mukaisesti saamme Zimbra OSE -infrastruktuurin, jossa on kaksi Zimbra Proxy -palvelinta, kaksi LDAP- ja LDAP Replica -palvelinta, neljä postivarastoa, joissa kussakin on 1000 postilaatikkoa ja kolme MTA:ta. Koska olemme tekemisissä sähköpostipalvelimen kanssa, se vastaanottaa kolmen tyyppistä liikennettä, jotka tarvitsevat tasapainotusta: HTTP verkkoasiakkaan lataamiseen sekä POP ja SMTP sähköpostin lähettämiseen. Tässä tapauksessa HTTP-liikenne ohjataan Zimbra Proxy -palvelimille, joiden IP-osoite on 192.168.0.57 ja 192.168.0.58, ja SMTP-liikenne MTA-palvelimille, joiden IP-osoite on 192.168.0.77 ja 192.168.0.78.

Kuten jo mainittiin, varmistaaksemme, että pyynnöt jakautuvat tasaisesti palvelimien välillä, käytämme HAProxy-kuormitustasainta, joka toimii Zimbra-infrastruktuurin sisääntulosolmussa, jossa on Ubuntu 18.04. Haproxyn asentaminen tähän käyttöjärjestelmään tapahtuu komennolla sudo apt-get install haproxy. Tämän jälkeen tarvitset tiedostoon /etc/default/haproxy muuta parametria KÄYTÖSSÄ = 0 päälle KÄYTÖSSÄ = 1. Anna nyt komento varmistaaksesi, että haproxy toimii palvelun haproxy. Jos tämä palvelu on käynnissä, tämä käy selvästi ilmi komennon lähdöstä.

Yksi HAProxyn suurimmista haitoista on, että oletusarvoisesti se ei lähetä yhdistävän asiakkaan IP-osoitetta, vaan korvaa sen omalla. Tämä voi johtaa tilanteisiin, joissa hyökkääjien lähettämiä sähköposteja ei voida tunnistaa IP-osoitteen perusteella, jotta niitä voidaan lisätä mustalle listalle. Tämä ongelma voidaan kuitenkin ratkaista. Tätä varten sinun on muokattava tiedostoa /opt/zimbra/common/conf/master.cf.in palvelimilla, joissa on Postfix, ja lisää siihen seuraavat rivit:

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

Tästä johtuen avaamme portit 26, 466 ja 588, jotka vastaanottavat tulevaa liikennettä HAProxylta. Kun tiedostot on tallennettu, sinun tulee käynnistää Postfix uudelleen kaikilla palvelimilla käyttämällä zmmtactl restart -komentoa.

Sen jälkeen aloitetaan HAProxyn määrittäminen. Voit tehdä tämän luomalla ensin varmuuskopion asetustiedostosta cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Avaa sitten lähdetiedosto tekstieditorissa /etc/haproxy/haproxy.cfg ja aloita tarvittavien asetusten lisääminen siihen askel askeleelta. Ensimmäinen lohko on lokeja vastaanottavan palvelimen lisääminen, samanaikaisten yhteyksien enimmäismäärän asettaminen sekä käyttäjän nimen ja ryhmän määrittäminen, johon suoritusprosessi kuuluu.

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

5000 samanaikaisen yhteyden luku ilmestyi syystä. Koska meillä on infrastruktuurissamme 4000 postilaatikkoa, meidän on harkittava mahdollisuutta, että he kaikki pääsevät työsähköpostiinsa samaan aikaan. Lisäksi on tarpeen jättää pieni varaus siltä varalta, että niiden lukumäärä kasvaa.

Lisätään nyt lohko oletusasetuksilla:

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

Tämä lohko asettaa enimmäisaikakatkaisun, jonka ajan asiakas ja palvelin sulkevat yhteyden, kun se vanhenee, ja asettaa myös HAProxyn toimintatilan. Meidän tapauksessamme kuormituksen tasapainotin toimii TCP-tilassa, eli se yksinkertaisesti lähettää TCP-paketteja analysoimatta niiden sisältöä.

Seuraavaksi lisäämme säännöt eri porttien yhteyksille. Esimerkiksi jos porttia 25 käytetään SMTP-yhteyksille ja postille, on järkevää välittää yhteydet siihen infrastruktuurissamme oleville MTA:ille. Jos yhteys on portissa 80, tämä on http-pyyntö, joka on välitettävä Zimbra Proxylle.

Portin 25 sääntö:

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

Portin 465 sääntö:

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

Portin 587 sääntö:

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

Portin 80 sääntö:

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

Portin 443 sääntö:

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

Huomaa, että säännöissä TCP-pakettien välittämisestä MTA:lle niiden osoitteiden vieressä on parametri lähetä välityspalvelin. Tämä on tarpeen, jotta aiemmin Postfix-asetuksiin tekemiemme muutosten mukaisesti lähettäjän alkuperäinen IP-osoite lähetetään TCP-pakettien mukana.

Nyt kun kaikki tarvittavat muutokset on tehty HAProxyin, voit käynnistää palvelun uudelleen komennolla palvelun haproxy käynnistys uudelleen ja alkaa käyttää sitä.

Kaikissa Zextras Suiteen liittyvissä kysymyksissä voit ottaa yhteyttä Zextrasin edustajaan Ekaterina Triandafilidiin sähköpostitse [sähköposti suojattu]

Lähde: will.com

Lisää kommentti