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.

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_adjustDamit ö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/haproxyDie 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 5sIn 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-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 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
