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