Bilanciamento del carico in Zimbra Open-Source Edition tramite HAProxy

Una delle principali sfide nella creazione di infrastrutture scalabili per Zimbra OSE è una corretta bilanciatura del carico. Oltre a migliorare l'affidabilità del servizio, senza bilanciamento del carico non è possibile garantire una reattività uniforme del servizio per tutti gli utenti. Per affrontare questa sfida, si utilizzano i bilanciatori di carico: soluzioni software e hardware che ridistribuiscono le richieste tra i server. Tra questi ci sono bilanciatori piuttosto primitivi, come RoundRobin, che semplicemente indirizza ogni richiesta successiva al server successivo nella lista, così come soluzioni più avanzate, come HAProxy, ampiamente utilizzato in infrastrutture di calcolo ad alta intensità per diversi motivi significativi. Diamo un'occhiata a come garantire la corretta integrazione tra il bilanciatore di carico HAProxy e Zimbra OSE.

Bilanciamento del carico in Zimbra Open-Source Edition tramite HAProxy

Quindi, secondo le condizioni del compito, ci viene fornita un'infrastruttura Zimbra OSE con due Zimbra Proxy, due server LDAP e un Replica LDAP, quattro archivi di posta con 1000 cassette postali ciascuno e tre MTA. Considerando che trattiamo con un server di posta, ci saranno tre tipi di traffico che necessitano di bilanciamento: HTTP per scaricare il client web e POP e SMTP per l'invio di email. In questo caso, il traffico HTTP andrà su servers Zimbra Proxy con indirizzi IP 192.168.0.57 e 192.168.0.58, mentre il traffico SMTP andrà ai server MTA con indirizzi IP 192.168.0.77 e 192.168.0.78.

Come già detto, per garantire una distribuzione uniforme delle richieste tra i server utilizzeremo il bilanciatore di carico HAProxy, che funzionerà sul nodo di ingresso dell'infrastruttura Zimbra gestita da Ubuntu 18.04. L'installazione di haproxy su questo sistema operativo avviene con il comando sudo apt-get install haproxy. Successivamente, occorre modificare il parametro nel file /etc/default/haproxy cambiando il valore ENABLED=0 in inENABLED=1 . Ora, per assicurarci che haproxy funzioni, è sufficiente inserire il comandoservice haproxy

. Se questo servizio è attivo, sarà evidente dall'output del comando. indirizzo IP, per aggiungerlo alla lista nera. Tuttavia, questa questione può essere risolta. Per fare ciò, è necessario modificare il file /opt/zimbra/common/conf/master.cf.in sui server con Postfix e aggiungere le seguenti righe:

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

Grazie a questo, apriremo le porte 26, 466 e 588, che riceveranno il traffico in entrata da HAProxy. Dopo aver salvato i file, è necessario riavviare Postfix su tutti i server usando il comando zmmtactl restart.

Dopo di ciò, procederemo alla configurazione di HAProxy. Per fare ciò, prima creeremo un backup del file di configurazione cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Poi apriremo il file originale in un editor di testo /etc/haproxy/haproxy.cfg e inizieremo ad aggiungere gradualmente le impostazioni necessarie. Il primo blocco sarà l'aggiunta del server che registra i log, la configurazione del numero massimo di connessioni simultanee e l'indicazione del nome e del gruppo utente a cui apparterrà il processo eseguibile.

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

Il numero di 5000 connessioni simultanee non è casuale. Poiché nella nostra infrastruttura ci sono 4000 caselle di posta, è necessario considerare la possibilità che tutte accedano contemporaneamente alla loro posta di lavoro. Inoltre, è importante lasciare un piccolo margine nel caso in cui il loro numero aumenti.

Ora aggiungiamo un blocco con le impostazioni predefinite:

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

In questo blocco si imposta il tempo massimo di attesa per il client e il server, per interrompere la connessione al termine di questo periodo, e si definisce la modalità di funzionamento di HAProxy. Nel nostro caso, il bilanciatore di carico opera in modalità TCP, il che significa che si limita a trasmettere pacchetti TCP senza analizzarne il contenuto.

Successivamente, aggiungeremo regole per le connessioni su diverse porte. Ad esempio, se la porta 25 viene utilizzata per connessioni SMTP e invio di email, ha senso reindirizzare le connessioni a essa verso gli MTA disponibili nella nostra infrastruttura. Se invece la connessione arriva sulla porta 80, si tratta di una richiesta http che deve essere inoltrata a Zimbra Proxy.

Regola per la 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

Regola per la 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

Regola per la 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

Regola per la 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

Regola per la 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

Si noti che nelle regole per l'inoltro dei pacchetti TCP agli MTA accanto ai loro indirizzi c'è il parametro send-proxy. Questo è necessario affinché, in conformità con le modifiche apportate in precedenza alle impostazioni di Postfix, venga inoltrato insieme ai pacchetti TCP anche l'indirizzo IP originale del mittente.

Ora che tutte le modifiche necessarie in HAProxy sono state apportate, è possibile riavviare il servizio utilizzando il comando service haproxy restart e procedere con il suo utilizzo.

Per qualsiasi domanda riguardante Zextras Suite, puoi contattare il Rappresentante della compagnia "Zextras", Ekaterina Triandafyllidi all'indirizzo email katerina@zextras.com

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster