Üks Zimbra OSE ulatuslike infrastruktuuride loomise peamistest ülesannetest on koormuse tasakaalustamine. Lisaks sellele, et see suurendab teenuse töökindlust, ei ole koormuse tasakaalustamata võimalik tagada teenuse ühtlast reageerimist kõigile kasutajatele. Selle ülesande lahendamiseks kasutatakse koormuse tasakaalustajaid - tarkvaralahendusi ja riistvaralahendusi, mis jaotavad päringud serverite vahel. Nende seas on nii üsna primitiivseid lahendusi, nagu RoundRobin, mis lihtsalt suunab iga järgmise päringu järgmisele serverile nimekirjas, kui ka keerukamaid, näiteks HAProxy, mida laialdaselt kasutatakse suure koormusega arvutusinfrastruktuurides mitmesuguste kaalutletud eeliste tõttu. Vaatame, kuidas tagada HAProxy koormuse tasakaalustaja ja Zimbra OSE ühiselt töötamine.

Nii, ülesande tingimuste kohaselt on meil Zimbra OSE infrastruktuur, kus on kaks Zimbra Proxy, kaks LDAP serverit ja LDAP replikatsioon, neli meiliteenuse salvestust, igas 1000 postkasti ja kolm MTA-d. Arvestades, et tegemist on meiliserveriga, siis sellele suunatakse kolmesugust liiklust, mida on vaja tasakaalustada: HTTP veebi kliendi laadimiseks, samuti POP ja SMTP e-kirjade edastamiseks. Sel juhul suunatakse HTTP-liiklus serverid Zimbra Proxy'des, mille IP-aadressid on 192.168.0.57 ja 192.168.0.58, ning SMTP liiklus suunatakse MTA serveritesse, mille IP-aadressid on 192.168.0.77 ja 192.168.0.78.
Kuna juba mainitud, et päringute ühtlase jaotuse tagamiseks serverite vahel kasutame koormuse tasakaalustajat HAProxy, mis töötab Zimbra infrastruktuuri sisenemispunktis, mis on üles seatud Ubuntu 18.04-s. Haprox'i installimine selles opsüsteemis toimub järgmise käsu abil sudo apt-get install haproxy. Seejärel tuleb failis /etc/default/haproxy muuta parameetrit ENABLED=0 . Tundub, et ENABLED=1. Nüüd, et veenduda, et haproxy töötab, piisab käsu sisestamisest service haproxy. Kui see teenus töötab, saavad sellest aru käsu väljundist.
Üheks kõige suuremaks HAProxy puuduseks on see, et see ei edasta vaikimisi ühendava kliendi IP-aadressi, asendades selle oma. See võib viia olukordadeni, kus ründajate saadetud kirju ei saa tuvastada. IP-aadressiga, et lisada see musta nimekirja. Selle probleemi saab siiski lahendada. Selleks tuleb faili redigeerida /opt/zimbra/common/conf/master.cf.in Postfixiga 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_adjustSelle kaudu avame sadamad 26, 466 ja 588, mis aktsepteerivad sisse tulevat liiklust HAProxy-st. Pärast failide salvestamist tuleb Postfix kõigil serveritel taaskäivitada käsuga zmmtactl restart.
Seejärel alustame HAProxy seadistamisega. Selleks loome kõigepealt varukoopia seadistusfailist cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Seejärel avame algse faili tekstiredaktoris /etc/haproxy/haproxy.cfg ja alustame järk-järgult vajalike seadistuste lisamist. Esimene plokk sisaldab serveri lisamist logide kogumiseks, maksimaalse lubatud samaaegsete ühenduste arvu seadmist ning ka kasutajanime ja grupi määramist, kellele täitmisprotsess kuulub.
global
user daemon
group daemon
daemon
log 127.0.0.1 daemon
maxconn 5000
chroot /var/lib/haproxyArv 5000 samaaegset ühendust ei ole juhuslik. Kuna meie infrastruktuuris on 4000 postkasti, tuleb ette näha võimalus, et kõik nad logivad samal ajal oma tööpostkasti sisse. Samuti tuleb jätta väike varu, kui nende arv peaks suurenema.
Nüüd lisame vaikeseadete ploki:
defaults
timeout client 1m
log global
mode tcp
timeout server 1m
timeout connect 5sSelles plokis määratakse maksimaalne ooteaeg kliendi ja serveri vahel, et katkestada ühendus, kui see aeg peab mööduma, samuti määratakse HAProxy töörežiim. Meie juhul töötab koormuse tasakaalustaja TCP-režiimis, see tähendab, et see lihtsalt edastab TCP-pakke, analüüsimata nende sisu.
Seejärel lisame reeglid erinevate portide ühenduste jaoks. Näiteks, kui port 25 on kasutusel SMTP-ühenduste ja meilide edastamiseks, siis on mõistlik suunata ühendused sellele meie infrastruktuuri MTA-dele. Kui aga ühendus toimub pordi 80 kaudu, siis on see http-päring, mille tuleb suunata Zimbra Proxy-le.
Reegel port 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 port 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 port 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 port 80 jaoks:
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 port 443 jaoks:
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 checkPane tähele, et TCP-pakettide suunamise reeglites MTA-dele on nende aadresside kõrval parameeter send-proxy. See on vajalik, et vastavalt eelnevalt tehtud muudatustele Postfixi seadetes edastataks TCP-pakettidega ka originaali IP-aadress 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 ettevõtte «Zextras» esindaja Ekaterina Triandafiliidi poole e-posti aadressil katerina@zextras.com
Allikas: habr.com
