Load balancing in Zimbra Open-Source Edition met behulp van HAProxy

Een van de belangrijkste taken bij het bouwen van grootschalige Zimbra OSE-infrastructuren is competente taakverdeling. Naast het verhogen van de fouttolerantie van de service, is het zonder taakverdeling onmogelijk om dezelfde responsiviteit van de service voor alle gebruikers te garanderen. Om dit probleem op te lossen, worden load balancers gebruikt - software- en hardwareoplossingen die verzoeken herverdelen tussen servers. Onder hen zijn er zowel vrij primitieve, zoals RoundRobin, dat eenvoudig elk volgend verzoek naar de volgende server in de lijst stuurt, en er zijn meer geavanceerde, bijvoorbeeld HAProxy, dat veel wordt gebruikt in zwaarbelaste computerinfrastructuren vanwege een aantal belangrijke voordelen. Laten we eens kijken hoe de HAProxy load balancer en Zimbra OSE kunnen samenwerken.

Load balancing in Zimbra Open-Source Edition met behulp van HAProxy

Volgens de probleemomschrijving beschikken we over een Zimbra OSE-infrastructuur, bestaande uit twee Zimbra-proxies, twee LDAP-servers, een LDAP-replica, vier mailboxopslaglocaties met elk 1000 mailboxen en drie MTA's. Aangezien het om een ​​mailserver gaat, ontvangt deze drie soorten verkeer die gebalanceerd moeten worden: HTTP voor het laden van de webclient, en POP en SMTP voor het doorsturen van e-mail. HTTP-verkeer wordt verzonden naar... severen Zimbra Proxy met IP-adressen 192.168.0.57 en 192.168.0.58, en SMTP-verkeer zal naar MTA-servers met IP-adressen 192.168.0.77 en 192.168.0.78 gaan.

Zoals eerder vermeld, zullen we, om een ​​gelijkmatige verdeling van verzoeken over de servers te garanderen, de HAProxy load balancer gebruiken. Deze zal draaien op het ingress-knooppunt van de Zimbra-infrastructuur. Ubuntu 18.04. De installatie van haproxy in dit besturingssysteem wordt uitgevoerd met behulp van het commando sudo apt-get install haproxy. Daarna is het noodzakelijk in het bestand /etc/default/haproxy parameter wijzigen INGESCHAKELD = 0 op INGESCHAKELD = 1. Voer nu de opdracht in om er zeker van te zijn dat haproxy werkt dienst haproxy. In het geval dat deze service actief is, wordt dit duidelijk uit de uitvoer van de opdracht.

Een van de grootste nadelen van HAProxy is dat het standaard het IP-adres van de verbindende client niet doorgeeft, maar vervangt door zijn eigen IP-adres. Dit kan ertoe leiden dat e-mails die door aanvallers worden verzonden, niet door HAProxy kunnen worden geïdentificeerd. IP adresom het aan de zwarte lijst toe te voegen. Dit probleem kan echter worden opgelost. Hiervoor moet u het bestand bewerken. /opt/zimbra/common/conf/master.cf.in op Postfix-servers en voeg de volgende regels toe:

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

Hierdoor zullen we poorten 26, 466 en 588 openen, die binnenkomend verkeer van HAProxy zullen ontvangen. Nadat de bestanden zijn opgeslagen, start u Postfix opnieuw op alle servers met behulp van de herstartopdracht zmmtactl.

Laten we daarna beginnen met het configureren van HAProxy. Maak hiervoor eerst een reservekopie van het instellingenbestand cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Open vervolgens het bronbestand in een teksteditor /etc/haproxy/haproxy.cfg en begin er geleidelijk de nodige instellingen aan toe te voegen. Het eerste blok is het toevoegen van een server die logboeken opneemt, het maximale aantal toegestane gelijktijdige verbindingen instelt en de naam en groep specificeert van de gebruiker waartoe het uitvoerbare proces behoort.

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

Het cijfer van 5000 gelijktijdige verbindingen verscheen niet voor niets. Aangezien er 4000 mailboxen in onze infrastructuur zijn, is het noodzakelijk om de mogelijkheid te voorzien dat ze allemaal tegelijkertijd naar hun werkmail gaan. Bovendien is het noodzakelijk om een ​​kleine marge over te laten voor het geval hun aantal toeneemt.

Laten we nu een blok toevoegen met standaardinstellingen:

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

Dit blok stelt de maximale client- en serverwachttijd in om de verbinding te sluiten wanneer deze verloopt, en stelt ook de HAProxy-bedrijfsmodus in. In ons geval werkt de load balancer in de TCP-modus, dat wil zeggen dat hij eenvoudigweg TCP-pakketten overdraagt ​​zonder de inhoud ervan te analyseren.

Vervolgens zullen we regels toevoegen voor verbindingen op verschillende poorten. Als poort 25 bijvoorbeeld wordt gebruikt voor SMTP-verbindingen en e-mailoverdracht, dan is het logisch om verbindingen ernaar door te sturen naar de MTA's die we in onze infrastructuur hebben. Als de verbinding op poort 80 zit, dan is dit een http-verzoek dat moet worden doorgestuurd naar de Zimbra Proxy.

Regel voor poort 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 voor poort 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 voor poort 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 voor poort 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 voor poort 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

Houd er rekening mee dat in de regels voor het doorsturen van TCP-pakketten naar de MTA, naast hun adressen de parameter staat stuur proxy. Dit is nodig zodat, in overeenstemming met de wijzigingen die we eerder in de Postfix-instellingen hebben aangebracht, ook het originele IP-adres van de afzender wordt meegestuurd met TCP-pakketten.

Nu alle noodzakelijke wijzigingen zijn aangebracht in HAProxy, kunt u de service opnieuw starten met de opdracht service haproxy opnieuw opstarten en begin het te gebruiken.

Voor alle vragen met betrekking tot Zextras Suite kunt u contact opnemen met Zextras-vertegenwoordiger Ekaterina Triandafilidi via e-mail katerina@zextras.com

Bron: www.habr.com

Koop betrouwbare hosting voor sites met DDoS-bescherming, VPS VDS-servers 🔥 Koop betrouwbare websitehosting met DDoS-bescherming, VPS- en VDS-servers | ProHoster