Lastbalansering i Zimbra Open-Source Edition med HAProxy

En av huvuduppgifterna när man bygger storskalig Zimbra OSE-infrastruktur är korrekt lastbalansering. Förutom att det ökar tjänstens feltolerans, utan lastbalansering är det omöjligt att säkerställa samma lyhördhet hos tjänsten för alla användare. För att lösa detta problem används lastbalanserare - mjukvaru- och hårdvarulösningar som omfördelar förfrågningar mellan servrar. Bland dem finns det ganska primitiva sådana, som RoundRobin, som helt enkelt skickar varje efterföljande förfrågan till nästa server i listan, och det finns också mer avancerade, till exempel HAProxy, som används flitigt i högbelastade datorinfrastrukturer på grund av en antal betydande fördelar. Låt oss ta en titt på hur du kan få HAProxy load balancer och Zimbra OSE att fungera tillsammans.

Lastbalansering i Zimbra Open-Source Edition med HAProxy

Så, enligt villkoren för uppgiften, får vi Zimbra OSE-infrastrukturen, som har två Zimbra Proxy-, två LDAP- och LDAP Replica-servrar, fyra e-postlagringar med vardera 1000 postlådor och tre MTA:er. Med tanke på att vi har att göra med en e-postserver kommer den att ta emot tre typer av trafik som behöver balanseras: HTTP för nedladdning av webbklienten, samt POP och SMTP för att skicka e-post. I det här fallet går HTTP-trafiken till Zimbra Proxy-servrar med IP-adresserna 192.168.0.57 och 192.168.0.58, och SMTP-trafiken går till MTA-servrar med IP-adresserna 192.168.0.77 och 192.168.0.78.

Som redan nämnts, för att säkerställa att förfrågningar fördelas jämnt mellan servrarna, kommer vi att använda HAProxy-lastbalanseraren, som kommer att köras på Zimbra-infrastrukturingångsnoden som kör Ubuntu 18.04. Installation av haproxy på detta operativsystem görs med kommandot sudo apt-get installera haproxy. Efter detta behöver du i filen /etc/default/haproxy ändra parameter AKTIVERAD = 0AKTIVERAD = 1. Nu, för att se till att haproxy fungerar, skriv bara in kommandot tjänst haproxy. Om den här tjänsten körs kommer detta att framgå av kommandots utdata.

En av de största nackdelarna med HAProxy är att den som standard inte överför IP-adressen för den anslutande klienten, utan ersätter den med sin egen. Detta kan leda till situationer där e-postmeddelanden som skickas av angripare inte kan identifieras med IP-adress för att lägga till den på den svarta listan. Detta problem kan dock lösas. För att göra detta måste du redigera filen /opt/zimbra/common/conf/master.cf.in på servrar med Postfix och lägg till följande rader till den:

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 av detta kommer vi att öppna portarna 26, 466 och 588, som kommer att ta emot inkommande trafik från HAProxy. Efter att filerna har sparats bör du starta om Postfix på alla servrar med hjälp av kommandot zmmtactl restart.

Efter det, låt oss börja konfigurera HAProxy. För att göra detta, skapa först en säkerhetskopia av inställningsfilen cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Öppna sedan källfilen i en textredigerare /etc/haproxy/haproxy.cfg och börja lägga till de nödvändiga inställningarna steg för steg. Det första blocket kommer att lägga till en server som tar loggar, ställa in det maximala tillåtna antalet samtidiga anslutningar, samt specificera namnet och gruppen på användaren som den exekveringsprocess kommer att tillhöra.

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

Siffran 5000 4000 samtidiga anslutningar dök upp av en anledning. Eftersom vi har XNUMX XNUMX brevlådor i vår infrastruktur måste vi överväga möjligheten att de alla kommer åt sin jobbmail samtidigt. Dessutom är det nödvändigt att lämna en liten reserv om deras antal ökar.

Låt oss nu lägga till ett block med standardinställningar:

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

Detta block ställer in den maximala timeout för klienten och servern att stänga anslutningen när den löper ut, och ställer även in driftsläget för HAProxy. I vårt fall fungerar lastbalanseraren i TCP-läge, det vill säga den sänder helt enkelt TCP-paket utan att analysera deras innehåll.

Därefter kommer vi att lägga till regler för anslutningar på olika portar. Till exempel, om port 25 används för SMTP-anslutningar och e-post, är det vettigt att vidarebefordra anslutningar till den till de MTA:er som finns tillgängliga i vår infrastruktur. Om anslutningen är på port 80 är detta en http-förfrågan som måste vidarebefordras till Zimbra Proxy.

Regel för 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 för 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 för 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 för 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 för 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

Observera att i reglerna för vidarebefordran av TCP-paket till MTA, finns det en parameter bredvid deras adresser skicka-proxy. Detta är nödvändigt för att, i enlighet med de ändringar vi gjorde tidigare i Postfix-inställningarna, den ursprungliga IP-adressen för dess avsändare skickas tillsammans med TCP-paket.

Nu när alla nödvändiga ändringar har gjorts i HAProxy kan du starta om tjänsten med kommandot service haproxy omstart och börja använda den.

För alla frågor relaterade till Zextras Suite kan du kontakta representanten för Zextras Ekaterina Triandafilidi via e-post [e-postskyddad]

Källa: will.com

Lägg en kommentar