Balanceamento de carga no Zimbra Open-Source Edition com HAProxy

Uma das principais tarefas na construção de infraestruturas de Zimbra OSE em larga escala é o balanceamento de carga competente. Além do fato de aumentar a tolerância a falhas do serviço, sem o balanceamento de carga, é impossível fornecer a mesma capacidade de resposta do serviço para todos os usuários. Para resolver esse problema, balanceadores de carga são usados ​​- soluções de software e hardware que redistribuem solicitações entre servidores. Entre eles, existem alguns bastante primitivos, como o RoundRobin, que simplesmente envia cada solicitação seguinte para o próximo servidor da lista, e há outros mais avançados, por exemplo, o HAProxy, que é amplamente usado em infraestruturas de computação altamente carregadas, devido a várias vantagens significativas. Vamos ver como o balanceador de carga HAProxy e Zimbra OSE pode trabalhar juntos.

imagem

Portanto, de acordo com as condições da tarefa, recebemos a infraestrutura do Zimbra OSE, na qual existem dois servidores Zimbra Proxy, dois servidores LDAP e LDAP Replica, quatro armazenamentos de correio com 1000 caixas de correio em cada um e três MTAs. Considerando que estamos lidando com um servidor de e-mail, ele receberá três tipos de tráfego que precisam ser balanceados: HTTP para baixar o cliente da Web, bem como POP e SMTP para enviar e-mail. Ao mesmo tempo, o tráfego HTTP irá para os servidores Zimbra Proxy com endereços IP 192.168.0.57 e 192.168.0.58, e o tráfego SMTP irá para os servidores MTA com os endereços IP 192.168.0.77 e 192.168.0.78.

Como já mencionado, para garantir a distribuição uniforme de solicitações entre servidores, usaremos o balanceador de carga HAProxy, que funcionará no nó de entrada da infraestrutura Zimbra executando o Ubuntu 18.04. A instalação do haproxy neste sistema operacional é feita usando o comando sudo apt-get install haproxy . Depois disso, no arquivo / etc / default / haproxy, altere o parâmetro ENABLED = 0 para ENABLED = 1 . Agora, para garantir que o haproxy esteja funcionando, basta digitar o comando service haproxy . Caso esse serviço funcione, ficará claro na saída do comando.

Uma das principais desvantagens do HAProxy é que, por padrão, ele não transmite o endereço IP do cliente conectado, substituindo-o pelo seu. Isso pode levar a situações em que os emails enviados pelos atacantes não podem ser identificados pelo endereço IP para adicioná-lo à lista negra. No entanto, esse problema pode ser resolvido. Para fazer isso, edite o arquivo /opt/zimbra/common/conf/master.cf.in em servidores com Postfix e adicione as seguintes linhas:

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 

Por esse motivo, abriremos as portas 26, 466 e 588, que receberão o tráfego de entrada do HAProxy. Depois que os arquivos são salvos, você deve reiniciar o Postfix em todos os servidores usando o comando zmmtactl restart.

Depois disso, vamos começar a configurar o HAProxy. Para fazer isso, primeiro crie uma cópia de backup do arquivo com as configurações cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak . Em seguida, abra o arquivo de origem /etc/haproxy/haproxy.cfg em um editor de texto e comece a adicionar gradualmente as configurações necessárias. O primeiro bloco incluirá um servidor que remove os logs, configurando o número máximo permitido de conexões simultâneas, além de especificar o nome e o grupo do usuário ao qual o processo executável pertencerá.

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

A figura de 5000 conexões simultâneas apareceu por um motivo. Como existem 4000 caixas de correio em nossa infraestrutura, é necessário prever a probabilidade de que todas elas sejam enviadas para o correio comercial ao mesmo tempo. Além disso, você precisa deixar uma pequena margem caso o número deles aumente.

Agora adicione um bloco com as configurações padrão:

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

Nesse bloco, o tempo limite máximo para o cliente e o servidor é definido para interromper a conexão quando expirar, e o modo de operação HAProxy também é definido. No nosso caso, o balanceador de carga funciona no modo TCP, ou seja, simplesmente transmite pacotes TCP sem analisar seu conteúdo.

Em seguida, adicionaremos regras para conexões em portas diferentes. Por exemplo, se a porta 25 for usada para conexões SMTP e transferência de e-mail, faz sentido redirecionar as conexões para os MTAs disponíveis em nossa infraestrutura. Se a conexão estiver na porta 80, é uma solicitação http que deve ser encaminhada para o Zimbra Proxy.

Regra para a porta 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 a porta 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 a porta 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 a porta 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 a porta 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 

Observe que nas regras de envio de pacotes TCP para o MTA, o parâmetro send-proxy está localizado próximo aos seus endereços. Isso é necessário para que, de acordo com as alterações feitas anteriormente nas configurações do Postfix, o endereço IP original do remetente seja enviado junto com os pacotes TCP.

Agora que todas as alterações necessárias no HAProxy foram feitas, é possível reiniciar o serviço usando o comando service haproxy restart e começar a usá-lo.

Para todas as perguntas relacionadas ao Zextras Suite, você pode entrar em contato com o representante da Zextras, Ekaterina Triandafilidi, pelo e-mail katerina@zextras.com

Source: https://habr.com/ru/post/pt479536/


All Articles