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

Een van de belangrijkste taken bij het opzetten van grootschalige Zimbra OSE-infrastructuren is een goede load balancing. Naast het verhogen van de beschikbaarheid van de service, is load balancing essentieel om een gelijke responsiviteit voor alle gebruikers te waarborgen. Om deze taak te vervullen, worden load balancers gebruikt - zowel software- als hardwareoplossingen die verzoeken tussen servers herverdelen. Onder deze oplossingen zijn er vrij primitieve, zoals RoundRobin, die gewoon elke volgende aanvraag naar de volgende server in de lijst leidt, alsook geavanceerdere opties, zoals HAProxy, dat wijdverspreid wordt toegepast in zwaarbelaste computernetwerken vanwege een aantal belangrijke voordelen. Laten we eens kijken hoe we de samenwerking tussen de HAProxy-load balancer en Zimbra OSE kunnen waarborgen.

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

Dus, gegeven de voorwaarden van de opdracht, hebben we een Zimbra OSE-infrastructuur met twee Zimbra Proxy's, twee LDAP-servers en een LDAP Replica, vier mailboxopslagplaatsen met elk 1000 mailboxen en drie MTA's. Gezien het feit dat we met een mailserver werken, zal deze drie soorten verkeer ontvangen dat balans nodig heeft: HTTP voor het laden van de webclient, en ook POP en SMTP voor het verzenden van e-mail. Daarbij zal het HTTP-verkeer gaan naar servers Zimbra Proxy met IP-adressen 192.168.0.57 en 192.168.0.58, terwijl SMTP-verkeer naar de MTA-servers met IP-adressen 192.168.0.77 en 192.168.0.78 zal gaan.

Zoals eerder vermeld, zullen we om een gelijkmatige verdeling van verzoeken tussen de servers te waarborgen de load balancer HAProxy gebruiken, die zal draaien op de invoerknop van de Zimbra-infrastructuur op Ubuntu 18.04. De installatie van haproxy op dit besturingssysteem kan worden uitgevoerd met het commando sudo apt-get install haproxy. Vervolgens moet in het bestand /etc/default/haproxy de parameter ENABLED=0 en een werkende opdracht krijgen. worden gewijzigd naarENABLED=1 . Nu, om ervoor te zorgen dat haproxy draait, is het voldoende om het commando in te voerenservice haproxy

. Als deze service draait, zal dit blijken uit de uitvoer van het commando. het IP-adres, om het aan de zwarte lijst toe te voegen. Dit probleem kan echter worden opgelost. Hiervoor moet het bestand worden bewerkt /opt/zimbra/common/conf/master.cf.in op servers met Postfix en de volgende regels worden toegevoegd:

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 openen we de poorten 26, 466 en 588, die inkomend verkeer vanuit HAProxy zullen ontvangen. Nadat de bestanden zijn opgeslagen, moet Postfix op alle servers worden herstart met het commando zmmtactl restart.

Daarna beginnen we met het configureren van HAProxy. Hiervoor maken we eerst een back-up van het configuratiebestand cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Vervolgens openen we het bronbestand in een teksteditor /etc/haproxy/haproxy.cfg en beginnen we stap voor stap de noodzakelijke instellingen toe te voegen. Het eerste blok zal de toevoeging van de server zijn die de logs vastlegt, de maximale toegestane hoeveelheid gelijktijdige verbindingen instellen, evenals de naam en groep gebruiker aangeven waartoe het uitvoerende proces zal behoren.

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

Het getal van 5000 gelijktijdige verbindingen is niet willekeurig gekozen. Aangezien onze infrastructuur 4000 e-mailboxen heeft, moeten we rekening houden met de mogelijkheid dat ze allemaal tegelijkertijd in hun werk e-mail inloggen. Bovendien moet er een kleine reserve zijn voor het geval hun aantal toeneemt.

Laten we nu een blok met standaardinstellingen toevoegen:

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

In dit blok wordt de maximale tijd ingesteld voor het wachten van de cliƫnt en server, zodat de verbinding wordt verbroken na het verstrijken ervan, en de werkmodus van HAProxy wordt bepaald. In ons geval werkt de load balancer in TCP-modus, wat betekent dat het TCP-pakketten simpelweg doorgeeft zonder hun inhoud te analyseren.

Vervolgens voegen we regels toe voor verbindingen op verschillende poorten. Bijvoorbeeld, als poort 25 wordt gebruikt voor SMTP-verbindingen en het verzenden van e-mail, is het logisch om verbindingen naar deze poort door te sturen naar de MTA's die in onze infrastructuur zijn.

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

Let op dat bij de regels voor het doorsturen van TCP-pakketten naar de MTA, naast hun adressen, de parameter send-proxyis geplaatst. Dit is nodig zodat, in overeenstemming met de eerder aangebrachte wijzigingen in de instellingen van Postfix, het originele IP-adres van de afzender samen met de TCP-pakketten wordt doorgegeven.

Nu, wanneer alle noodzakelijke wijzigingen in HAProxy zijn aangebracht, kan de service opnieuw worden gestart met het commando service haproxy restart en kan deze worden gebruikt.

Voor vragen over Zextras Suite kunt u contact opnemen met de vertegenwoordiger van het bedrijf 'Zextras', Ekaterina Triandafiliadi, via e-mail katerina@zextras.com

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster