Mag-load ng pagbabalanse sa Zimbra Open-Source Edition gamit ang HAProxy

Isa sa mga pangunahing gawain kapag nagtatayo ng malakihang mga imprastraktura ng Zimbra OSE ay wastong pagbabalanse ng pagkarga. Bilang karagdagan sa katotohanan na pinapataas nito ang pagpapahintulot sa kasalanan ng serbisyo, nang walang pagbabalanse ng pag-load imposibleng matiyak ang parehong pagtugon ng serbisyo para sa lahat ng mga gumagamit. Upang malutas ang problemang ito, ginagamit ang mga load balancer - mga solusyon sa software at hardware na muling namamahagi ng mga kahilingan sa pagitan ng mga server. Kabilang sa mga ito ay may mga medyo primitive, tulad ng RoundRobin, na nagpapadala lamang ng bawat kasunod na kahilingan sa susunod na server sa listahan, at mayroon ding mga mas advanced, halimbawa HAProxy, na malawakang ginagamit sa mga imprastraktura ng high-load na computing dahil sa isang bilang ng mga makabuluhang pakinabang. Tingnan natin kung paano mo gagawing magkakasama ang HAProxy load balancer at Zimbra OSE.

Mag-load ng pagbabalanse sa Zimbra Open-Source Edition gamit ang HAProxy

Kaya, ayon sa mga tuntunin ng gawain, binibigyan kami ng imprastraktura ng Zimbra OSE, na mayroong dalawang Zimbra Proxy, dalawang LDAP at LDAP Replica server, apat na mail storage na may 1000 mailbox bawat isa at tatlong MTA. Dahil nakikitungo kami sa isang mail server, makakatanggap ito ng tatlong uri ng trapiko na nangangailangan ng pagbabalanse: HTTP para sa pag-download ng web client, pati na rin ang POP at SMTP para sa pagpapadala ng email. Sa kasong ito, mapupunta ang trapiko ng HTTP sa mga server ng Zimbra Proxy na may mga IP address na 192.168.0.57 at 192.168.0.58, at mapupunta ang trapiko ng SMTP sa mga server ng MTA na may mga IP address na 192.168.0.77 at 192.168.0.78.

Gaya ng nabanggit na, upang matiyak na ang mga kahilingan ay pantay na ipinamamahagi sa pagitan ng mga server, gagamitin namin ang HAProxy load balancer, na tatakbo sa Zimbra infrastructure ingress node na tumatakbo sa Ubuntu 18.04. Ang pag-install ng haproxy sa operating system na ito ay ginagawa gamit ang command sudo apt-get install haproxy. Pagkatapos nito kailangan mo sa file /etc/default/haproxy baguhin ang parameter ENABLED=0 sa ENABLED=1. Ngayon, upang matiyak na gumagana ang haproxy, ipasok lamang ang command serbisyo haproxy. Kung tumatakbo ang serbisyong ito, magiging malinaw ito mula sa output ng command.

Ang isa sa mga pangunahing disadvantages ng HAProxy ay na sa pamamagitan ng default ay hindi ito nagpapadala ng IP address ng kumokonektang kliyente, na pinapalitan ito ng sarili nitong. Maaari itong humantong sa mga sitwasyon kung saan ang mga email na ipinadala ng mga umaatake ay hindi matukoy ng IP address upang maidagdag ito sa blacklist. Gayunpaman, maaaring malutas ang isyung ito. Upang gawin ito kailangan mong i-edit ang file /opt/zimbra/common/conf/master.cf.in sa mga server na may Postfix at idagdag ang mga sumusunod na linya dito:

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

Dahil dito, magbubukas kami ng mga port 26, 466 at 588, na tatanggap ng papasok na trapiko mula sa HAProxy. Pagkatapos ma-save ang mga file, dapat mong i-restart ang Postfix sa lahat ng server gamit ang zmmtactl restart command.

Pagkatapos nito, simulan natin ang pag-set up ng HAProxy. Upang gawin ito, lumikha muna ng backup na kopya ng file ng mga setting cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Pagkatapos ay buksan ang source file sa isang text editor /etc/haproxy/haproxy.cfg at simulan ang pagdaragdag ng mga kinakailangang setting dito nang sunud-sunod. Ang unang block ay pagdaragdag ng isang server na kumukuha ng mga log, pagtatakda ng maximum na pinapayagang bilang ng mga sabay-sabay na koneksyon, pati na rin ang pagtukoy sa pangalan at grupo ng user kung saan ang proseso ng pagpapatupad ay kabilang.

global
    user daemon
    group daemon
    daemon
    log 127.0.0.1 daemon
    maxconn 5000
    chroot /var/lib/haproxy

Ang bilang ng 5000 sabay-sabay na koneksyon ay lumitaw para sa isang dahilan. Dahil mayroon kaming 4000 mailbox sa aming imprastraktura, kailangan naming isaalang-alang ang posibilidad na maa-access nilang lahat ang kanilang email sa trabaho nang sabay-sabay. Bilang karagdagan, kinakailangang mag-iwan ng maliit na reserba kung sakaling tumaas ang kanilang bilang.

Ngayon magdagdag tayo ng isang bloke na may mga default na setting:

defaults
        timeout client 1m
        log global
        mode tcp
        timeout server 1m
        timeout connect 5s

Ang block na ito ay nagtatakda ng maximum na timeout para sa client at server upang isara ang koneksyon kapag ito ay nag-expire, at itinatakda din ang operating mode ng HAProxy. Sa aming kaso, ang load balancer ay nagpapatakbo sa TCP mode, iyon ay, nagpapadala lamang ito ng mga TCP packet nang hindi sinusuri ang kanilang mga nilalaman.

Susunod ay magdaragdag kami ng mga panuntunan para sa mga koneksyon sa iba't ibang port. Halimbawa, kung ang port 25 ay ginagamit para sa mga SMTP na koneksyon at mail, makatuwirang ipasa ang mga koneksyon dito sa mga MTA na available sa aming imprastraktura. Kung ang koneksyon ay nasa port 80, ito ay isang kahilingan sa http na kailangang ipasa sa Zimbra Proxy.

Panuntunan para sa port 25:

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

Panuntunan para sa port 465:

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

Panuntunan para sa port 587:

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

Panuntunan para sa port 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 check

Panuntunan para sa port 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 check

Pakitandaan na sa mga panuntunan para sa pagpapasa ng mga TCP packet sa MTA, sa tabi ng kanilang mga address ay mayroong isang parameter magpadala-proxy. Ito ay kinakailangan upang, alinsunod sa mga pagbabagong ginawa namin kanina sa mga setting ng Postfix, ang orihinal na IP address ng nagpadala nito ay ipinadala kasama ng mga TCP packet.

Ngayon na ang lahat ng kinakailangang pagbabago ay ginawa sa HAProxy, maaari mong i-restart ang serbisyo gamit ang command i-restart ang serbisyo ng haproxy at simulan ang paggamit nito.

Para sa lahat ng tanong na may kaugnayan sa Zextras Suite, maaari kang makipag-ugnayan kay Zextras Representative Ekaterina Triandafilidi sa pamamagitan ng email [protektado ng email]

Pinagmulan: www.habr.com

Magdagdag ng komento