Slodzes līdzsvarošana programmā Zimbra Open-Source Edition, izmantojot HAProxy

Viens no galvenajiem uzdevumiem, veidojot liela mēroga Zimbra OSE infrastruktūru, ir pareiza slodzes līdzsvarošana. Papildus tam, ka tas palielina pakalpojuma kļūdu toleranci, bez slodzes balansēšanas nav iespējams nodrošināt vienādu pakalpojuma atsaucību visiem lietotājiem. Šīs problēmas risināšanai tiek izmantoti slodzes balansētāji – programmatūras un aparatūras risinājumi, kas pārdala pieprasījumus starp serveriem. Starp tiem ir diezgan primitīvi, piemēram, RoundRobin, kas katru nākamo pieprasījumu vienkārši nosūta nākamajam sarakstā esošajam serverim, un ir arī progresīvāki, piemēram, HAProxy, ko plaši izmanto augstas slodzes skaitļošanas infrastruktūrās. vairākas būtiskas priekšrocības. Apskatīsim, kā jūs varat panākt, lai HAProxy slodzes līdzsvarotājs un Zimbra OSE darbotos kopā.

Slodzes līdzsvarošana programmā Zimbra Open-Source Edition, izmantojot HAProxy

Tātad, saskaņā ar uzdevuma noteikumiem, mums ir piešķirta Zimbra OSE infrastruktūra, kurā ir divi Zimbra Proxy, divi LDAP un LDAP Replica serveri, četras pasta krātuves ar 1000 pastkastēm katrā un trīs MTA. Ņemot vērā, ka mums ir darīšana ar pasta serveri, tas saņems trīs veidu trafiku, kas ir jāsabalansē: HTTP tīmekļa klienta lejupielādei, kā arī POP un SMTP e-pasta sūtīšanai. Šajā gadījumā HTTP trafika tiks novirzīta uz Zimbra Proxy serveriem ar IP adresēm 192.168.0.57 un 192.168.0.58, un SMTP trafiks tiks novirzīts uz MTA serveriem ar IP adresēm 192.168.0.77 un 192.168.0.78.

Kā jau minēts, lai nodrošinātu vienmērīgu pieprasījumu sadali starp serveriem, mēs izmantosim HAProxy slodzes balansētāju, kas darbosies Zimbra infrastruktūras ieejas mezglā, kurā darbojas Ubuntu 18.04. Haproxy instalēšana šajā operētājsistēmā tiek veikta, izmantojot komandu sudo apt-get instalēt haproxy. Pēc tam jums ir nepieciešams failā /etc/default/haproxy mainīt parametru IESPĒJOTS=0 par IESPĒJOTS=1. Tagad, lai pārliecinātos, ka haproxy darbojas, vienkārši ievadiet komandu pakalpojumu haproxy. Ja šis pakalpojums darbojas, tas būs skaidrs no komandas izvades.

Viens no galvenajiem HAProxy trūkumiem ir tas, ka pēc noklusējuma tas nepārraida savienojošā klienta IP adresi, aizstājot to ar savu. Tas var radīt situācijas, kad uzbrucēju sūtītos e-pastus nevar identificēt pēc IP adreses, lai pievienotu to melnajam sarakstam. Tomēr šo problēmu var atrisināt. Lai to izdarītu, fails ir jārediģē /opt/zimbra/common/conf/master.cf.in serveros ar Postfix un pievienojiet tam šādas rindiņas:

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

Sakarā ar to mēs atvērsim 26., 466. un 588. portus, kas saņems ienākošo trafiku no HAProxy. Kad faili ir saglabāti, restartējiet Postfix visos serveros, izmantojot komandu zmmtactl restart.

Pēc tam sāksim HAProxy iestatīšanu. Lai to izdarītu, vispirms izveidojiet iestatījumu faila dublējumkopiju cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Pēc tam atveriet avota failu teksta redaktorā /etc/haproxy/haproxy.cfg un sāciet soli pa solim pievienot tai nepieciešamos iestatījumus. Pirmais bloks būs servera pievienošana, kas ņem žurnālus, iestatot maksimālo atļauto vienlaicīgo savienojumu skaitu, kā arī norādot lietotāja vārdu un grupu, kurai piederēs izpildes process.

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

5000 vienlaicīgu savienojumu skaitlis parādījās kāda iemesla dēļ. Tā kā mūsu infrastruktūrā ir 4000 pastkastīšu, mums ir jāņem vērā iespēja, ka tās visas vienlaikus piekļūs savam darba e-pastam. Turklāt ir nepieciešams atstāt nelielu rezervi gadījumam, ja to skaits palielinās.

Tagad pievienosim bloku ar noklusējuma iestatījumiem:

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

Šis bloks iestata maksimālo taimautu klientam un serverim, lai aizvērtu savienojumu, kad tas beidzas, kā arī iestata HAProxy darbības režīmu. Mūsu gadījumā slodzes balansētājs darbojas TCP režīmā, tas ir, tas vienkārši pārsūta TCP paketes, neanalizējot to saturu.

Tālāk mēs pievienosim noteikumus savienojumiem dažādos portos. Piemēram, ja SMTP savienojumiem un pastam tiek izmantots ports 25, tad savienojumus uz to ir lietderīgi pārsūtīt uz mūsu infrastruktūrā pieejamajiem MTA. Ja savienojums ir portā 80, tas ir http pieprasījums, kas ir jāpārsūta uz Zimbra starpniekserveri.

Noteikums 25. portam:

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

Noteikums 465. portam:

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

Noteikums 587. portam:

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

Noteikums 80. portam:

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

Noteikums 443. portam:

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

Lūdzu, ņemiet vērā, ka noteikumos par TCP pakešu pārsūtīšanu uz MTA blakus to adresēm ir parametrs sūtīt-starpniekserveris. Tas ir nepieciešams, lai saskaņā ar iepriekš veiktajām izmaiņām Postfix iestatījumos kopā ar TCP paketēm tiktu nosūtīta sākotnējā sūtītāja IP adrese.

Tagad, kad HAProxy ir veiktas visas nepieciešamās izmaiņas, varat restartēt pakalpojumu, izmantojot komandu pakalpojuma haproxy restartēšana un sāciet to lietot.

Par visiem jautājumiem, kas saistīti ar Zextras Suite, varat sazināties ar Zextras pārstāvi Jekaterinu Triandafilidi pa e-pastu [e-pasts aizsargāts]

Avots: www.habr.com

Pievieno komentāru