تعادل بار در Zimbra نسخه منبع باز با استفاده از HAProxy

یکی از وظایف اصلی هنگام ساخت زیرساخت های OSE در مقیاس بزرگ Zimbra، متعادل کردن بار مناسب است. علاوه بر این واقعیت که تحمل خطای سرویس را افزایش می دهد، بدون تعادل بار نمی توان از پاسخگویی یکسان سرویس برای همه کاربران اطمینان حاصل کرد. برای حل این مشکل، از متعادل کننده های بار استفاده می شود - راه حل های نرم افزاری و سخت افزاری که درخواست ها را بین سرورها توزیع می کند. در میان آنها موارد کاملاً ابتدایی وجود دارد، مانند RoundRobin، که به سادگی هر درخواست بعدی را به سرور بعدی در لیست ارسال می کند، و همچنین موارد پیشرفته تری نیز وجود دارد، به عنوان مثال HAProxy، که به طور گسترده در زیرساخت های محاسباتی با بار بالا استفاده می شود. تعدادی از مزایای قابل توجه بیایید نگاهی بیندازیم به این که چگونه می توانید بار متعادل کننده HAProxy و Zimbra OSE را با هم کار کنند.

تعادل بار در Zimbra نسخه منبع باز با استفاده از HAProxy

بنابراین، طبق شرایط کار، زیرساخت Zimbra OSE به ما داده می‌شود که دارای دو Proxy Zimbra، دو سرور LDAP و LDAP Replica، چهار ذخیره‌سازی نامه با هر کدام 1000 صندوق پستی و سه MTA است. با توجه به اینکه ما با یک میل سرور سروکار داریم، سه نوع ترافیک دریافت می کند که نیاز به تعادل دارند: HTTP برای دانلود کلاینت وب و همچنین POP و SMTP برای ارسال ایمیل. در این حالت، ترافیک HTTP به سرورهای پروکسی Zimbra با آدرس های IP 192.168.0.57 و 192.168.0.58 و ترافیک SMTP به سرورهای MTA با آدرس های IP 192.168.0.77 و 192.168.0.78 می رود.

همانطور که قبلاً ذکر شد، برای اطمینان از توزیع یکنواخت درخواست‌ها بین سرورها، از متعادل‌کننده بار HAProxy استفاده می‌کنیم که روی گره ورودی زیرساخت Zimbra اجرا می‌شود که اوبونتو 18.04 را اجرا می‌کند. نصب هاپروکسی روی این سیستم عامل با استفاده از دستور انجام می شود sudo apt-get install haproxy. پس از این شما در فایل نیاز دارید /etc/default/haproxy تغییر پارامتر ENBLED=0 بر ENBLED=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 را در تمام سرورها با استفاده از دستور restart 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/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 است که باید به پروکسی زیمبرا ارسال شود.

قانون پورت 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 می توانید از طریق ایمیل با نماینده Zextras Ekaterina Triandafilidi تماس بگیرید. [ایمیل محافظت شده]

منبع: www.habr.com

اضافه کردن نظر