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

Dus, volgens de voorwaarden van het probleem, krijgen we een Zimbra OSE-infrastructuur, die twee Zimbra Proxies, twee LDAP- en LDAP Replica-servers, vier mailstores met elk 1000 mailboxen en drie MTA's heeft. Aangezien we te maken hebben met een mailserver, zal deze drie soorten verkeer ontvangen die in evenwicht moeten zijn: HTTP voor het downloaden van de webclient, evenals POP en SMTP voor het verzenden van e-mail. In dit geval gaat HTTP-verkeer naar Zimbra Proxy-servers met ip-adressen 192.168.0.57 en 192.168.0.58, en SMTP-verkeer gaat naar MTA-servers met ip-adressen 192.168.0.77 en 192.168.0.78.

Zoals eerder vermeld, zullen we, om een ​​gelijkmatige verdeling van verzoeken tussen servers te garanderen, de HAProxy load balancer gebruiken, die zal draaien op het invoerknooppunt van de Zimbra-infrastructuur met Ubuntu 18.04. Het installeren van haproxy op dit besturingssysteem gebeurt met behulp van de opdracht 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 belangrijkste tekortkomingen van HAProxy is dat het standaard niet het IP-adres van de aangesloten client doorgeeft, maar het vervangt door het eigen IP-adres. Dit kan leiden tot situaties waarin brieven die door aanvallers zijn verzonden, niet kunnen worden geïdentificeerd aan de hand van het IP-adres om deze aan de zwarte lijst toe te voegen. Dit probleem kan echter worden opgelost. Om dit te doen, 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 per e-mail contact opnemen met de vertegenwoordiger van Zextras Ekaterina Triandafilidi [e-mail beveiligd]

Bron: www.habr.com

Voeg een reactie