A nagyméretű Zimbra OSE infrastruktúrák építésekor az egyik fő feladat a megfelelő terheléselosztás. Amellett, hogy növeli a szolgáltatás hibatűrését, terheléselosztás nélkül nem biztosítható a szolgáltatás azonos válaszkészsége minden felhasználó számára. A probléma megoldására terheléselosztókat használnak – olyan szoftver- és hardvermegoldásokat, amelyek újraelosztják a kéréseket a szerverek között. Vannak köztük meglehetősen primitívek, mint például a RoundRobin, amely minden további kérést egyszerűen elküld a lista következő szerverére, és vannak fejlettebbek is, például a HAProxy, amelyet széles körben használnak nagy terhelésű számítástechnikai infrastruktúrákban, mivel egy számos jelentős előny. Vessünk egy pillantást arra, hogyan lehet a HAProxy terheléselosztót és a Zimbra OSE-t együtt dolgozni.
Így a feladat feltételei szerint megkapjuk a Zimbra OSE infrastruktúrát, amely két Zimbra Proxy-val, két LDAP és LDAP Replica szerverrel, négy, egyenként 1000 postafiókos postatárolóval és három MTA-val rendelkezik. Tekintettel arra, hogy levelezőszerverrel van dolgunk, három fajta forgalmat fog fogadni, amelyek kiegyenlítést igényelnek: HTTP a webkliens letöltéséhez, valamint POP és SMTP az e-mailek küldéséhez. Ebben az esetben a HTTP forgalom a 192.168.0.57 és 192.168.0.58 IP-című Zimbra Proxy szerverekre, az SMTP forgalom pedig a 192.168.0.77 és 192.168.0.78 IP-című MTA szerverekre megy.
Amint már említettük, a kérések egyenletes elosztásának biztosítására a szerverek között a HAProxy terheléselosztót használjuk, amely az Ubuntu 18.04-et futtató Zimbra infrastruktúra bemeneti csomópontján fog futni. A haproxy telepítése erre az operációs rendszerre a paranccsal történik sudo apt-get install haproxy. Ezt követően a fájlban kell lennie /etc/default/haproxy paraméter módosítása ENGEDÉLYEZETT = 0 on ENGEDÉLYEZETT = 1. Most, hogy megbizonyosodjon arról, hogy a haproxy működik, csak írja be a parancsot szolgáltatási haproxy. Ha ez a szolgáltatás fut, ez egyértelmű lesz a parancs kimenetéből.
A HAProxy egyik fő hátránya, hogy alapértelmezés szerint nem továbbítja a csatlakozó kliens IP címét, helyette a sajátjával. Ez olyan helyzetekhez vezethet, amikor a támadók által küldött e-maileket nem lehet IP-cím alapján azonosítani ahhoz, hogy a feketelistára kerüljön. Ez a probléma azonban megoldható. Ehhez szerkeszteni kell a fájlt /opt/zimbra/common/conf/master.cf.in Postfix szolgáltatással rendelkező szervereken, és adja hozzá 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
Emiatt megnyitjuk a 26-os, 466-os és 588-as portokat, amelyek a HAProxytól fogadják a bejövő forgalmat. A fájlok mentése után a zmmtactl restart paranccsal újra kell indítani a Postfixet az összes kiszolgálón.
Ezt követően kezdjük el a HAProxy beállítását. Ehhez először készítsen biztonsági másolatot a beállítási fájlról cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Ezután nyissa meg a forrásfájlt egy szövegszerkesztőben /etc/haproxy/haproxy.cfg és kezdje el lépésről lépésre hozzáadni a szükséges beállításokat. Az első blokk egy naplókat fogadó szerver hozzáadása, az egyidejű kapcsolatok maximális megengedett számának beállítása, valamint a felhasználó nevének és csoportjának megadása, amelyhez a végrehajtó folyamat tartozik.
global
user daemon
group daemon
daemon
log 127.0.0.1 daemon
maxconn 5000
chroot /var/lib/haproxy
Okkal jelent meg az 5000 egyidejű kapcsolat száma. Mivel infrastruktúránkban 4000 postafiók található, mérlegelnünk kell annak lehetőségét, hogy mindegyikük egyszerre éri el a munkahelyi e-mailjeit. Ezenkívül egy kis tartalékot kell hagyni arra az esetre, ha számuk növekedne.
Most adjunk hozzá egy blokkot alapértelmezett beállításokkal:
defaults
timeout client 1m
log global
mode tcp
timeout server 1m
timeout connect 5s
Ez a blokk beállítja a maximális időtúllépést az ügyfél és a kiszolgáló számára, hogy lezárja a kapcsolatot, amikor lejár, és beállítja a HAProxy működési módját is. Esetünkben a terheléselosztó TCP módban működik, vagyis egyszerűen továbbítja a TCP-csomagokat anélkül, hogy a tartalmukat elemezné.
Ezután adunk hozzá szabályokat a különböző portokon lévő kapcsolatokhoz. Például, ha a 25-ös portot SMTP-kapcsolatokhoz és levelezéshez használjuk, akkor célszerű az arra irányuló kapcsolatokat az infrastruktúránkban elérhető MTA-k felé továbbítani. Ha a kapcsolat a 80-as porton van, akkor ez egy http-kérés, amelyet továbbítani kell a Zimbra Proxynak.
A 25-ös portra vonatkozó szabály:
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
A 465-ös portra vonatkozó szabály:
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
A 587-ös portra vonatkozó szabály:
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
A 80-ös portra vonatkozó szabály:
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
A 443-ös portra vonatkozó szabály:
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
Kérjük, vegye figyelembe, hogy a TCP-csomagok MTA-ba továbbításának szabályaiban a címek mellett található egy paraméter küld-proxy. Erre azért van szükség, hogy a Postfix beállításokon korábban végrehajtott változtatásainknak megfelelően a feladó eredeti IP-címe is elküldésre kerüljön a TCP-csomagokkal együtt.
Most, hogy minden szükséges módosítást végrehajtott a HAProxy-n, a paranccsal újraindíthatja a szolgáltatást szolgáltatás haproxy újraindítása és kezdje el használni.
A Zextras Suite szolgáltatással kapcsolatos minden kérdésével forduljon a Zextras képviselőjéhez, Ekaterina Triandafilidihez e-mailben. [e-mail védett]
Forrás: will.com