Балансирање на оптоварување во Зимбра со отворен извор со помош на HAProxy

Една од главните задачи при изградба на големи Zimbra OSE инфраструктури е правилното балансирање на товарот. Покрај фактот што ја зголемува толеранцијата на грешки на услугата, без балансирање на оптоварување е невозможно да се обезбеди иста реакција на услугата за сите корисници. За да се реши овој проблем, се користат load balancers - софтверски и хардверски решенија кои ги прераспределуваат барањата помеѓу серверите. Меѓу нив има доста примитивни, како RoundRobin, кој едноставно го испраќа секое следно барање до следниот сервер во списокот, а исто така има и понапредни, на пример HAProxy, кој е широко користен во компјутерските инфраструктури со големо оптоварување поради број на значајни предности. Ајде да погледнеме како можете да направите HAProxy load balancer и Zimbra OSE да работат заедно.

Балансирање на оптоварување во Зимбра со отворен извор со помош на HAProxy

Значи, според условите на задачата, ни е дадена инфраструктурата 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

Додадете коментар