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.

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_adjustEzzel 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/haproxyAz 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 5sEbben 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-proxySzabá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-proxySzabá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-proxySzabá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 checkSzabá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 checkFelhí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
