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.

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_adjustAuf 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/haproxyDie 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 5sIn 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-proxyRegel 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-proxyRegel 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-proxyRegel 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 checkRegel 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 checkBitte 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
