A terheléselosztás a Zimbra Open-Source Edition-ben HAProxy segítségével

A Zimbra OSE skálázható infrastruktúrájának megépítésekor az egyik legfontosabb feladat a megfelelő terheléselosztás. Ez nemcsak a szolgáltatás megbízhatóságát növeli, hanem a terheléselosztás nélkül lehetetlen biztosítani a felhasználók számára egyenlő válaszidőt a szolgáltatástól. E kihívás megoldására terheléselosztókat használnak – szoftveres és hardveres megoldásokat, amelyek újra elosztják a kéréseket a szerverek között. Közöttük vannak viszonylag primitív megoldások, mint például a RoundRobin, amely egyszerűen a következő kérdést irányítja a következő szerverhez a listában, és vannak olyan fejlettebb megoldások, mint a HAProxy, ami széles körben alkalmazott a nagy terhelésű számítási infrastruktúrákban számos jelentős előnye miatt. Nézzük meg, hogyan biztosíthatjuk a terheléselosztó HAProxy és a Zimbra OSE együttes működését.

A terheléselosztás a Zimbra Open-Source Edition-ben HAProxy segítségével

Tehát a feladat feltételei szerint van egy Zimbra OSE infrastruktúránk, amelyben két Zimbra Proxy, két LDAP szerver és LDAP Replica, négy levelezőtároló, mindegyiken 1000 levelező fiókkal, valamint három MTA található. Figyelembe véve, hogy egy levelezőszerverrel van dolgunk, háromféle forgalom érkezik, amely terheléselosztást igényel: HTTP a webes kliens letöltéséhez, valamint POP és SMTP az elektronikus levelek továbbításához. Ezenkívül a HTTP-forgalom a következő címekre fog távozni: szerverek Zimbra Proxy a 192.168.0.57 és 192.168.0.58 IP-címekkel, míg az SMTP-forgalom az MTA szerverekre a 192.168.0.77 és 192.168.0.78 IP-címekkel fog távozni.

Ahogy már említettük, a kérések szerverek közötti egyenletes elosztásának biztosítása érdekében a HAProxy terheléselosztót fogjuk használni, amely az Ubuntu 18.04 operációs rendszer alatt működik a Zimbra infrastruktúra belépési csomópontján. A haproxy telepítése ezen az operációs rendszeren az alábbi paranccsal történik: sudo apt-get install haproxy. Ezt követően a következő fájlban /etc/default/haproxy meg kell változtatnunk a paramétert ENABLED=0 Gyorsan emlékezzünk vissza, hogyan működik a moduláris aritmetika. Az óra már egy ismert koncepció. Az órák használata ENABLED=1. Most, hogy megbizonyosodjunk arról, hogy a haproxy működik, elegendő beírni a parancsot: service haproxy. Ha ez a szolgáltatás működik, a parancs kimenetéből kiderül.

Az HAProxy egyik fő hiányossága, hogy alapértelmezés szerint nem továbbítja a csatlakozó kliens IP-címét, hanem a sajátját helyettesíti vele. Ez olyan helyzetekhez vezethet, amikor a küldött levelek nem azonosíthatók a támadók által. IP-cím alapján határozza meg a helyet, hogy azt fekete listára tegyük. Ez a probléma azonban megoldható. Ehhez szerkeszteni kell a fájlt /opt/zimbra/common/conf/master.cf.in Postfixszel rendelkező szervereken, és hozzá kell adni a következő sorokat:

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

Ezzel megnyitjuk a 26, 466 és 588 portokat, amelyek a HAProxy-ból érkező forgalmat fogadják. Miután a fájlokat elmentettük, újra kell indítani a Postfixet minden szerveren a zmmtactl restart parancs használatával.

Ezután folytatjuk a HAProxy beállítását. Először készítsünk egy biztonsági másolatot a konfigurációs fájlról: cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Ezután megnyitjuk a szövegszerkesztőben az eredeti fájlt /etc/haproxy/haproxy.cfg és lépésről lépésre hozzáadjuk a szükséges beállításokat. Az első blokk a naplókat gyűjtő szerver hozzáadása, a maximálisan engedélyezett egyidejű kapcsolatok számának beállítása, valamint a végrehajtási folyamatot képviselő felhasználó neve és csoportja.

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

Az 5000 egyidejű csatlakozás száma nem véletlenül merült fel. Mivel az infrastruktúránkban 4000 levelezőfiók található, figyelembe kell venni annak a lehetőségét, hogy mindannyian egyszerre lépnek be a munkai e-mailjükbe. Ezen kívül érdemes egy kis tartalékot is hagyni arra az esetre, ha a számuk növekedne.

Most hozzáadjuk az alapértelmezett beállításokat tartalmazó blokkot:

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

Ebben a blokkban a kliens és a szerver maximális várakozási idejét állítjuk be, hogy a kapcsolatot annak lejártakor megszakítsuk, valamint beállítjuk a HAProxy működési módját. A mi esetünkben a terheléselosztó TCP módban működik, azaz egyszerűen továbbítja a TCP csomagokat anélkül, hogy elemezné azok tartalmát.

Továbbá szabályokat adunk hozzá a különböző portokon érkező kapcsolatokhoz. Például, ha a 25-ös port az SMTP-kapcsolatok és levelek továbbítása, érdemes a hozzá érkező kapcsolatokat a rendelkezésre álló MTA-ra irányítani az infrastruktúránkban. Ha azonban a kapcsolat a 80-as porton érkezik, akkor az egy http-kérés, amelyet a Zimbra Proxy-ra kell továbbítanunk.

Szabály a 25-ös portra:

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

Szabály a 465-ös portra:

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

Szabály a 587-es portra:

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

Szabály a 80-as portra:

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

Szabály a 443-as portra:

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

Felhívjuk figyelmét, hogy a TCP-csomagok MTA-hoz történő továbbítására vonatkozó szabályokban a címük mellett álló paraméter: send-proxy. Ez szükséges ahhoz, hogy a Postfix beállításaiban korábban végrehajtott változtatások alapján a TCP-csomagokkal együtt a feladó eredeti IP-címe is továbbításra kerüljön.

Most, hogy a szükséges változtatásokat elvégeztük a HAProxy-ban, újraindíthatjuk a szolgáltatást a következő parancs segítségével: service haproxy restart és elkezdhetjük használni.

Bármilyen kérdése van a Zextras Suitere vonatkozóan, a Zextras cég képviselőjéhez, Trianda Katerinához fordulhat a katerina@zextras.com e-mail címen.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster