Terheléselosztás a Zimbra nyílt forráskódú kiadásban HAProxy használatával

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.

Terheléselosztás a Zimbra nyílt forráskódú kiadásban HAProxy használatával

Í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

Hozzászólás