Lastverteilung in Zimbra Open-Source Edition mit HAProxy

Eine der Hauptaufgaben beim Aufbau umfangreicher Zimbra OSE-Infrastrukturen ist das effektive Load-Balancing. Neben der Erhöhung der Ausfallsicherheit des Dienstes ist es ohne Load-Balancing nicht möglich, eine gleichbleibende Reaktionsfähigkeit des Dienstes für alle Benutzer zu gewährleisten. Um diese Aufgabe zu lösen, kommen Load-Balancer zum Einsatz – Software- und Hardwarelösungen, die Anfragen zwischen Servern umverteilen. Dabei gibt es sowohl recht primitive Ansätze wie RoundRobin, der einfach jede nächste Anfrage an den nächsten Server in der Liste weiterleitet, als auch fortgeschrittenere Lösungen wie HAProxy, das aufgrund einer Reihe von gewichtigen Vorteilen häufig in stark ausgelasteten Recheninfrastrukturen eingesetzt wird. Lassen Sie uns also ansehen, wie die Zusammenarbeit zwischen dem Load-Balancer HAProxy und Zimbra OSE gewährleistet werden kann.

Lastverteilung in Zimbra Open-Source Edition mit HAProxy

Die gegebene Aufgabe bezieht sich auf die Infrastruktur von Zimbra OSE, welche zwei Zimbra-Proxys, zwei LDAP-Server und eine LDAP-Replik, vier Mail-Speicher mit jeweils 1000 Postfächern sowie drei MTAs umfasst. Da wir es mit einem Mail-Server zu tun haben, wird er drei Arten von Traffic erhalten, die ein Load-Balancing benötigen: HTTP für das Laden des Webclients, sowie POP und SMTP für den E-Mail-Versand. Der HTTP-Traffic wird dabei an Server Zimbra Proxy mit den IP-Adressen 192.168.0.57 und 192.168.0.58 weitergeleitet, während der SMTP-Traffic an die MTA-Server mit den IP-Adressen 192.168.0.77 und 192.168.0.78 geht.

Wie bereits erwähnt, werden wir zur Gewährleistung einer gleichmäßigen Verteilung der Anfragen zwischen den Servern den Load-Balancer HAProxy verwenden, der auf dem Eingangsknoten der Zimbra-Infrastruktur unter Ubuntu 18.04 läuft. Die Installation von haproxy in diesem Betriebssystem erfolgt mit dem Befehl sudo apt-get install haproxy. Danach ist es notwendig, die Einstellung in der Datei /etc/default/haproxy zu ändern, wobei der Parameter ENABLED=0 auf inENABLED=1 geändert werden muss. Nun genügt es, um sicherzustellen, dass haproxy läuft, den Befehl einzugebenservice haproxy

. Wenn der Dienst läuft, wird dies an der Ausgabe des Befehls erkennbar sein. IP-Adresse, um ihn zur Blacklist hinzuzufügen. Dieses Problem kann jedoch gelöst werden. Dazu muss die Datei bearbeitet werden. /opt/zimbra/common/conf/master.cf.in auf Servern mit Postfix und die folgenden Zeilen 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

Damit öffnen wir die Ports 26, 466 und 588, die den eingehenden Verkehr von HAProxy annehmen werden. Nachdem die Dateien gespeichert wurden, sollte Postfix auf allen Servern mit dem Befehl zmmtactl restart neu gestartet werden.

Anschließend gehen wir zu den Einstellungen von HAProxy über. Zuerst erstellen wir eine Sicherungskopie der Konfigurationsdatei. cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Dann öffnen wir die ursprüngliche Datei in einem Texteditor. /etc/haproxy/haproxy.cfg und beginnen Schritt für Schritt, die erforderlichen Einstellungen hinzuzufügen. Der erste Block wird das Hinzufügen des Servers, der die Protokolle aufnimmt, die Festlegung der maximalen Anzahl gleichzeitiger Verbindungen sowie die Angabe des Benutzernamens und der Benutzergruppe, zu denen der ausführende Prozess gehören wird.

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

Die Zahl von 5000 gleichzeitigen Verbindungen ist nicht zufällig gewählt. Da wir in unserer Infrastruktur 4000 E-Mail-Postfächer haben, muss die Möglichkeit berücksichtigt werden, dass alle gleichzeitig in ihre Arbeits-E-Mails einsteigen. Zudem sollte ein kleiner Puffer eingeplant werden, falls die Zahl steigt.

Jetzt fügen wir einen Block mit den Standard-Einstellungen 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 dieser Zeit zu trennen, sowie der Betriebsmodus von HAProxy definiert. In unserem Fall arbeitet der Lastenausgleich im TCP-Modus, was bedeutet, dass TCP-Pakete weitergeleitet werden, ohne ihren Inhalt zu analysieren.

Als Nächstes fügen wir Regeln für Verbindungen an verschiedenen Ports hinzu. Wenn beispielsweise Port 25 für SMTP-Verbindungen und den E-Mail-Versand verwendet wird, macht es Sinn, Verbindungen zu diesem Port an die in unserer Infrastruktur vorhandenen MTA weiterzuleiten. Wenn jedoch eine Verbindung auf Port 80 erfolgt, handelt es sich um eine http-Anfrage, die an den Zimbra Proxy weitergeleitet werden muss.

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 zur Weiterleitung von TCP-Paketen an die MTA neben deren Adressen der Parameter send-proxysteht. Dies ist notwendig, damit, gemäß der zuvor von uns vorgenommenen Änderungen an den Postfix-Einstellungen, die ursprüngliche IP-Adresse des Absenders zusammen mit den TCP-Paketen übertragen wird.

Jetzt, wo alle notwendigen Änderungen in HAProxy vorgenommen wurden, kann der Dienst mit dem Befehl service haproxy restart neugestartet werden, und wir können ihn verwenden.

Bei allen Fragen zu Zextras Suite können Sie sich an die Vertreterin der Firma „Zextras“, Ekaterina Triandafilidi, per E-Mail unter katerina@zextras.com wenden.

Quelle: habr.com

60GB SSD 8Gb DDR4