Equilibri de càrrega a Zimbra Open-Source Edition mitjançant HAProxy

Una de les tasques principals a l'hora de construir infraestructures Zimbra OSE a gran escala és l'equilibri de càrrega adequat. A més del fet que augmenta la tolerància a errors del servei, sense equilibri de càrrega és impossible garantir la mateixa capacitat de resposta del servei per a tots els usuaris. Per solucionar aquest problema, s'utilitzen equilibradors de càrrega: solucions de programari i maquinari que redistribueixen les peticions entre servidors. Entre ells n'hi ha de força primitius, com el RoundRobin, que simplement envia cada sol·licitud posterior al següent servidor de la llista, i també n'hi ha de més avançats, per exemple HAProxy, que s'utilitza molt en infraestructures informàtiques d'alta càrrega a causa d'una nombre d'avantatges significatius. Fem una ullada a com podeu fer que l'equilibrador de càrrega HAProxy i Zimbra OSE funcionin junts.

Equilibri de càrrega a Zimbra Open-Source Edition mitjançant HAProxy

Així, segons els termes de la tasca, se'ns dóna la infraestructura Zimbra OSE, que té dos servidors Zimbra Proxy, dos servidors LDAP i LDAP Replica, quatre emmagatzematges de correu amb 1000 bústies cadascun i tres MTA. Atès que estem davant d'un servidor de correu, rebrà tres tipus de trànsit que cal equilibrar: HTTP per descarregar el client web, així com POP i SMTP per enviar correu electrònic. En aquest cas, el trànsit HTTP anirà als servidors Proxy de Zimbra amb adreces IP 192.168.0.57 i 192.168.0.58, i el trànsit SMTP anirà als servidors MTA amb adreces IP 192.168.0.77 i 192.168.0.78.

Com ja s'ha esmentat, per garantir que les sol·licituds es distribueixen de manera uniforme entre els servidors, utilitzarem l'equilibrador de càrrega HAProxy, que s'executarà al node d'entrada d'infraestructura de Zimbra amb Ubuntu 18.04. La instal·lació d'haproxy en aquest sistema operatiu es fa mitjançant l'ordre sudo apt-get install haproxy. Després d'això, necessiteu al fitxer /etc/default/haproxy canviar el paràmetre HABILITAT = 0 en HABILITAT = 1. Ara, per assegurar-vos que haproxy funciona, només cal que introduïu l'ordre servei haproxy. Si aquest servei s'està executant, això quedarà clar a la sortida de l'ordre.

Un dels principals inconvenients d'HAProxy és que per defecte no transmet l'adreça IP del client que es connecta, substituint-la per la seva. Això pot provocar situacions en què els correus electrònics enviats pels atacants no es puguin identificar per l'adreça IP per afegir-los a la llista negra. Tanmateix, aquest problema es pot resoldre. Per fer-ho, cal editar el fitxer /opt/zimbra/common/conf/master.cf.in als servidors amb Postfix i afegiu-hi les línies següents:

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

Per això, obrirem els ports 26, 466 i 588, que rebran trànsit entrant d'HAProxy. Un cop desats els fitxers, hauríeu de reiniciar Postfix a tots els servidors mitjançant l'ordre de reinici zmmtactl.

Després d'això, comencem a configurar HAProxy. Per fer-ho, primer creeu una còpia de seguretat del fitxer de configuració cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. A continuació, obriu el fitxer font en un editor de text /etc/haproxy/haproxy.cfg i comenceu a afegir-hi la configuració necessària pas a pas. El primer bloc serà afegir un servidor que pren registres, establint el nombre màxim de connexions simultànies permeses, així com especificant el nom i grup de l'usuari al qual pertanyirà el procés d'execució.

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

La xifra de 5000 connexions simultànies va aparèixer per un motiu. Com que tenim 4000 bústies a la nostra infraestructura, hem de considerar la possibilitat que tots accedeixin al seu correu electrònic de treball alhora. A més, cal deixar una petita reserva per si augmenta el seu nombre.

Ara afegim un bloc amb la configuració predeterminada:

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

Aquest bloc estableix el temps d'espera màxim perquè el client i el servidor tanquin la connexió quan caduqui, i també estableix el mode de funcionament d'HAProxy. En el nostre cas, l'equilibrador de càrrega funciona en mode TCP, és a dir, simplement transmet paquets TCP sense analitzar-ne el contingut.

A continuació, afegirem regles per a les connexions a diversos ports. Per exemple, si el port 25 s'utilitza per a connexions SMTP i correu, té sentit reenviar-hi connexions als MTA disponibles a la nostra infraestructura. Si la connexió és al port 80, aquesta és una sol·licitud http que s'ha de reenviar a Zimbra Proxy.

Regla per al 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

Regla per al 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

Regla per al 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

Regla per al 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

Regla per al 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

Tingueu en compte que a les regles per reenviar paquets TCP a l'MTA, al costat de les seves adreces hi ha un paràmetre enviar-proxy. Això és necessari perquè, d'acord amb els canvis que hem fet anteriorment a la configuració de Postfix, s'enviï l'adreça IP original del seu remitent juntament amb els paquets TCP.

Ara que s'han fet tots els canvis necessaris a HAProxy, podeu reiniciar el servei mitjançant l'ordre reinici del servei haproxy i començar a utilitzar-lo.

Per a totes les preguntes relacionades amb Zextras Suite, podeu contactar amb la representant de Zextras Ekaterina Triandafilidi per correu electrònic [protegit per correu electrònic]

Font: www.habr.com

Afegeix comentari