Zimbra Open-Source Edition'da HAProxy kullanarak yük dengeleme

Büyük ölçekli Zimbra OSE altyapıları oluştururken ana görevlerden biri uygun yük dengelemedir. Hizmetin hata toleransını artırmasının yanı sıra, yük dengeleme olmadan hizmetin tüm kullanıcılar için aynı yanıt verebilirliğini sağlamak mümkün değildir. Bu sorunu çözmek için yük dengeleyiciler kullanılır - istekleri sunucular arasında yeniden dağıtan yazılım ve donanım çözümleri. Bunların arasında, her bir sonraki isteği listedeki bir sonraki sunucuya gönderen RoundRobin gibi oldukça ilkel olanlar ve ayrıca daha gelişmiş olanlar da var, örneğin yüksek yüklü bilgi işlem altyapılarında yaygın olarak kullanılan HAProxy. çok sayıda önemli avantaja sahiptir. HAProxy yük dengeleyici ve Zimbra OSE'nin birlikte çalışmasını nasıl sağlayabileceğinize bir göz atalım.

Zimbra Open-Source Edition'da HAProxy kullanarak yük dengeleme

Yani görev şartlarına göre bize iki Zimbra Proxy, iki LDAP ve LDAP Replika sunucusu, her biri 1000 posta kutusu içeren dört posta deposu ve üç MTA'dan oluşan Zimbra OSE altyapısı veriliyor. Bir posta sunucusuyla karşı karşıya olduğumuz göz önüne alındığında, dengeleme gerektiren üç tür trafik alacaktır: web istemcisini indirmek için HTTP ve ayrıca e-posta göndermek için POP ve SMTP. Bu durumda HTTP trafiği 192.168.0.57 ve 192.168.0.58 IP adreslerine sahip Zimbra Proxy sunucularına, SMTP trafiği ise 192.168.0.77 ve 192.168.0.78 IP adreslerine sahip MTA sunucularına gidecektir.

Daha önce de belirttiğimiz gibi, isteklerin sunucular arasında eşit şekilde dağıtıldığından emin olmak için, Ubuntu 18.04 çalıştıran Zimbra altyapı giriş düğümünde çalışacak olan HAProxy yük dengeleyiciyi kullanacağız. Bu işletim sistemine haproxy kurulumu şu komut kullanılarak yapılır: sudo apt-get haproxy'yi yükle. Bundan sonra dosyaya ihtiyacınız var /etc/varsayılan/haproxy ismenit parametresi ETKİN = 0 üzerinde ETKİN = 1. Şimdi haproxy'nin çalıştığından emin olmak için komutu girmeniz yeterli hizmet haproksisi. Bu hizmet çalışıyorsa, bu durum komutun çıktısından anlaşılacaktır.

HAProxy'nin ana dezavantajlarından biri, varsayılan olarak bağlanan istemcinin IP adresini kendi IP adresiyle değiştirerek iletmemesidir. Bu, saldırganlar tarafından gönderilen e-postaların kara listeye eklenebilmesi için IP adresiyle tanımlanamaması durumlarına yol açabilir. Ancak bu sorun çözülebilir. Bunu yapmak için dosyayı düzenlemeniz gerekir /opt/zimbra/common/conf/master.cf.in Postfix'li sunucularda ve aşağıdaki satırları ekleyin:

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

Bu nedenle HAProxy'den gelen trafiği alacak 26, 466 ve 588 numaralı bağlantı noktalarını açacağız. Dosyalar kaydedildikten sonra zmmtactl restart komutunu kullanarak Postfix'i tüm sunucularda yeniden başlatmalısınız.

Bundan sonra HAProxy kurulumuna başlayalım. Bunu yapmak için önce ayarlar dosyasının yedek bir kopyasını oluşturun cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Daha sonra kaynak dosyayı bir metin düzenleyicide açın /etc/haproxy/haproxy.cfg ve gerekli ayarları adım adım eklemeye başlayın. İlk blok, günlükleri alan bir sunucunun eklenmesini, izin verilen maksimum eşzamanlı bağlantı sayısını ayarlamanın yanı sıra, yürütme işleminin ait olacağı kullanıcının adını ve grubunu belirtmeyi içerecektir.

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

5000 eşzamanlı bağlantı rakamının ortaya çıkmasının bir nedeni var. Altyapımızda 4000 posta kutumuz olduğundan hepsinin iş e-postalarına aynı anda erişme olasılığını göz önünde bulundurmamız gerekiyor. Ayrıca sayılarının artması durumunda küçük bir rezerv bırakmak gerekir.

Şimdi varsayılan ayarlara sahip bir blok ekleyelim:

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

Bu blok, istemci ve sunucunun, bağlantının süresi dolduğunda bağlantıyı kapatması için maksimum zaman aşımını ayarlar ve ayrıca HAProxy'nin çalışma modunu da ayarlar. Bizim durumumuzda yük dengeleyici TCP modunda çalışır, yani TCP paketlerini içeriklerini analiz etmeden iletir.

Daha sonra çeşitli bağlantı noktalarındaki bağlantılar için kurallar ekleyeceğiz. Örneğin, SMTP bağlantıları ve posta için 25 numaralı bağlantı noktası kullanılıyorsa, bu bağlantılara olan bağlantıları altyapımızda bulunan MTA'lara iletmek mantıklı olacaktır. Bağlantı 80 numaralı bağlantı noktasındaysa bu, Zimbra Proxy'ye iletilmesi gereken bir http isteğidir.

Bağlantı noktası 25 için kural:

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

Bağlantı noktası 465 için kural:

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

Bağlantı noktası 587 için kural:

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

Bağlantı noktası 80 için kural:

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

Bağlantı noktası 443 için kural:

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 paketlerini MTA'ya iletme kurallarında, adreslerinin yanında bir parametre bulunduğunu lütfen unutmayın. proxy gönder. Postfix ayarlarında daha önce yaptığımız değişikliklere uygun olarak gönderenin orijinal IP adresinin TCP paketleriyle birlikte gönderilmesi için bu gereklidir.

Artık HAProxy'de gerekli tüm değişiklikler yapıldığına göre, şu komutu kullanarak hizmeti yeniden başlatabilirsiniz: hizmet happroxy'sinin yeniden başlatılması ve kullanmaya başlayın.

Zextras Suite ile ilgili tüm sorularınız için Zextras Ekaterina Triandafilidi Temsilcisi ile e-posta yoluyla iletişime geçebilirsiniz. [e-posta korumalı]

Kaynak: habr.com

Yorum ekle