تحميل موازنة في Zimbra Open-Source Edition مع HAProxy

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

صورة

لذلك ، ووفقًا لشروط المهمة ، تم إعطاؤنا البنية الأساسية لـ Zimbra OSE ، حيث يوجد خادمي Zimbra Proxy ، وخادمي 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 ، غيّر المعلمة ENABLED = 0 إلى ENABLED = 1 . الآن ، للتأكد من عمل haproxy ، ما عليك سوى إدخال الأمر 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.

بعد ذلك ، لنبدأ في إعداد 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 ، يمكنك الاتصال بممثل Zextras ، Ekaterina Triandafilidi ، عن طريق البريد الإلكتروني katerina@zextras.com

Source: https://habr.com/ru/post/ar479536/


All Articles