موازنة التحميل في Zimbra Open-Source Edition باستخدام HAProxy

إحدى المهام الرئيسية عند بناء بنيات تحتية واسعة النطاق لـ Zimbra OSE هي موازنة التحميل المناسبة. بالإضافة إلى حقيقة أنها تزيد من التسامح مع الخطأ في الخدمة، بدون موازنة التحميل، من المستحيل ضمان نفس استجابة الخدمة لجميع المستخدمين. من أجل حل هذه المشكلة، يتم استخدام موازنات التحميل - حلول البرامج والأجهزة التي تعيد توزيع الطلبات بين الخوادم. من بينها هناك طلبات بدائية تمامًا، مثل RoundRobin، والتي ترسل ببساطة كل طلب لاحق إلى الخادم التالي في القائمة، وهناك أيضًا طلبات أكثر تقدمًا، على سبيل المثال HAProxy، والذي يستخدم على نطاق واسع في البنى التحتية للحوسبة عالية التحميل بسبب عدد من المزايا الهامة. دعونا نلقي نظرة على كيفية جعل موازن التحميل HAProxy وZimbra OSE يعملان معًا.

موازنة التحميل في Zimbra Open-Source Edition باستخدام HAProxy

لذلك، وفقًا لشروط المهمة، تم منحنا البنية التحتية Zimbra OSE، التي تحتوي على وكيلي Zimbra، وخادمين LDAP وLDAP Replica، وأربعة مخازن بريد تحتوي كل منها على 1000 صندوق بريد وثلاثة MTAs. نظرًا لأننا نتعامل مع خادم بريد، فسوف يتلقى ثلاثة أنواع من حركة المرور التي تحتاج إلى موازنة: 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 تغيير المعلمة ممكّن = 0 في ممكّن = 1. الآن، للتأكد من أن haproxy يعمل، فقط أدخل الأمر هابروكسي الخدمة. إذا كانت هذه الخدمة قيد التشغيل، فسيكون ذلك واضحًا من مخرجات الأمر.

أحد العيوب الرئيسية لـ 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 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 والبريد، فمن المنطقي إعادة توجيه الاتصالات إليه إلى MTAs المتوفرة في البنية الأساسية لدينا. إذا كان الاتصال على المنفذ 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، يمكنك إعادة تشغيل الخدمة باستخدام الأمر إعادة تشغيل خدمة haproxy والبدء في استخدامه.

لجميع الأسئلة المتعلقة بـ Zextras Suite ، يمكنك الاتصال بممثل Zextras Ekaterina Triandafilidi عن طريق البريد الإلكتروني [البريد الإلكتروني محمي]

المصدر: www.habr.com

إضافة تعليق