Belastningsbalancering i Zimbra Open-Source Edition ved hjælp af HAProxy

En af hovedopgaverne, når man bygger store Zimbra OSE-infrastrukturer, er korrekt belastningsbalancering. Ud over at det øger tjenestens fejltolerance, er det uden load balancing umuligt at sikre samme reaktionsevne af tjenesten for alle brugere. For at løse dette problem bruges load balancers - software- og hardwareløsninger, der omdistribuerer forespørgsler mellem servere. Blandt dem er der ret primitive, som RoundRobin, der blot sender hver efterfølgende anmodning til den næste server på listen, og der er også mere avancerede, for eksempel HAProxy, som er meget udbredt i højbelastede computerinfrastrukturer pga. række væsentlige fordele. Lad os tage et kig på, hvordan du kan få HAProxy load balancer og Zimbra OSE til at arbejde sammen.

Belastningsbalancering i Zimbra Open-Source Edition ved hjælp af HAProxy

Så i henhold til opgavens vilkår får vi Zimbra OSE-infrastrukturen, som har to Zimbra Proxy-, to LDAP- og LDAP Replica-servere, fire maillagere med hver 1000 postkasser og tre MTA'er. Da vi har at gøre med en mailserver, vil den modtage tre typer trafik, der skal balanceres: HTTP til download af webklienten samt POP og SMTP til afsendelse af e-mail. I dette tilfælde vil HTTP-trafik gå til Zimbra Proxy-servere med IP-adresser 192.168.0.57 og 192.168.0.58, og SMTP-trafik vil gå til MTA-servere med IP-adresser 192.168.0.77 og 192.168.0.78.

Som allerede nævnt, for at sikre, at anmodninger fordeles jævnt mellem serverne, vil vi bruge HAProxy load balancer, som vil køre på Zimbra-infrastrukturindgangsnoden, der kører Ubuntu 18.04. Installation af haproxy på dette operativsystem udføres ved hjælp af kommandoen sudo apt-get install haproxy. Efter dette skal du i filen /etc/default/haproxy ændre parameter AKTIVERET = 0AKTIVERET = 1. Nu, for at sikre, at haproxy virker, skal du bare indtaste kommandoen service haproxy. Hvis denne service kører, vil dette være tydeligt fra udgangen af ​​kommandoen.

En af de største ulemper ved HAProxy er, at den som standard ikke transmitterer IP-adressen på den tilsluttede klient og erstatter den med sin egen. Dette kan føre til situationer, hvor e-mails sendt af angribere ikke kan identificeres ved hjælp af IP-adresse for at tilføje den til sortlisten. Dette problem kan dog løses. For at gøre dette skal du redigere filen /opt/zimbra/common/conf/master.cf.in på servere med Postfix og tilføj følgende linjer til det:

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å grund af dette vil vi åbne porte 26, 466 og 588, som vil modtage indgående trafik fra HAProxy. Efter at filerne er blevet gemt, skal du genstarte Postfix på alle servere ved hjælp af zmmtactl genstart-kommandoen.

Lad os derefter begynde at opsætte HAProxy. For at gøre dette skal du først oprette en sikkerhedskopi af indstillingsfilen cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Åbn derefter kildefilen i en teksteditor /etc/haproxy/haproxy.cfg og begynd at tilføje de nødvendige indstillinger til det trin for trin. Den første blok vil være at tilføje en server, der tager logs, indstille det maksimalt tilladte antal samtidige forbindelser, samt angive navnet og gruppen på den bruger, som den eksekverende proces vil 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 dukkede op af en grund. Da vi har 4000 postkasser i vores infrastruktur, skal vi overveje muligheden for, at de alle får adgang til deres arbejdsmail på samme tid. Derudover er det nødvendigt at efterlade en lille reserve, hvis deres antal stiger.

Lad os nu tilføje en blok med standardindstillinger:

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

Denne blok indstiller den maksimale timeout for klienten og serveren til at lukke forbindelsen, når den udløber, og indstiller også driftstilstanden for HAProxy. I vores tilfælde fungerer belastningsbalanceren i TCP-tilstand, det vil sige, at den simpelthen transmitterer TCP-pakker uden at analysere deres indhold.

Dernæst vil vi tilføje regler for forbindelser på forskellige porte. For eksempel, hvis port 25 bruges til SMTP-forbindelser og mail, så giver det mening at videresende forbindelser til den til de MTA'er, der er tilgængelige i vores infrastruktur. Hvis forbindelsen er på port 80, så er dette en http-anmodning, der skal 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

Bemærk venligst, at i reglerne for videresendelse af TCP-pakker til MTA'en er der ved siden af ​​deres adresser en parameter send-proxy. Dette er nødvendigt, så i overensstemmelse med de ændringer, vi tidligere har foretaget i Postfix-indstillingerne, sendes den oprindelige IP-adresse på afsenderen sammen med TCP-pakker.

Nu hvor alle de nødvendige ændringer er foretaget i HAProxy, kan du genstarte tjenesten ved hjælp af kommandoen service haproxy genstart og begynde at bruge det.

For alle spørgsmål relateret til Zextras Suite, kan du kontakte repræsentanten for Zextras Ekaterina Triandafilidi via e-mail [e-mail beskyttet]

Kilde: www.habr.com

Tilføj en kommentar