Équilibrage de charge dans Zimbra Open-Source Edition avec HAProxy

L'une des principales tâches de la construction d'infrastructures Zimbra OSE à grande échelle est un équilibrage de charge compétent. Outre le fait qu'il augmente la tolérance aux pannes du service, sans équilibrage de charge, il est impossible de fournir la même réactivité du service à tous les utilisateurs. Afin de résoudre ce problème, des équilibreurs de charge sont utilisés - des solutions logicielles et matérielles qui redistribuent les demandes entre les serveurs. Parmi eux, il y en a quelques-uns plutôt primitifs, comme RoundRobin, qui envoie simplement chaque prochaine requête au serveur suivant dans la liste, et il y en a d'autres plus avancés, par exemple, HAProxy, qui est largement utilisé dans les infrastructures informatiques très chargées en raison d'un certain nombre d'avantages importants. Voyons comment les équilibreurs de charge HAProxy et Zimbra OSE peuvent fonctionner ensemble.

image

Ainsi, selon les conditions de la tâche, nous avons reçu l'infrastructure Zimbra OSE, dans laquelle il y a deux Zimbra Proxy, deux serveurs LDAP et LDAP Replica, quatre magasins de messagerie avec 1000 boîtes aux lettres sur chacun et trois MTA. Étant donné que nous avons affaire à un serveur de messagerie, il recevra trois types de trafic qui doivent être équilibrés: HTTP pour télécharger le client Web, ainsi que POP et SMTP pour envoyer des e-mails. Dans le même temps, le trafic HTTP ira aux serveurs proxy Zimbra avec les adresses IP 192.168.0.57 et 192.168.0.58, et le trafic SMTP ira aux serveurs MTA avec les adresses IP 192.168.0.77 et 192.168.0.78.

Comme déjà mentionné, pour assurer une distribution uniforme des demandes entre les serveurs, nous utiliserons l'équilibreur de charge HAProxy, qui fonctionnera sur le nœud d'entrée de l'infrastructure Zimbra exécutant Ubuntu 18.04. L'installation de haproxy sur ce système d'exploitation se fait à l'aide de la commande sudo apt-get install haproxy . Après cela, dans le fichier / etc / default / haproxy, remplacez le paramètre ENABLED = 0 par ENABLED = 1 . Maintenant, pour vous assurer que haproxy fonctionne, entrez simplement la commande service haproxy . Dans le cas où ce service fonctionne, il apparaîtra clairement à la sortie de la commande.

L'un des principaux inconvénients de HAProxy est qu'il ne transmet pas par défaut l'adresse IP du client connecté, la remplaçant par la sienne. Cela peut conduire à des situations où les e-mails envoyés par des attaquants ne peuvent pas être identifiés par leur adresse IP pour l'ajouter à la liste noire. Cependant, ce problème peut être résolu. Pour ce faire, éditez le fichier /opt/zimbra/common/conf/master.cf.in sur les serveurs avec Postfix et ajoutez-y les lignes suivantes:

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 

Pour cette raison, nous ouvrirons les ports 26, 466 et 588, qui recevront le trafic entrant de HAProxy. Une fois les fichiers enregistrés, vous devez redémarrer Postfix sur tous les serveurs à l'aide de la commande zmmtactl restart.

Après cela, commençons à configurer HAProxy. Pour ce faire, créez d'abord une copie de sauvegarde du fichier avec les paramètres cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak . Ensuite, ouvrez le fichier source /etc/haproxy/haproxy.cfg dans un éditeur de texte et commencez à lui ajouter progressivement les paramètres nécessaires. Le premier bloc sera l'ajout d'un serveur qui supprime les journaux, la définition du nombre maximal autorisé de connexions simultanées, ainsi que la spécification du nom et du groupe de l'utilisateur auquel le processus exécutable appartiendra.

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

Le chiffre de 5000 connexions simultanées est apparu pour une raison. Puisqu'il y a 4000 boîtes aux lettres dans notre infrastructure, il est nécessaire de prévoir la probabilité que toutes iront à leur courrier professionnel en même temps. De plus, vous devez laisser une petite marge au cas où leur nombre augmenterait.

Ajoutez maintenant un bloc avec les paramètres par défaut:

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

Dans ce bloc, le délai maximal pour le client et le serveur est défini afin de rompre la connexion à son expiration, et le mode HAProxy est également défini. Dans notre cas, l'équilibreur de charge fonctionne en mode TCP, c'est-à-dire qu'il transmet simplement les paquets TCP sans analyser leur contenu.

Ensuite, nous ajouterons des règles pour les connexions sur différents ports. Par exemple, si le port 25 est utilisé pour les connexions SMTP et le transfert de courrier, il est logique de rediriger les connexions vers les MTA disponibles dans notre infrastructure. Si la connexion est sur le port 80, il s'agit d'une demande http qui doit être transmise au proxy Zimbra.

Règle pour le port 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 

Règle pour le port 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 

Règle pour le port 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 

Règle pour le port 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 

Règle pour le port 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 

Veuillez noter que dans les règles d'envoi de paquets TCP au MTA, le paramètre send-proxy se trouve à côté de leurs adresses. Ceci est nécessaire pour que, conformément aux modifications que nous avons apportées précédemment aux paramètres de Postfix, l'adresse IP d'origine de son expéditeur soit envoyée avec les paquets TCP.

Maintenant que toutes les modifications nécessaires ont été apportées à HAProxy, vous pouvez redémarrer le service à l'aide de la commande service haproxy restart et commencer à l'utiliser.

Pour toutes questions relatives à la Suite Zextras, vous pouvez contacter la représentante de Zextras, Ekaterina Triandafilidi, par e-mail katerina@zextras.com

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


All Articles