Lastverteilung in der Zimbra Open-Source Edition mit HAProxy

Eines der Hauptziele beim Aufbau umfangreicher Zimbra OSE-Infrastrukturen ist eine effektive Lastverteilung. Diese erhöht nicht nur die Ausfallsicherheit des Dienstes, sondern ist auch unerlässlich, um eine einheitliche Reaktionsgeschwindigkeit für alle Benutzer zu gewährleisten. Um dieses Problem zu lösen, werden Lastverteiler eingesetzt — sowohl software- als auch hardwarebasierte Lösungen, die Anfragen zwischen Servern umverteilen. Dazu gehören einfache Systeme wie RoundRobin, das einfach jede nächste Anfrage an den nächsten Server in der Liste weiterleitet, aber auch fortschrittlichere Methoden wie HAProxy, das aufgrund seiner zahlreichen Vorteile in stark belasteten Recheninfrastrukturen weit verbreitet ist. Lassen Sie uns daher ansehen, wie die Zusammenarbeit zwischen dem Lastverteiler HAProxy und Zimbra OSE sichergestellt werden kann.

Lastverteilung in der Zimbra Open-Source Edition mit HAProxy

Im Rahmen dieser Aufgabe haben wir eine Zimbra OSE-Infrastruktur, die zwei Zimbra Proxys, zwei LDAP-Server und ein LDAP-Replika, sowie vier Mailstores mit jeweils 1000 Mailboxen und drei MTA umfasst. Da wir es mit einem Mailserver zu tun haben, wird er drei Arten von Traffic erhalten, die balanciert werden müssen: HTTP für den Web-Client, sowie POP und SMTP für den E-Mail-Versand. Der HTTP-Traffic wird an Server die Zimbra Proxys mit den IP-Adressen 192.168.0.57 und 192.168.0.58 geleitet, während der SMTP-Traffic an die MTA-Server mit den IP-Adressen 192.168.0.77 und 192.168.0.78 gesendet wird.

Wie bereits erwähnt, werden wir zur Gewährleistung einer gleichmäßigen Verteilung der Anfragen zwischen den Servern den Load-Balancer HAProxy verwenden, der im Eingangs-Knoten der Zimbra-Infrastruktur unter Ubuntu 18.04 betrieben wird. Die Installation von haproxy unter diesem Betriebssystem erfolgt mit dem Befehl sudo apt-get install haproxy. Danach muss in der Datei /etc/default/haproxy der Parameter ENABLED=0 findet man inENABLED=1 . Um sicherzustellen, dass haproxy läuft, genügt es, den Befehlservice haproxy

einzugeben. Wenn dieser Dienst läuft, wird dies durch die Ausgabe des Befehls deutlich. die IP-Adresse gebunden sind, um sie auf eine Blacklist zu setzen. Dieses Problem kann jedoch gelöst werden. Dazu muss die Datei /opt/zimbra/common/conf/master.cf.in auf Servern mit Postfix bearbeitet werden, und die folgenden Zeilen müssen hinzugefügt werden:

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

Auf diese Weise öffnen wir die Ports 26, 466 und 588, die eingehenden Datenverkehr von HAProxy empfangen. Nachdem die Dateien gespeichert wurden, sollte Postfix auf allen Servern mit dem Befehl zmmtactl restart neu gestartet werden.

Danach beginnen wir mit der Konfiguration von HAProxy. Zuerst erstellen wir eine Sicherungskopie der Konfigurationsdatei. cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Dann öffnen wir die Ursprungsdatei in einem Texteditor /etc/haproxy/haproxy.cfg und fügen schrittweise die erforderlichen Einstellungen hinzu. Der erste Block wird das Hinzufügen des Servers zur Protokollierung, die Festlegung der maximalen Anzahl gleichzeitiger Verbindungen sowie die Angabe des Benutzernamens und der Gruppe umfassen, zu der der ausführende Prozess gehört.

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

Die Zahl von 5000 gleichzeitigen Verbindungen wurde nicht ohne Grund gewählt. Da wir in unserer Infrastruktur 4000 E-Mail-Postfächer haben, muss die Möglichkeit berücksichtigt werden, dass alle gleichzeitig auf ihre E-Mails zugreifen. Außerdem sollte ein kleiner Puffer eingeplant werden, falls die Anzahl steigen sollte.

Jetzt fügen wir den Block mit den Standardeinstellungen hinzu:

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

In diesem Block wird die maximale Wartezeit für den Client und den Server festgelegt, um die Verbindung bei Ablauf zu trennen, sowie der Betriebsmodus von HAProxy definiert. In unserem Fall arbeitet der Lastenausgleich im TCP-Modus, das heißt, er überträgt einfach TCP-Pakete, ohne deren Inhalt zu analysieren.

Als Nächstes fügen wir Regeln für Verbindungen auf verschiedenen Ports hinzu. Beispielsweise macht es Sinn, Verbindungen auf Port 25, der für SMTP-Verbindungen und den Mailversand verwendet wird, zu unserem MTA in der Infrastruktur weiterzuleiten. Bei Verbindungen auf Port 80 handelt es sich um HTTP-Anfragen, die an den Zimbra Proxy weitergeleitet werden müssen.

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

Bitte beachten Sie, dass in den Regeln für die Weiterleitung von TCP-Paketen an den MTA neben ihren Adressen der Parameter send-proxy. Dies ist notwendig, damit gemäß den zuvor vorgenommenen Änderungen in den Postfix-Einstellungen auch die ursprüngliche IP-Adresse des Absenders zusammen mit den TCP-Paketen übertragen wird.

Jetzt, da alle erforderlichen Änderungen in HAProxy vorgenommen wurden, kann der Dienst mit dem Befehl service haproxy restart neustarten werden, um ihn zu verwenden.

Bei Fragen zu Zextras Suite können Sie sich an die Unternehmensvertreterin von «Zextras», Ekaterina Triandafiliidi, unter der E-Mail-Adresse katerina@zextras.com wenden.

Quelle: habr.com

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster