Configurer un load balancing open source fiable pour Exchange 2013
Cet article montre comment mettre en place une solution de répartition de charge libre et gratuite basée sur HAProxy en frontal d'Exchange 2013.
Le recours à des équipements de répartition de charge coûteux n’est plus forcément nécessaire dans Microsoft Exchange du fait des améliorations apportées par l’éditeur à Exchange 2013. Si auparavant, il était nécessaire d’utiliser des répartiteurs de charge de niveau 7 capable d’inspecter le trafic et d’assurer que chaque client se connecte toujours au même serveur, Un simple load balancer de niveau 4 suffit aujourd’hui, Exchange 2013 ayant supprimé toute adhérence entre client et serveur.
Dans la pratique cela signifie qu’il est possible d’utiliser un simple load balancer Linux comme HAProxy pour assurer le load balancing au sein d’une ferme Exchange. C’est d’ailleurs une configuration à base d’HA Proxy que nous allons vous proposer de mettre en place dans cet article. Utilisé par certains des sites web les plus important au monde, HAProxy est un load balancer open source qui se prête bien à un usage en entreprise.
Mettre en place une solution de répartition de charge gratuite pour Exchange 2013 n’est pas très compliqué et ne requiert pas vraiment de maintenance après installation. C’est une alternative économique aux solutions basées sur des appliances de load balancing commerciales.
Prenons l’exemple de l’environnement ci-contre (figure 1). Il s’agit d’un site unique avec deux serveurs Exchange. Chaque serveur exécute à la fois le rôle d’accès client et le rôle de serveur de messagerie et participe à un unique database availability group (DAG).
L’avantage d’utiliser un load balancer de niveau 4 est que la configuration de la répartition de charge est simple. Mais cela veut aussi dit qu’il faut utiliser des noms de domaines qualifiés (FQDN ou fully qualified domain names) pour chaque service (SMTP, OWA, ActiveSync...), et qu’il faut configurer en conséquence les URL internes et externes dans Exchange.
Service | FQDN |
Outlook Web App and SMTP | mail.demolemagit.fr |
Exchange Admin Center | eac. demolemagit.fr |
Exchange Web Services | ews.exch demolemagit.fr |
Offline Address Book | oab. demolemagit.fr |
Exchange ActiveSync | eas. demolemagit.fr |
Autodiscover | autodiscover. demolemagit.fr |
Outlook Anywhere | oa. demolemagit.fr |
Un load balancer de niveau 4 ne sait pas inspecter le trafic qui le traverse et ne peut en conséquence savoir si le client requiert une connexion OWA, ActiveSync ou autre chose. Pour assurer que nous pouvons superviser correctement chaque service sur le load balancer, il faut séparer les trafics par adresses IP, ce qui revient à utiliser des adresses séparées pour chaque service.
Configurer Linux pour fournir des services de load balancing Exchange 2013
Pour mettre en place notre load balancer, il nous faut une installation Linux basique. Si vous n’avez jamais installé Linux, cela n’est guère plus compliqué que Windows, surtout si vous avez une connaissance de PowerShell. La distribution Linux que nous avons retenue pour cet article est Ubuntu 12.04 LTS (Long-Term Support). Ubuntu n’est pas forcément meilleur que les autres distributions du marché mais il a l’avantage d’inclure HAProxy, ce qui simplifié l’installation et les mises à jour. Dans notre cas, cette installation d’Ubuntu se fera dans une VM Hyper-V.
La première étape est de récupérer une image ISO d’Ubuntu Server 12.04 LTS depuis le site d’Ubuntu. Nous nous appuierons sur cet ISO pour créer notre machine virtuelle (Figure 2).
Dans le cas de notre configuration modeste, 1 Go de RAM et un unique vCPU suffisent.
L’installation d’Ubuntu est simple. Il suffit de choisir les paramètres par défaut dans l’installeur. Les seules exceptions sont la définition de votre compte utilisateur et la sélection des packages à installer. Lorsque l’installeur vous propose de choisir les packages à installer, choisissez OpenSSH pour permettre une administration à distance du serveur. Le serveur redémarrera une fois l’installation achevée. Au premier démarrage, après le premier log-in, nous allons réaliser quelques tâches de base :
- Télécharger et appliquer les dernières mise à jour à Ubuntu
- Configurer les adresses IP que le serveur va utiliser.
Connectez-vous avec l’identifiant que vous avez créé pendant le processus d’installation. Cet utilisateur nous permettra d’élever notre niveau de privilèges via la commande sudo. apt-get est le programme utilisé pour télécharger et appliquer les mises à jour. Tapez alors les commandes suivantes :
sudo apt-get update
sudo apt-get upgrade
Une fois les mises à jour effectuées, il nous faut assigner des adresses IP statiques aux serveurs. Nous aurons une adresse IP primaires ainsi que des adresses additionnelles pour chaque service load balancé. La configuration pour les services réseau se trouve dans un fichier de paramètres au format texte que nous allons éditer avec l’éditeur en mode ligne de commande nano :
sudo nano -w /etc/network/interfaces
Une fois nano lancé et le fichier interfaces ouvert, modifiez le fichier avec les informations correspondant à votre réseau (dans notre exemple, chaque section est précédée par un commentaire - marqué d’un signe # - décrivant le service concerné):
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet static addressnetmask gateway # OWA and SMTP auto eth0:0 iface eth0:0 inet static address netmask # EAC auto eth0:1 iface eth0:1 inet static address netmask # EWS auto eth0:2 iface eth0:2 inet static address netmask # OAB auto eth0:3 iface eth0:3 inet static address netmask # EAS auto eth0:4 iface eth0:4 inet static address netmask # Autodiscover auto eth0:5 iface eth0:5 inet static address netmask # OA auto eth0:6 iface eth0:6 inet static address
netmask
Une fois vos modifications terminées, appuyez simultanément sur les touches Ctrl et X pour sauvegarder, puis redémarrez le service réseau en utilisant la commande suivante :
sudo /etc/init.d/networking restart
Installer et configurer le load balancer
Notre serveur étant désormais configuré, il est temps d’installer le logiciel de load balancing, HAProxy. Pour cela, entrez la commande suivante :
sudo apt-get install haproxy
Le paquet HAProxy va être téléchargé et installé. Comme cette installation se fait au travers du gestionnaire de paquets, les mises à jour s’appliqueront aussi à HAProxy.
Comme c’était le cas pour le fichier de configuration réseau, le fichier de configuration de HAProxy est aussi un simple fichier texte. Il nous faut maintenant l’éditer pour modifier un certain nombre de paramètres :+
- Définition de la surveillance de chaque service load balancé comme OWA (Outlook Web Access)
- Définition des adresses IP auxquelles chaque service est attaché
- Définition des adresses IP des serveurs back-end
Encore une fois, nous entrerons les modifications via l’éditeur de texte nano:
sudo nano -w /etc/haproxy/haproxy.cfg
Il s’agit de créer des définitions pour chaque service en s’appuyant sur le fichier de configuration suivant comme modèle :
global maxconn 4096 user haproxy group haproxy daemon defaults mode tcp balance roundrobin retries 3 option redispatch maxconn 10000 contimeout 5000 clitimeout 50000 srvtimeout 50000 listen OWA:443 option httpchk /owa/healthcheck.htm server <Nom du Serveur 1> <Server 1 IP> check port 80 server <Nom du Serveur 2> <Server 2 IP> check port 80 listen EAC <EAC IP>:443 option httpchk /eac/healthcheck.htm
server <Nom du Serveur 1> <Server 1 IP> check port 80 server <Nom du Serveur 2> <Server 2 IP> check port 80
listen EWS:443 option httpchk /ews/healthcheck.htm
server <Nom du Serveur 1> <Server 1 IP> check port 80 server <Nom du Serveur 2> <Server 2 IP> check port 80
listen OAB:443 option httpchk /oab/healthcheck.htm
server <Nom du Serveur 1> <Server 1 IP> check port 80 server <Nom du Serveur 2> <Server 2 IP> check port 80
listen EAS:443 option httpchk /Microsoft-Server-ActiveSync/healthcheck.htm
server <Nom du Serveur 1> <Server 1 IP> check port 80 server <Nom du Serveur 2> <Server 2 IP> check port 80
listen Autodiscover:443 option httpchk /Autodiscover/healthcheck.htm
server <Nom du Serveur 1> <Server 1 IP> check port 80 server <Nom du Serveur 2> <Server 2 IP> check port 80
listen OA:443 option httpchk /rpc/healthcheck.htm
server <Nom du Serveur 1> <Server 1 IP> check port 80 server <Nom du Serveur 2> <Server 2 IP> check port 80
listen SMTP:25 option smtpchk
server <Nom du Serveur 1> <Server 1 IP> check port 25 server <Nom du Serveur 2> <Server 2 IP> check port 25
listen stats:8080 mode http stats enable stats uri /
Des problèmes avec l’URL de suivi de la santé des services Exchange (Health Check)?
Si vous ne l’avez pas déjà fait, assurez-vous de décocher la case contraignant à l’utilisation de SSL pour le répertoire virtuel OWA sur chaque serveur Exchange. Ceci est nécessaire car HAProxy doit réaliser son contrôle de la santé des services sur une connexion HTTP.
Utilisez la combinaison de touches Ctrl-X pour enregistrer les modifications apportées au fichier de configuration de HAProxy puis activez les nouveaux paramètres avec les commandes suivantes :
update-rc.d haproxy enable sudo /etc/init.d/haproxy restart
Comme pour tout répartiteur de charge, il faut désormais rediriger le trafic entrant vers le load balancer pour qu’il fasse son office. Pour cela, il convient de mettre à jour les entrées du serveur DNS afin qu’elles correspondent à chaque service (Figure 5).
Maintenant nous pouvons commencer à tester comment se comporte le trafic passant au travers du load balancer. Il faut tout d’abord s’assurer que le trafic est distribué correctement. HAProxy fournit pour cela un certain nombre de statistiques, que nous avons activées dans le fichier de configuration. Pour accéder à ces statistiques, connectez-vous à l’URL suivante : http://
Pour terminer, nous nous intéresserons à quelques commandes utiles lorsque l’on procède à une maintenance sur les serveurs Exchange.
Dans les précédentes versions du serveur de messagerie de Microsoft, nous aurions utilisé l’interface graphique du load balancer pour empêcher le routage de trafic vers un serveur donné. Avec Exchange 2013, il suffit de mettre en maintenance le rôle d’accès client d’Exchange avec la commande PowerShell suivante :
Set-ServerComponentState <Server Name> -Component ServerWideOffline -State Inactive -Requester Maintenance
Comme HAProxy surveille la disponibilité des services Exchange, il considérera le serveur comme indisponible et stoppera la distribution de trafic vers ce serveur pendant les opérations de maintenance.
Une fois les travaux de maintenance achevée, il suffira d’exécuter la commande Powershell suivante pour réactiver le service. HA Proxy notera le retour de la disponibilité du service et recommencera à router les requêtes vers le serveur :
Set-ServerComponentState <Server Name> -Component ServerWideOffline -State Active -Requester Maintenance
A propos de l’auteur: Steve Goodman est un MVP Exchange et travaille comme architecte technique pour l’un des principaux partenaires de Microsoft au Royaume-Uni, le Phoenix IT Group. Goodman travaille dans l’industrie IT depuis 15 ans et exploite des serveurs Exchange depuis la version 5.5.
Traduction depuis le texte original en anglais réalisée par Christophe Bardy, LeMagIT