Lastbalansering i Zimbra Open-Source Edition med HAProxy

En av hovedoppgavene når man bygger storskala Zimbra OSE-infrastruktur er riktig lastbalansering. I tillegg til at det øker feiltoleransen til tjenesten, uten lastbalansering er det umulig å sikre samme respons til tjenesten for alle brukere. For å løse dette problemet brukes belastningsbalansere - programvare- og maskinvareløsninger som omdistribuerer forespørsler mellom servere. Blant dem er det ganske primitive, som RoundRobin, som ganske enkelt sender hver påfølgende forespørsel til neste server på listen, og det er også mer avanserte, for eksempel HAProxy, som er mye brukt i høylast datainfrastruktur på grunn av en antall betydelige fordeler. La oss ta en titt på hvordan du kan få HAProxy load balancer og Zimbra OSE til å fungere sammen.

Lastbalansering i Zimbra Open-Source Edition med HAProxy

Så, i henhold til vilkårene for oppgaven, får vi Zimbra OSE-infrastrukturen, som har to Zimbra Proxy-, to LDAP- og LDAP Replica-servere, fire e-postlager med 1000 postbokser hver og tre MTA-er. Gitt at vi har å gjøre med en e-postserver, vil den motta tre typer trafikk som trenger balansering: HTTP for nedlasting av webklienten, samt POP og SMTP for sending av e-post. I dette tilfellet vil HTTP-trafikk gå til Zimbra Proxy-servere med IP-adresser 192.168.0.57 og 192.168.0.58, og SMTP-trafikk vil gå til MTA-servere med IP-adresser 192.168.0.77 og 192.168.0.78.

Som allerede nevnt, for å sikre at forespørsler fordeles jevnt mellom serverne, vil vi bruke HAProxy load balancer, som vil kjøre på Zimbra-infrastrukturinngangsnoden som kjører Ubuntu 18.04. Installering av haproxy på dette operativsystemet gjøres ved å bruke kommandoen sudo apt-get install haproxy. Etter dette trenger du i filen /etc/default/haproxy endre parameter AKTIVERT = 0AKTIVERT = 1. Nå, for å være sikker på at haproxy fungerer, bare skriv inn kommandoen tjeneste haproxy. Hvis denne tjenesten kjører, vil dette være tydelig fra utdataene fra kommandoen.

En av de største ulempene med HAProxy er at den som standard ikke overfører IP-adressen til den tilkoblede klienten, og erstatter den med sin egen. Dette kan føre til situasjoner der e-poster sendt av angripere ikke kan identifiseres med IP-adresse for å legge den til på svartelisten. Dette problemet kan imidlertid løses. For å gjøre dette må du redigere filen /opt/zimbra/common/conf/master.cf.in på servere med Postfix og legg til følgende linjer:

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å grunn av dette vil vi åpne portene 26, 466 og 588, som vil motta innkommende trafikk fra HAProxy. Etter at filene er lagret, bør du starte Postfix på nytt på alle servere ved å bruke kommandoen zmmtactl restart.

Etter det, la oss begynne å sette opp HAProxy. For å gjøre dette må du først lage en sikkerhetskopi av innstillingsfilen cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Åpne deretter kildefilen i et tekstredigeringsprogram /etc/haproxy/haproxy.cfg og begynn å legge til de nødvendige innstillingene trinn for trinn. Den første blokken vil være å legge til en server som tar logger, angi maksimalt tillatt antall samtidige tilkoblinger, samt spesifisere navnet og gruppen til brukeren som den utførende prosessen skal tilhøre.

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

Tallet på 5000 samtidige forbindelser dukket opp av en grunn. Siden vi har 4000 postkasser i infrastrukturen vår, må vi vurdere muligheten for at de alle får tilgang til jobbe-e-posten sin samtidig. I tillegg er det nødvendig å legge igjen en liten reserve i tilfelle antallet øker.

La oss nå legge til en blokk med standardinnstillinger:

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

Denne blokken angir maksimal tidsavbrudd for klienten og serveren for å lukke forbindelsen når den utløper, og setter også driftsmodusen til HAProxy. I vårt tilfelle fungerer lastbalanseren i TCP-modus, det vil si at den ganske enkelt overfører TCP-pakker uten å analysere innholdet.

Deretter vil vi legge til regler for tilkoblinger på forskjellige porter. For eksempel, hvis port 25 brukes for SMTP-tilkoblinger og e-post, er det fornuftig å videresende tilkoblinger til den til MTA-ene som er tilgjengelige i infrastrukturen vår. Hvis tilkoblingen er på port 80, er dette en http-forespørsel som må videresendes til Zimbra Proxy.

Regel for 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

Regel for 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

Regel for 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

Regel for 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

Regel for 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

Vær oppmerksom på at i reglene for videresending av TCP-pakker til MTA, ved siden av adressene deres er det en parameter send-proxy. Dette er nødvendig slik at, i samsvar med endringene vi gjorde tidligere i Postfix-innstillingene, sendes den opprinnelige IP-adressen til avsenderen sammen med TCP-pakker.

Nå som alle nødvendige endringer er gjort i HAProxy, kan du starte tjenesten på nytt ved å bruke kommandoen service haproxy omstart og begynn å bruke den.

For alle spørsmål relatert til Zextras Suite, kan du kontakte representanten for Zextras Ekaterina Triandafilidi på e-post [e-postbeskyttet]

Kilde: www.habr.com

Legg til en kommentar