Vyrovnávání zátěže 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 problému se používají load balancery – softwarová a hardwarová řešení, která přerozdělují požadavky mezi servery. Mezi nimi jsou docela primitivní, jako je RoundRobin, který jednoduše posílá každý následující požadavek na další server v seznamu, a existují také pokročilejší, například HAProxy, který je široce používán ve vysoce zatěžovaných výpočetních infrastrukturách kvůli řadu významných výhod. Pojďme se podívat na to, jak můžete zajistit, aby HAProxy load balancer a Zimbra OSE spolupracovaly.

Vyrovnávání zátěže v Zimbra Open-Source Edition pomocí HAProxy

Podle podmínek úkolu máme tedy infrastrukturu Zimbra OSE, která má dva Zimbra Proxy, dva servery LDAP a LDAP Replica, čtyři poštovní úložiště s 1000 poštovními schránkami a tři MTA. Vzhledem k tomu, že máme co do činění s poštovním serverem, bude přijímat tři typy provozu, které potřebují vyvážení: HTTP pro stahování webového klienta a také POP a SMTP pro odesílání e-mailů. V tomto případě bude provoz HTTP směřovat na servery Zimbra Proxy s adresami IP 192.168.0.57 a 192.168.0.58 a provoz SMTP na servery MTA s adresami IP 192.168.0.77 a 192.168.0.78.

Jak již bylo zmíněno, abychom zajistili, že požadavky jsou distribuovány rovnoměrně mezi servery, použijeme nástroj pro vyrovnávání zatížení HAProxy, který poběží na vstupním uzlu infrastruktury Zimbra se systémem Ubuntu 18.04. Instalace haproxy na tento operační systém se provádí pomocí příkazu sudo apt-get install haproxy. Poté musíte v souboru /etc/default/haproxy změnit parametr ZAPNUTO = 0 na ZAPNUTO = 1. Nyní, abyste se ujistili, že haproxy funguje, stačí zadat příkaz servisní hapoxy. Pokud je tato služba spuštěna, bude to zřejmé z výstupu příkazu.

Jednou z hlavních nevýhod HAProxy je, že ve výchozím nastavení nepřenáší IP adresu připojujícího se klienta a nahrazuje ji vlastní. To může vést k situacím, kdy e-maily odeslané útočníky nelze identifikovat podle IP adresy a přidat je na černou listinu. Tento problém však lze vyřešit. Chcete-li to provést, musíte soubor upravit /opt/zimbra/common/conf/master.cf.in na serverech s Postfixem a přidejte k němu 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

Kvůli tomu otevřeme porty 26, 466 a 588, které budou přijímat příchozí provoz z HAProxy. Po uložení souborů byste měli restartovat Postfix na všech serverech pomocí příkazu zmmtactl restart.

Poté začněme nastavovat HAProxy. Chcete-li to provést, nejprve vytvořte záložní kopii souboru nastavení cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Poté otevřete zdrojový soubor v textovém editoru /etc/haproxy/haproxy.cfg a začněte do něj postupně přidávat potřebná nastavení. Prvním blokem bude přidání serveru, který pořizuje logy, nastavení maximálního povoleného počtu současných připojení a také určení jména a skupiny uživatele, do kterého bude spouštěný proces patřit.

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

Číslo 5000 4000 současných spojení se objevilo z nějakého důvodu. Vzhledem k tomu, že v naší infrastruktuře máme XNUMX poštovních schránek, musíme vzít v úvahu možnost, že všechny budou mít přístup ke svému pracovnímu e-mailu současně. Navíc je nutné nechat malou rezervu pro případ, že by se jejich počet zvýšil.

Nyní přidáme blok s výchozím nastavením:

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

Tento blok nastavuje maximální časový limit pro klient a server pro uzavření spojení po jeho vypršení a také nastavuje provozní režim HAProxy. V našem případě load balancer pracuje v režimu TCP, to znamená, že jednoduše přenáší TCP pakety, aniž by analyzoval jejich obsah.

Dále přidáme pravidla pro připojení na různých portech. Pokud se například port 25 používá pro připojení SMTP a poštu, pak má smysl předávat připojení k němu na MTA dostupné v naší infrastruktuře. Pokud je připojení na portu 80, jedná se o http požadavek, který je třeba předat 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

Vezměte prosím na vědomí, že v pravidlech pro předávání TCP paketů na MTA je vedle jejich adres parametr send-proxy. To je nezbytné, aby v souladu se změnami, které jsme provedli dříve v nastavení Postfixu, byla spolu s TCP pakety odeslána původní IP adresa jeho odesílatele.

Nyní, když byly v HAProxy provedeny všechny potřebné změny, můžete službu restartovat pomocí příkazu haproxy restart služby a začněte jej používat.

Se všemi dotazy týkajícími se Zextras Suite můžete kontaktovat zástupkyni Zextras Ekaterinu Triandafilidi e-mailem [chráněno e-mailem]

Zdroj: www.habr.com

Přidat komentář