Equilibrio de carga en Zimbra Open-Source Edition usando HAProxy

Unha das principais tarefas á hora de construír infraestruturas Zimbra OSE a gran escala é o adecuado equilibrio de carga. Ademais de que aumenta a tolerancia a fallos do servizo, sen equilibrio de carga é imposible garantir a mesma capacidade de resposta do servizo para todos os usuarios. Para resolver este problema, utilízanse equilibradores de carga: solucións de software e hardware que redistribuyen as solicitudes entre servidores. Entre elas hai outras bastante primitivas, como RoundRobin, que simplemente envía cada solicitude posterior ao seguinte servidor da lista, e tamén hai outras máis avanzadas, por exemplo HAProxy, que é moi utilizada en infraestruturas de computación de alta carga debido a unha número de vantaxes significativas. Vexamos como pode facer que o equilibrador de carga HAProxy e Zimbra OSE funcionen xuntos.

Equilibrio de carga en Zimbra Open-Source Edition usando HAProxy

Así, segundo os termos da tarefa, dánosnos a infraestrutura Zimbra OSE, que ten dous proxy Zimbra, dous servidores de réplica LDAP e LDAP, catro almacenamentos de correo con 1000 caixas de correo cada un e tres MTA. Dado que estamos ante un servidor de correo, recibirá tres tipos de tráfico que precisan equilibrar: HTTP para descargar o cliente web, así como POP e SMTP para enviar correo electrónico. Neste caso, o tráfico HTTP irá aos servidores proxy de Zimbra con enderezos IP 192.168.0.57 e 192.168.0.58, e o tráfico SMTP irá aos servidores MTA con enderezos IP 192.168.0.77 e 192.168.0.78.

Como xa se mencionou, para garantir que as solicitudes se distribúan uniformemente entre os servidores, utilizaremos o equilibrador de carga HAProxy, que se executará no nodo de entrada de infraestrutura de Zimbra que executa Ubuntu 18.04. A instalación de haproxy neste sistema operativo realízase mediante o comando sudo apt-get install haproxy. Despois diso, necesitas no ficheiro /etc/default/haproxy cambiar parámetro ACTIVADO=0 en ACTIVADO=1. Agora, para asegurarse de que haproxy está funcionando, só tes que introducir o comando servizo haproxy. Se este servizo está en execución, isto quedará claro na saída do comando.

Unha das principais desvantaxes de HAProxy é que por defecto non transmite o enderezo IP do cliente que se conecta, substituíndoo polo seu. Isto pode levar a situacións nas que os correos electrónicos enviados polos atacantes non se poden identificar mediante o enderezo IP para engadilos á lista negra. Non obstante, este problema pódese resolver. Para iso cómpre editar o ficheiro /opt/zimbra/common/conf/master.cf.in en servidores con Postfix e engádelle as seguintes liñas:

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

Debido a isto, abriremos os portos 26, 466 e 588, que recibirán o tráfico entrante de HAProxy. Despois de gardar os ficheiros, debería reiniciar Postfix en todos os servidores mediante o comando zmmtactl restart.

Despois diso, imos comezar a configurar HAProxy. Para iso, primeiro cree unha copia de seguridade do ficheiro de configuración cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. A continuación, abra o ficheiro fonte nun editor de texto /etc/haproxy/haproxy.cfg e comeza a engadir a configuración necesaria paso a paso. O primeiro bloque será engadir un servidor que leva rexistros, establecendo o número máximo permitido de conexións simultáneas, así como especificando o nome e grupo do usuario ao que pertencerá o proceso de execución.

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

A cifra de 5000 conexións simultáneas apareceu por un motivo. Dado que temos 4000 caixas de correo na nosa infraestrutura, debemos considerar a posibilidade de que todas accedan ao seu correo electrónico de traballo ao mesmo tempo. Ademais, é necesario deixar unha pequena reserva no caso de que aumente o seu número.

Agora imos engadir un bloque coa configuración predeterminada:

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

Este bloque establece o tempo de espera máximo para que o cliente e o servidor pechen a conexión cando caduque, e tamén establece o modo operativo de HAProxy. No noso caso, o equilibrador de carga funciona en modo TCP, é dicir, simplemente transmite paquetes TCP sen analizar o seu contido.

A continuación engadiremos regras para as conexións en varios portos. Por exemplo, se se usa o porto 25 para conexións SMTP e correo, ten sentido reenviar as conexións a el aos MTA dispoñibles na nosa infraestrutura. Se a conexión está no porto 80, esta é unha solicitude http que hai que reenviar a Zimbra Proxy.

Regra para o porto 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

Regra para o porto 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

Regra para o porto 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

Regra para o porto 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

Regra para o porto 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

Teña en conta que nas regras para reenviar paquetes TCP ao MTA, xunto aos seus enderezos hai un parámetro enviar-proxy. Isto é necesario para que, de acordo cos cambios que fixemos anteriormente na configuración de Postfix, o enderezo IP orixinal do seu remitente se envíe xunto cos paquetes TCP.

Agora que se fixeron todos os cambios necesarios en HAProxy, pode reiniciar o servizo usando o comando reinicio do servizo haproxy e comeza a usalo.

Para todas as preguntas relacionadas con Zextras Suite, pode poñerse en contacto coa representante de Zextras Ekaterina Triandafilidi por correo electrónico [protexido por correo electrónico]

Fonte: www.habr.com

Engadir un comentario