Üks Zimbra OSE mastaapsete infrastruktuuride loomise peamisi ülesandeid on koormuse tasakaalustamine. See mitte ainult ei tõsta teenuse töökindlust, vaid ilma koormuse tasakaalustamiseta on võimatu tagada teenuse ühtlast reageerimiskiirus kõigile kasutajatele. Selle probleemi lahendamiseks kasutatakse koormuse tasakaalustajaid - nii tarkvaralisi kui ka riistvaralisi lahendusi, mis jaotavad päringud serverite vahel ümber. Nende hulgas on nii üsna primitiivsed lahendused, nagu RoundRobin, mis suunab igasuguse järgmise päringu järgmisele serverile nimekirjas, kui ka keerukamad, näiteks HAProxy, mida kasutatakse laialdaselt kõrgete koormuste arvutite infrastruktuurides mitmete oluliste eeliste tõttu. Vaadakem nüüd, kuidas saab tagada HAProxy koormuse tasakaalustaja ja Zimbra OSE koostöö.

Nii et, ülesande tingimustes on meil Zimbra OSE infrastruktuur, kus on kaks Zimbra Proxy, kaks LDAP serverit ja LDAP Replica, neli postikasti salvestusseadet, kus igas on 1000 postkasti, ja kolm MTA-d. Arvesse võttes, et tegeleme postiserveriga, suundub sellele kolme tüüpi liiklus, mis vajab tasakaalustamist: HTTP veebiklientide laadimiseks, samuti POP ja SMTP e-kirjade edastamiseks. Samuti suundub HTTP liiklus serveritesse Zimbra Proxy-le, mille IP-aadressid on 192.168.0.57 ja 192.168.0.58, samas kui SMTP liiklus suundub MTA serveritele IP-aadressidega 192.168.0.77 ja 192.168.0.78.
Nagu juba öeldud, et tagada päringute ühtlane jaotamine serverite vahel, kasutame HAProxy koormuse tasakaalustajat, mis töötab Zimbra infrastruktuuri sisendpunktis, mis on Ubuntu 18.04 peal. HAProxy installimine sellega opereerivas süsteemis toimub käsu abil sudo apt-get install haproxy. Pärast seda tuleb failis /etc/default/haproxy muuta parameeter ENABLED=0 järgnevaga ENABLED=1. Nüüd, et veenduda haproxy töökindluses, piisab, kui sisestada käsk service haproxy. Kui see teenus töötab, selgub see käsu väljundi kaudu.
HAProxy peamine probleem on see, et see ei edasta vaikimisi klientide IP-aadresse, asendades need omaenda IP-iga. See võib viia olukordadele, kus ründajate saatnud kirju ei saa tuvastada IP-aadressi, et addida need musta nimekirja. Kuid seda probleemi on võimalik lahendada. Selleks tuleb redigeerida faili /opt/zimbra/common/conf/master.cf.in Postfix-serverites ja lisada sinna järgmised read:
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_adjustSellega avame portid 26, 466 ja 588, mis võtavad sisse tulevat liiklust HAProxy-st. Pärast failide salvestamist tuleks Postfix kõikides serverites taaskäivitada käsuga zmmtactl restart.
Seejärel jätkame HAProxy seadistamisega. Selleks loome esmalt varukoopia seadistuste failist. cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Siis avame algse faili tekstiredaktoris /etc/haproxy/haproxy.cfg ja hakkame järk-järgult lisama vajalikud seadistused. Esimese plokina lisame serveri logide kogumiseks, määrame maksimaalselt lubatud samal ajal ühenduste arvu ja samuti kasutaja nime ja rühma, kellele eelseiv protsess kuulub.
global
user daemon
group daemon
daemon
log 127.0.0.1 daemon
maxconn 5000
chroot /var/lib/haproxyArv 5000 samal ajal ühendust on valitud mitte ilma põhjuseta. Kuna meie infrastruktuuris on 4000 postkasti, tuleb arvestada võimalusega, et kõik need logivad samal ajal oma töömeili. Lisaks tuleb jätta väike varu, juhuks kui nende arv suureneb.
Nüüd lisame ploki vaikeseadistuste jaoks:
defaults
timeout client 1m
log global
mode tcp
timeout server 1m
timeout connect 5sSelles plokis määratakse kliendi ja serveri maksimaalne ooteaeg, mille möödumisel katkestatakse ühendus, samuti HAProxy töörežiim. Meie puhul töötab koormuse jaotur TCP-režiimis, st lihtsalt edastab TCP-pakette, analüüsimata nende sisu.
Seejärel lisame reeglid erinevatel portidel olevate ühenduste jaoks. Näiteks, kui port 25 kasutatakse SMTP-ühenduste ja e-kirjade edastamiseks, on mõistlik suunata ühendused sellele meie infrastruktuuris olevatele MTA-dele. Kui aga ühendus toimub pordil 80, siis on see http-päring, mille tuleb edastada Zimbra Proxy-le.
Reegel porta 25 jaoks:
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-proxyReegel porta 465 jaoks:
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-proxyReegel porta 587 jaoks:
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-proxyReegel porta 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 checkReegel portile 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 checkPange tähele, et TCP-pakettide edastamise reeglite jaoks MTA kõrval nende aadressidele on lisatud parameeter send-proxy. See on vajalik, et vastavalt meie varasematele muudatustele Postfixi seadistustes saadetaks TCP-pakettidega ka originaalne IP-aadress selle saatjalt.
Nüüd, kui kõik vajalikud muudatused HAProxy-s on tehtud, saab teenuse taaskäivitamiseks kasutada käsku service haproxy restart ja alustada selle kasutamist.
Küsimuste korral, mis on seotud Zextras Suite'iga, võite pöörduda Zextra esindaja Ekaterina Triandafiliidi poole e-posti teel katerina@zextras.com
Allikas: habr.com
