Cet article fait partie de notre guide: 5 conseils pour administrer et configurer Exchange

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.

sample Exchange Server setup
Figure 1. Architecture retenue pour notre configuration Exchange

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).

New Virtual Machine Wizard
Figure 2. L’assistant de création de VM d’Hyper-V permet de créer notre VM.
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 :

  1. Télécharger et appliquer les dernières mise à jour à Ubuntu
  2. 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
        address 
  
   
        netmask 
   
    
        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
etwork configuration
Figure 3. Capture d’écran des changements effectués dans le cadre de notre réseau via nano.

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 :+

  1. Définition de la surveillance de chaque service load balancé comme OWA (Outlook Web Access)
  2. Définition des adresses IP auxquelles chaque service est attaché
  3. 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.

creating definitions in a network
Figure 4. Les changements appliqués à la configuration de HAProxy.

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). 

update DNS entries
Figure 5. Configuration du service DNS dans Windows

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:// :8080/stats. 

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

Pour approfondir sur Outils collaboratifs (messagerie, visio, communication unifiée)