Една од главните задачи при изградба на големи Zimbra OSE инфраструктури е правилното балансирање на товарот. Покрај фактот што ја зголемува толеранцијата на грешки на услугата, без балансирање на оптоварување е невозможно да се обезбеди иста реакција на услугата за сите корисници. За да се реши овој проблем, се користат load balancers - софтверски и хардверски решенија кои ги прераспределуваат барањата помеѓу серверите. Меѓу нив има доста примитивни, како RoundRobin, кој едноставно го испраќа секое следно барање до следниот сервер во списокот, а исто така има и понапредни, на пример HAProxy, кој е широко користен во компјутерските инфраструктури со големо оптоварување поради број на значајни предности. Ајде да погледнеме како можете да направите HAProxy load balancer и 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 load balancer, кој ќе работи на јазолот за влез во инфраструктурата Zimbra кој работи на Ubuntu 18.04. Инсталирањето на хапрокси на овој оперативен систем се врши со помош на командата sudo apt-get install haproxy. По ова ви треба во датотеката /etc/default/haproxy промени параметар Овозможено=0 на Овозможено=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 Екатерина Триандафилиди преку е-пошта [заштитена по е-пошта]
Извор: www.habr.com