واحدة من المهام الرئيسية في بناء البنى التحتية على نطاق واسع زيمبرا 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