Zatížení balancování v Zimbra Open-Source Edition pomocí HAProxy

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.

Zatížení balancování v Zimbra Open-Source Edition pomocí HAProxy

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_adjust

Dí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 5s

V 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-proxy

Pravidlo 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-proxy

Pravidlo 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-proxy

Pravidlo 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 check

Pravidlo 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 check

Vš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

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster