Բեռնվածության հավասարակշռում Zimbra Open-Source Edition-ում HAProxy-ի միջոցով

Zimbra OSE-ի լայնածավալ ենթակառուցվածքներ կառուցելիս հիմնական խնդիրներից մեկը բեռի ճիշտ հավասարակշռումն է: Բացի այն, որ այն մեծացնում է ծառայության սխալների հանդուրժողականությունը, առանց բեռի հավասարակշռման անհնար է ապահովել ծառայության նույն արձագանքումը բոլոր օգտագործողների համար: Այս խնդիրը լուծելու համար օգտագործվում են բեռի հավասարակշռիչներ՝ ծրագրային և ապարատային լուծումներ, որոնք վերաբաշխում են հարցումները սերվերների միջև: Դրանց թվում կան բավականին պարզունակներ, ինչպիսիք են RoundRobin-ը, որը պարզապես յուրաքանչյուր հաջորդ հարցում ուղարկում է ցուցակի հաջորդ սերվերին, և կան նաև ավելի առաջադեմներ, օրինակ HAProxy-ն, որը լայնորեն օգտագործվում է բարձր բեռնվածության հաշվողական ենթակառուցվածքներում: մի շարք նշանակալի առավելություններ. Եկեք տեսնենք, թե ինչպես կարող եք ստիպել HAProxy բեռի հավասարակշռիչը և Zimbra OSE-ն միասին աշխատել:

Բեռնվածության հավասարակշռում Zimbra Open-Source Edition-ում HAProxy-ի միջոցով

Այսպիսով, ըստ առաջադրանքի պայմանների, մեզ տրվում է Zimbra OSE ենթակառուցվածքը, որն ունի երկու Zimbra Proxy, երկու LDAP և LDAP Replica սերվերներ, չորս փոստի պահեստներ՝ յուրաքանչյուրը 1000 փոստարկղով և երեք MTA: Հաշվի առնելով, որ մենք գործ ունենք փոստային սերվերի հետ, այն կստանա երեք տեսակի տրաֆիկ, որոնք հավասարակշռման կարիք ունեն՝ HTTP՝ վեբ հաճախորդը ներբեռնելու համար, ինչպես նաև POP և SMTP՝ էլփոստ ուղարկելու համար։ Այս դեպքում HTTP տրաֆիկը կուղղվի դեպի Zimbra Proxy սերվերներ 192.168.0.57 և 192.168.0.58 IP հասցեներով, իսկ SMTP տրաֆիկը կգնա դեպի MTA սերվերներ 192.168.0.77 և 192.168.0.78 IP հասցեներով:

Ինչպես արդեն նշվեց, ապահովելու համար, որ հարցումները հավասարաչափ բաշխվեն սերվերների միջև, մենք կօգտագործենք HAProxy load balancer-ը, որը կաշխատի Ubuntu 18.04-ով աշխատող Zimbra ենթակառուցվածքի ներթափանցման հանգույցի վրա: Այս օպերացիոն համակարգի վրա հապրոքսիի տեղադրումը կատարվում է հրամանի միջոցով sudo apt-get install haproxy. Դրանից հետո դուք պետք է ֆայլում /etc/default/haproxy փոխել պարամետրը ENABLEED=0 մասին ENABLEED=1. Այժմ, որպեսզի համոզվեք, որ հապրոքսիան աշխատում է, պարզապես մուտքագրեք հրամանը սպասարկման հապրոքսի. Եթե ​​այս ծառայությունն աշխատում է, դա պարզ կլինի հրամանի ելքից:

HAProxy-ի հիմնական թերություններից մեկն այն է, որ այն լռելյայնորեն չի փոխանցում կապող հաճախորդի IP հասցեն՝ այն փոխարինելով իր սեփականով։ Սա կարող է հանգեցնել այնպիսի իրավիճակների, երբ հարձակվողների կողմից ուղարկված նամակները չեն կարող նույնականացվել IP հասցեով՝ այն սև ցուցակում ավելացնելու համար: Այնուամենայնիվ, այս հարցը կարող է լուծվել: Դա անելու համար անհրաժեշտ է խմբագրել ֆայլը /opt/zimbra/common/conf/master.cf.in Postfix-ով սերվերների վրա և դրան ավելացնել հետևյալ տողերը.

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

Դրա շնորհիվ մենք կբացենք 26, 466 և 588 պորտերը, որոնք մուտքային տրաֆիկ կստանան HAProxy-ից։ Ֆայլերը պահպանվելուց հետո դուք պետք է վերագործարկեք Postfix-ը բոլոր սերվերների վրա՝ օգտագործելով zmmtactl վերագործարկման հրամանը:

Դրանից հետո եկեք սկսենք HAProxy-ի կարգավորումը: Դա անելու համար նախ ստեղծեք կարգավորումների ֆայլի կրկնօրինակը cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Այնուհետև բացեք աղբյուրի ֆայլը տեքստային խմբագրիչում /etc/haproxy/haproxy.cfg և սկսեք դրան քայլ առ քայլ ավելացնել անհրաժեշտ կարգավորումները: Առաջին բլոկը կլինի սերվերի ավելացում, որն ընդունում է տեղեկամատյանները, սահմանելով միաժամանակյա կապերի առավելագույն թույլատրելի քանակը, ինչպես նաև նշելով օգտվողի անունը և խումբը, որին կպատկանի կատարման գործընթացը:

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

5000 միաժամանակյա միացումների թիվը հայտնվել է մի պատճառով. Քանի որ մենք ունենք 4000 փոստարկղ մեր ենթակառուցվածքում, մենք պետք է հաշվի առնենք հնարավորությունը, որ նրանք բոլորը միաժամանակ մուտք գործեն իրենց աշխատանքային էլ. Բացի այդ, անհրաժեշտ է փոքր ռեզերվ թողնել դրանց քանակի ավելացման դեպքում։

Այժմ եկեք ավելացնենք բլոկ լռելյայն կարգավորումներով.

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

Այս բլոկը սահմանում է հաճախորդի և սերվերի առավելագույն ժամկետը, որպեսզի փակեն կապը, երբ դրա ժամկետը լրանա, ինչպես նաև սահմանում է HAProxy-ի գործառնական ռեժիմը: Մեր դեպքում բեռի հավասարակշռիչը գործում է TCP ռեժիմով, այսինքն՝ այն պարզապես փոխանցում է TCP փաթեթները՝ առանց դրանց բովանդակությունը վերլուծելու։

Հաջորդը մենք կավելացնենք կանոններ տարբեր նավահանգիստների միացումների համար: Օրինակ, եթե 25-րդ նավահանգիստն օգտագործվում է SMTP կապերի և փոստի համար, ապա իմաստ ունի դրան կապերը փոխանցել մեր ենթակառուցվածքում առկա MTA-ներին: Եթե ​​կապը 80-րդ նավահանգստում է, ապա սա http հարցում է, որը պետք է փոխանցվի Zimbra Proxy-ին:

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

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

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

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

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

Խնդրում ենք նկատի ունենալ, որ TCP փաթեթները MTA-ին փոխանցելու կանոններում, դրանց հասցեների կողքին կա պարամետր. ուղարկել-վստահված անձ. Սա անհրաժեշտ է, որպեսզի, համաձայն Postfix-ի կարգավորումներում նախկինում կատարած փոփոխությունների, դրա ուղարկողի սկզբնական IP հասցեն ուղարկվի TCP փաթեթների հետ միասին:

Այժմ, երբ բոլոր անհրաժեշտ փոփոխությունները կատարվել են HAProxy-ում, կարող եք վերագործարկել ծառայությունը՝ օգտագործելով հրամանը ծառայության հապրոքսի վերագործարկում և սկսեք օգտագործել այն:

Zextras Suite-ի հետ կապված բոլոր հարցերի համար կարող եք կապվել Zextras-ի ներկայացուցիչ Եկատերինա Տրիանդաֆիլիդիի հետ էլ. [էլեկտրոնային փոստով պաշտպանված]

Source: www.habr.com

Добавить комментарий