Lastausgleich in der Zimbra Open-Source Edition mit HAProxy

Eine der Hauptaufgaben beim Aufbau großer Zimbra OSE-Infrastrukturen ist die ordnungsgemäße Lastverteilung. Abgesehen davon, dass dadurch die Fehlertoleranz des Dienstes erhöht wird, ist es ohne Lastausgleich unmöglich, die gleiche Reaktionsfähigkeit des Dienstes für alle Benutzer sicherzustellen. Um dieses Problem zu lösen, werden Load Balancer eingesetzt – Software- und Hardwarelösungen, die Anfragen zwischen Servern neu verteilen. Darunter gibt es recht einfache wie RoundRobin, das einfach jede nachfolgende Anfrage an den nächsten Server in der Liste sendet, und es gibt auch fortgeschrittenere wie HAProxy, das aufgrund von a weit verbreitet in Hochlast-Computing-Infrastrukturen verwendet wird zahlreiche wesentliche Vorteile. Sehen wir uns an, wie Sie den HAProxy Load Balancer und Zimbra OSE zusammenarbeiten lassen können.

Lastausgleich in der Zimbra Open-Source Edition mit HAProxy

Gemäß den Bedingungen der Aufgabe erhalten wir also die Zimbra OSE-Infrastruktur, die über zwei Zimbra Proxy, zwei LDAP- und LDAP Replica-Server, vier Mailspeicher mit jeweils 1000 Postfächern und drei MTAs verfügt. Da es sich um einen Mailserver handelt, empfängt dieser drei Arten von Datenverkehr, die ausgeglichen werden müssen: HTTP zum Herunterladen des Webclients sowie POP und SMTP zum Senden von E-Mails. In diesem Fall wird der HTTP-Verkehr an Zimbra-Proxy-Server mit den IP-Adressen 192.168.0.57 und 192.168.0.58 weitergeleitet, und der SMTP-Verkehr wird an MTA-Server mit den IP-Adressen 192.168.0.77 und 192.168.0.78 weitergeleitet.

Um sicherzustellen, dass Anfragen gleichmäßig auf die Server verteilt werden, verwenden wir, wie bereits erwähnt, den HAProxy Load Balancer, der auf dem Ingress-Knoten der Zimbra-Infrastruktur mit Ubuntu 18.04 ausgeführt wird. Die Installation von haproxy auf diesem Betriebssystem erfolgt über den Befehl sudo apt-get install haproxy. Danach benötigen Sie in der Datei /etc/default/haproxy Parameter ändern AKTIVIERT = 0 auf AKTIVIERT = 1. Um nun sicherzustellen, dass haproxy funktioniert, geben Sie einfach den Befehl ein Dienst Haproxy. Wenn dieser Dienst ausgeführt wird, wird dies aus der Ausgabe des Befehls deutlich.

Einer der Hauptnachteile von HAProxy besteht darin, dass es standardmäßig nicht die IP-Adresse des verbindenden Clients übermittelt und diese durch seine eigene ersetzt. Dies kann dazu führen, dass von Angreifern gesendete E-Mails nicht anhand der IP-Adresse identifiziert werden können, um sie zur Blacklist hinzuzufügen. Dieses Problem kann jedoch gelöst werden. Dazu müssen Sie die Datei bearbeiten /opt/zimbra/common/conf/master.cf.in auf Servern mit Postfix und fügen Sie die folgenden Zeilen hinzu:

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

Aus diesem Grund werden wir die Ports 26, 466 und 588 öffnen, die eingehenden Datenverkehr von HAProxy empfangen. Nachdem die Dateien gespeichert wurden, sollten Sie Postfix auf allen Servern mit dem Befehl zmmtactl restart neu starten.

Danach beginnen wir mit der Einrichtung von HAProxy. Erstellen Sie dazu zunächst eine Sicherungskopie der Einstellungsdatei cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Öffnen Sie dann die Quelldatei in einem Texteditor /etc/haproxy/haproxy.cfg und beginnen Sie Schritt für Schritt mit dem Hinzufügen der erforderlichen Einstellungen. Der erste Block besteht darin, einen Server hinzuzufügen, der Protokolle entgegennimmt, die maximal zulässige Anzahl gleichzeitiger Verbindungen festzulegen und den Namen und die Gruppe des Benutzers anzugeben, zu dem der ausgeführte Prozess gehören soll.

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

Die Zahl von 5000 gleichzeitigen Verbindungen erschien aus einem bestimmten Grund. Da wir über 4000 Postfächer in unserer Infrastruktur verfügen, müssen wir die Möglichkeit in Betracht ziehen, dass alle gleichzeitig auf ihre geschäftlichen E-Mails zugreifen. Darüber hinaus ist es notwendig, eine kleine Reserve für den Fall zu lassen, dass sich ihre Anzahl erhöht.

Fügen wir nun einen Block mit Standardeinstellungen hinzu:

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

Dieser Block legt das maximale Zeitlimit für den Client und den Server fest, um die Verbindung zu schließen, wenn sie abläuft, und legt außerdem den Betriebsmodus von HAProxy fest. In unserem Fall arbeitet der Load Balancer im TCP-Modus, das heißt, er überträgt einfach TCP-Pakete, ohne deren Inhalt zu analysieren.

Als nächstes werden wir Regeln für Verbindungen an verschiedenen Ports hinzufügen. Wenn beispielsweise Port 25 für SMTP-Verbindungen und E-Mails verwendet wird, ist es sinnvoll, Verbindungen dorthin an die in unserer Infrastruktur verfügbaren MTAs weiterzuleiten. Wenn die Verbindung über Port 80 erfolgt, handelt es sich um eine HTTP-Anfrage, die an 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 für die Weiterleitung von TCP-Paketen an den MTA neben deren Adressen ein Parameter steht Sende-Proxy. Dies ist notwendig, damit gemäß den Änderungen, die wir zuvor an den Postfix-Einstellungen vorgenommen haben, die ursprüngliche IP-Adresse des Absenders zusammen mit TCP-Paketen gesendet wird.

Nachdem nun alle notwendigen Änderungen an HAProxy vorgenommen wurden, können Sie den Dienst mit dem Befehl neu starten Dienst-Haproxy-Neustart und fangen Sie an, es zu verwenden.

Bei allen Fragen im Zusammenhang mit der Zextras Suite können Sie sich per E-Mail an die Vertreterin von Zextras Ekaterina Triandafilidi wenden [E-Mail geschützt]

Source: habr.com

Kommentar hinzufügen