Jedním z hlavních úkolů při budování rozsáhlých infrastruktur Zimbra OSE je správné vyvažování zátěže. Kromě toho, že zvyšuje odolnost služby proti chybám, bez vyvažování zátěže není možné zajistit stejnou odezvu služby pro všechny uživatele. K vyřešení tohoto úkolu se používají vyrovnávače zátěže – softwarová a hardwarová řešení, která přerozdělují požadavky mezi servery. Mezi nimi jsou jak poměrně primitivní, jako je RoundRobin, který z každého následujícího požadavku směřuje k dalšímu serveru v seznamu, tak i sofistikovanější, například HAProxy, která je široce používána v vysoce zatížených výpočetních infrastrukturách díky řadě významných výhod. Pojďme se podívat na to, jak zajistit spolupráci vyrovnávače zátěže HAProxy a Zimbra OSE.

A takže podle podmínek úkolu máme infrastrukturu Zimbra OSE, ve které jsou dva Zimbra Proxy, dva servery LDAP a LDAP Replica, čtyři poštovní úložiště s 1000 poštovními schránkami na každém a tři MTA. S ohledem na to, že se zabýváme poštovním serverem, bude na něj směřovat tři typy provozu, které potřebují vyvažování: HTTP pro načítání webového klienta, jakož i POP a SMTP pro přenos elektronické pošty. Přičemž HTTP provoz bude směřovat na servery Zimbra Proxy s IP adresami 192.168.0.57 a 192.168.0.58, zatímco SMTP provoz bude směřovat na MTA servery s IP adresami 192.168.0.77 a 192.168.0.78.
Jak již bylo řečeno, pro zajištění rovnoměrného rozložení požadavků mezi servery budeme používat vyrovnávač zátěže HAProxy, který bude fungovat na vstupním uzlu infrastruktury Zimbra běžící na Ubuntu 18.04. Instalace haproxy v tomto operačním systému se provádí pomocí příkazu sudo apt-get install haproxy. Poté je třeba v souboru /etc/default/haproxy změnit parametr ENABLED=0 na ENABLED=1. Nyní, abychom se ujistili, že haproxy funguje, stačí zadat příkaz service haproxy. Pokud je tato služba aktivní, bude to patrné z výstupu příkazu.
Jedním z hlavních nedostatků HAProxy je to, že standardně nepřenáší IP adresu připojeného klienta, ale nahrazuje ji vlastní. To může vést k situacím, kdy nejsou příchozí zprávy od útočníků identifikovatelné podle IP adresu, abychom ho přidali na černou listinu. Nicméně, tento problém lze vyřešit. K tomu je nutné upravit soubor /opt/zimbra/common/conf/master.cf.in na serverech s Postfixem a přidat do něj následující řádky:
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_adjustDíky tomu otevřeme porty 26, 466 a 588, které budou přijímat příchozí provoz z HAProxy. Po uložení souborů je třeba restartovat Postfix na všech serverech pomocí příkazu zmmtactl restart.
Poté se pustíme do nastavení HAProxy. Nejprve vytvoříme záložní kopii souboru s nastavením cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Poté otevřeme zdrojový soubor v textovém editoru /etc/haproxy/haproxy.cfg a začneme postupně přidávat potřebná nastavení. Prvním blokem bude přidání serveru pro zaznamenávání logů, nastavení maximálního povoleného počtu současných připojení a také určení uživatelského jména a skupiny pro spouštěcí proces.
global
user daemon
group daemon
daemon
log 127.0.0.1 daemon
maxconn 5000
chroot /var/lib/haproxyČíslo 5000 současných připojení není náhodné. V naší infrastruktuře je 4000 e-mailových schránek, a je třeba zohlednit pravděpodobnost, že se všechny současně přihlásí do své pracovní pošty. Navíc je potřebné ponechat malou rezervu pro případ, že se jejich počet zvýší.
Nyní přidáme blok s výchozími nastaveními:
defaults
timeout client 1m
log global
mode tcp
timeout server 1m
timeout connect 5sV tomto bloku se stanoví maximální doba čekání pro klienta a server, aby došlo k přerušení spojení na konci této doby, a také se nastavil režim provozu HAProxy. V našem případě load balancer pracuje v režimu TCP, což znamená, že jednoduše předává TCP pakety, aniž by analyzoval jejich obsah.
Dále přidáme pravidla pro spojení na různých portech. Například, pokud je port 25 používán pro SMTP připojení a přenos pošty, má smysl přesměrovávat připojení k němu na MTA, které máme v naší infrastruktuře. Pokud však spojení prochází na portu 80, jedná se o http požadavek, který je třeba předat na Zimbra Proxy.
Pravidlo pro 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-proxyPravidlo pro 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-proxyPravidlo pro 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-proxyPravidlo pro 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 checkPravidlo pro 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 checkVšimněte si, že u pravidel pro přesměrování TCP paketů k MTA je vedle jejich adres uveden parametr send-proxy. To je nezbytné pro to, aby se podle našich dříve provedených změn v nastavení Postfixu přenášela spolu s TCP pakety také původní IP adresa odesílatele.
Nyní, když jsou všechny potřebné změny v HAProxy provedeny, můžeme restartovat službu pomocí příkazu service haproxy restart a začít ji používat.
Na všechny otázky týkající se Zextras Suite se můžete obrátit na zástupce společnosti „Zextras“ Ekaterinu Triandafilidi na e-mailu katerina@zextras.com
Zdroj: habr.com
