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

Ուրեմն, խնդրի պայմաններով մեզ տրվում է Zimbra OSE ենթակառուցվածք, որտեղ կան երկու Zimbra Proxy, երկու LDAP սերվեր և LDAP Replica, չորս էլեկտրոնային փոստի մատակարարումներ 1000 էլեկտրոնային փոստի հասցեով յուրաքանչյուր և երեք MTA: Հաշվի առնելով, որ մենք գործ ունենք էլեկտրոնային փոստի սերվերի հետ, դեպի դրան կհասնել երեք տեսակի երթևեկություն, որը պետք է հավասարակշռել: HTTP ի համար վեբ հաճախորդի բեռնելու, ինչպես նաև POP և SMTP էլեկտրոնային փոստի փոխանցման: Այդ պարագայում HTTP- երթևեկությունը կուղղվի սերվերներ Zimbra Proxy IP հասցեներով 192.168.0.57 և 192.168.0.58, իսկ SMTP երթևեկությունը կուղղվի MTA սերվերներին IP հասցեներով 192.168.0.77 և 192.168.0.78:
Ինչպես արդեն ասվել է, հարցումների հավասարաչափ բաշխման ապահովման համար մենք կօգտագործենք HAProxy բեռների հավասարակշռիչը, որը կաշխատի Zimbra ենթակառուցվածքի մուտքային հանգույցում Ubuntu 18.04-ի գործարկմամբ: HAProxy-ի տեղադրումը այս գործառնական համակարգում իրականացվում է հետևյալ հրահանգով: sudo apt-get install haproxy. Այնուհետև անհրաժեշտ է փաստաթղթում /etc/default/haproxy փոփոխել պարամետրը ENABLED=0 ըստ ENABLED=1. Այժմ, որպեսզի համոզվեք, որ haproxy-ն աշխատում է, բավական է մուտքագրել հրահանգը: service haproxy. Եթե այս ծառայությունը գործում է, ապա դա կհստակվի հրահանգի արդյունքներից:
HAProxy-ի գլխավոր սխալներից մեկը այն է, որ նա默认ապես չի փոխանցում միացվող հաճախորդի IP հասցեն, փոխարինելով այն իր սեփականով: Սա կարող է հանգեցնել իրավիճակների, երբ հանցագործների կողմից ուղարկված նամակները չի հնարավոր լինելու նույնականացնել IP հասցեի, որպեսզի ավելացվի այն սև ցուցակի: Սակայն այս խնդիրը կարելի է լուծել: Bunun üçün /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 restart` հրամանի միջոցով։
Այժմ անցնենք 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/haproxy5000 միաժամանակյա միացություններ թվի ընտրությունը պատահական չէ։ Մեր ինֆրասնտրուկտուրայում 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-ի կողքին է այլն send-proxy. Սա հարկավոր է, որպեսզի, ըստ մեր նախկինում կատարած Postfix-ի կարգավորումների փոփոխությունների, TCP փաթեթների հետ փոխանցվի նաև ուղարկողի բնօրինակ IP հասցեն.
Այժմ, երբ HAProxy-ում բոլոր անհրաժեշտ փոփոխությունները կատարված են, կարող եք վերագործարկել ծառայությունը service haproxy restart և սկսել օգտագործել այն.
Zextras Suite-ի հետ կապված հարցերով կարող եք դիմել «Zextras» ընկերության ներկայացուցիչ Եկատերինա Տրիանդաֆիլիիդուին էլ. փոստով katerina@zextras.com
Ընտանիք: habr.com
