Rappel :
La haute disponibilité des bases de données dans Exchange s’effectue à l’aide d’un DAG.
Ce terme signifie « Database Availability Group » ou en français « Groupe de disponibilité de base de données ».
Il assure pour cela une redondance au niveau du « BACK-END ».
Son principe de fonctionnement est simple : il réplique des bases de données sur un regroupement plusieurs serveurs Exchange ayant le rôle de boites aux lettres pour en effectuer la haute disponibilité pour de prévenir les pannes ou les coupures de service potentielles. Ce qui veut dire que les serveurs Exchange peuvent ainsi récupérer automatiquement des bases de données à la suite d’une panne d’un serveur ou lorsqu’une base de données n’est plus accessible.
Un DAG se base sur le service de « Cluster » de Windows Serveur mais ne peut pas être géré par les outils de Cluster de basculement de Windows Server.
Lorsque la création d’un DAG est initiée, les rôles et fonctionnalités de cluster sont installés sur chaque nœud qui en fait partie.
Au sein d’un DAG il est possible de configurer plusieurs éléments. Voici quelques exemples :
Attention :
Réseau MAPI : réseau LAN
Réseau de réplication : réplication entre les serveurs du DAG
Voici deux commandes très utiles pour vérifier la configuration du DAG :
Get-DatabaseAvailabilityGroup «nom_du_DAG» -Status | Format-List
Get-DatabaseAvailabilityGroupNetwork -Identity «nom_du_DAG»
La fonction « autoreseed » est apparue à partir de Exchange 2013 et ne fonctionne que dans un DAG.
Elle est activée par défaut mais ne fonctionne pas par défaut puis qu’elle nécessite une configuration spécifique.
Son but est de détecter et de résoudre automatiquement les problèmes de stockages des copies de bases de données et est basée sur des systèmes de volumes dont un volume de secours (SPARE).
Cette fonction nécessite que les fichiers de données de bases de données soient colocalisés dans le même répertoire (fichiers de logs et de bases de données)
Le mécanisme est le suivant :
Il est recommandé d’utiliser un stockage de type JBOD pour les DAG avec plus de 2 copies de bases de données.
Exemple avec un schéma :
On retrouve ici, la partition système qui est en RAID 1 dans laquelle nous avons créé deux dossiers. Un pour les bases de données et un deuxième pour les « Exchangevolumes ». C’est dans ce dernier que la liste des volumes sera disponible, y compris le volume SPARE permettant à l’autoreseed de fonctionner.
La partition C : stockera donc les deux dossiers mais pas les contenus, ils seront disponibles via le réseau qu’ils soient physiques ou virtuels via des points de montage. La même chose sera faite pour les bases de données et les copies de bases de données.
Get-DatabaseAvailabilityGroup «nom_du_DAG» | fl AutoDagAutoReseedEnabled
md C:\ExchangeVolumes
md C:\ExchangeDatabases
Set-DatabaseAvailabilityGroup «nom_du_DAG» -AutoDagVolumesRootFolderPath «C:\ExchangeVolumes»
Set-DatabaseAvailabilityGroup «nom_du_DAG» -AutoDagDatabasesRootFolderPath «C:\ExchangeDatabases»
Set-DatabaseAvailabilityGroup «nom_du_DAG» -AutoDagDatabaseCopiesPerVolume «numéro»
C:\ExchangeVolumes\Volume1
C:\ExchangeVolumes\Volume2
md : C:\ExchangeDatabases\DB01
Mountvol.exe C:\ExchangeDatabases\DB01 \\?\Volume (GUID)
md : C:\ExchangeDatabases\DB01\DB01.db
md : C:\ExchangeDatabases\DB01\DB01.log
New-MailboxDatabase -Name DB01 -Server «nom_du_serveur» -LogFolderPath C:\ExchangeDatabases\DB01\DB01.log -EdbFilepath C:\ExchangeDatabases\DB01\DB01.db\DB01.edb
Attention : il est IMPERATIF que la solution soit étudiée et configurée avant la mise en place des bases de données et de leur copies
La mise en place devra se dérouler de la manière suivante :
Exemple avec des VMs :
Gestion et mise en ligne des disques depuis Windows
Vérification de l’activation par défaut
Création d’un répertoire « volumes » associé à une partition (point de montage)
Création d’un répertoire pour les bases de données (point de montage)
Configuration du répertoire racine pour les volumes dans le DAG
Configuration du répertoire racine pour les bases de données du DAG
Configuration du nombre de copie de bases de données par volume
Monter les volumes de stockages, via la gestion des disques de Windows (diskmgmt.msc)
Cliquer sur « ajouter »
Cliquer sur « nouveau dossier » et créer le dossier « volume1 »
Sélectionner le dossier créé et valider par « OK »
Valider le montage par OK
Refaire la même chose pour chacun des disques en prenant soin de nommer le dossier qui sera créé correctement (volume2, volume 3).
Lorsque cette manipulation est faite sur un serveur il faudra obligatoirement la refaire sur le ou les autres serveurs du DAG afin d’avoir une configuration uniforme partout.
Création des répertoires de bases de données
Créer des points de montage pour les bases de données.
Faire la commande suivante afin d’identifier les GUID des volumes précédemment créés sur les disques.
Via l’EMS
Une fois le GUID du volume identifié le point de montage peut être créé depuis une invite de commande CDM
On peut vérifier le point de montage en refaisant la commande « mountvol.exe »
Via l’EAC
Valider par « OK »
Création de la structure des répertoires des bases de données
Création des bases de données
Pour redémarrer le service il est possible de le faire directement depuis les services Windows mais également en PowerShell via l’EMS
Pour monter les bases de données
Vérification du statut des bases de données sur les serveurs
La vérification permet de constater que les bases de données sont montées sur le serveur EXCH-01 et que leurs copies sont saines sur EXCH-02.
Pour vérifier le bon fonctionnement, on peut simuler une panne sur le volume1. Pour rappel il s’agit du volume qui contient les bases de données active et montées.
Mettre hors connexion le volume1
Utilisation de la commande EMS pour voir le statut des bases de données. On constate que les bases de données obtiennent le statut « FailedAndSuspended ».
Si le basculement automatique via l’« autoreseed » fonctionne elles devraient être montée sur le deuxième serveur. Il ne reste plus qu’a vérifier avec la même commande.
Les bases de données sont en train de remonter, la fonction « autoreseed » est donc fonctionnelle.
Attention : cela peut prendre plusieurs heures
Les réseaux peuvent être configurés de deux façons :
Via l’EAC
Dans la partie « serveur » cliquer sur « groupes de disponibilité de la base de données »
Pour modifier le DAG cliquer sur l’icône
activer la configuration manuelle en cochant la case
Une fois la configuration manuelle activée il sera possible de modifier les options dans la partie de droite du DAG
L’option « afficher les détails » permet d’éditer les différents paramètres
Via l’EMS
Set-DatabaseAvailabilityGroup «nom_du_DAG» -ManualDagNetworkConfiguration $True
New-DatabaseAvailabilityGroupNetwork – DatabaseAvailabilityGroup «nom_du_DAG» -Name «nom_du_réseau» -Description «description_du_réseau» -Subnets «réseau/masque» -ReplicationEnabled $True
Set-DatabaseAvailabilityGroupNetwork -Subnest ««réseau/masque» -Identity «nom_du_DAG\MapiDagNetwork»
Remove-DatabaseAvailabilityGroupNetwork -Identity «nom_du_DAG\nom_du_réseau»
Set-DatabaseAvailabilityGroupNetwork -Identity «nom_du_DAG\nom_du_réseau» -ReplicationEnabled $False -IgnoreNetwork $True
Set-DatabaseAvailabilityGroup -Identity «nom_du_DAG» -ReplicationPort «numéro_du_port»
Set-DatabaseAvailabilityGroup -Identity «nom_du_DAG» -NetworkCompression Enabled -NetworkEncryption InterSubnetOnly
Via l’EAC
Dans la section « serveur » cliquer sur « base de données »
Sélectionner la base de données dont l’ordre d’activation devra être modifier puis cliquer sur « afficher les détails » à droite de l’écran
La modification peut être faite dans la section « Numéro de préférence d’activation »
Via l’EMS
Set-MailboxDatabaseCopy -Identity «nom_de_la_BDD\nom_du_serveur» -ActivationPreference «numéro»
Set-MailboxDatabaseCopy -Identity DB01\EXCH01 -ActivationPreference 1
Set-MailboxDatabaseCopy -Identity DB01\EXCH02 -ActivationPreference 2
Set-MailboxDatabaseCopy -Identity DB02\EXCH01 -ActivationPreference 2
Set-MailboxDatabaseCopy -Identity DB02\EXCH02 -ActivationPreference 1
La base de données « DB01 » sera montée par défaut sur le serveur EXCH01 tandis que la base de données « DB02 » sera montée par défaut sur EXCH02. Dans chacun des cas, l’autre serveur servira en second pour monter les bases de données s’il n’est pas possible de le faire sur les serveurs par défaut.
Il est possible de modifier le comportement du montage automatique des bases de données.
Pour cela, le paramètre « AutoDatabaseMountDial » sera utilisé pour spécifier le comportement du montage automatique des bases de données après le basculement d’une base de données notamment avec les options suivantes :
Cette valeur spécifie que la base de données sera remontée automatiquement après un basculement SI la longueur de la file d’attente de copies est inférieur ou égale à « 12 » C’est-à-dire le nombre de journaux reconnus par la copie passive devant être répliqués
Cette valeur spécifie que la base de données sera remontée automatiquement après un basculement SI la longueur de la file d’attente de copies est inférieur ou égale à « 6 ». C’est-à-dire le nombre de journaux reconnus par la copie passive devant être répliqués
Cette valeur spécifie que la base de données ne sera pas remontée automatiquement tant que tous les journaux générés par la copie active ne seront pas copiés sur la copie passive.
Set-MailboxServer -Identity «nom_du_serveur» -AutoDatabaseMountDial «valeur_du_paramètre»
Exemple :
Set-MailboxServer -Identity EXCH-01 -AutoDatabaseMountDial BestAvailability
Le montage automatique est connu sous le nom de Datacenter Activation Coordination (DAC).
Il permet de prévenir le comportement de « Split Brain » dans le cas d’une coupure de communication entre serveurs (Datacenter).
Il est désactivé par défaut mais il est recommandé de l’activer si le DAG possède plus de 2 serveurs membres.
Définition Wikipédia du « Split Brain »
Un « Split-Brain » se produit lorsque deux parties d'un cluster d'ordinateurs sont déconnectées, chaque partie croyant que l'autre ne fonctionne plus. Le terme est une analogie médicale du syndrome Split-Brain (littéralement « cerveau scindé »).
Les clusters à haute disponibilité utilisent le réseau afin de surveiller l'état des nœuds le composant. Une des fonctionnalités les plus critiques qu'un logiciel de clustering doit pouvoir gérer est le Split-Brain. En effet, si le lien réseau entre les nœuds vient à tomber, mais que ces nœuds sont toujours en fonctionnement, ceux-ci vont croire que les autres nœuds ne fonctionnent plus et vont essayer de démarrer des services qui en réalité tournent toujours. Ceci peut occasionner des duplications de services, voire de la corruption de données dans certains cas. Les données peuvent ainsi se trouver dans un état incohérent.
Pour prévenir ce phénomène, les machines doivent utiliser des liens redondants, être équipées d'un mode gérant le Split-Brain et pouvoir se mettre en état d'auto-fencing - c'est-à-dire de pouvoir s'isoler par elle-même de la grappe - lorsque des nœuds semblent hors ligne.
Pour configurer le DAC via EMS :
Set-DatabaseAvailabilityGroup -Identity «nom_du_DAG» -DatacenterActivationMode DagOnly
Il est également possible d’utiliser les commandes suivantes :
Le paramètre « DatabaseCopyAutoActivationPolicy » permet de spécifier la stratégie à adopter pour l’activation automatique des copies de bases de données de boites aux lettres sur les serveurs de boites aux lettres ciblés.
Pour cela les valeurs suivantes seront utilisées :
Configuration via EMS :
Set-MailboxServer «nom_du_serveur» -DatabaseCopyAutoActivationPolicy «valeur»
Exemple :
Set-MailboxServer EXCH-01 -DatabaseCopyAutoActivationPolicy Blocked
Dans cet exemple l’activation automatique des copies de bases de données sur le serveur EXCH-01 sont bloquées.
Par défaut la valeur est placé à « Unrestricted »
Le paramètre « MaximumActiveDatabases » permet de spécifier le nombre maximal de base de données qui peuvent être montées en même temps sur un serveur de boite aux lettres.
Set-MailboxServer -Identity «nom_du_serveur» -MaximumActiveDatabases «nombre »
Par défaut il n’y a pas de valeur à ce paramètre
Exemple :
Set-MailboxServer -Identity EXCH-01 -MaximumActiveDatabases 20
Attention : il ne s’agit pas du nombre total de bases de données sur le serveur mais bien le nombre maximum de bases de données qui sont MONTEES (donc actives) sur le serveur
Set-DatabaseAvailabilityGroup -Identity «nom_du_DAG» -AlternateWitnessDirectory «chemin_du_répertoire» -AlternateWitnessServer «nom_du_serveur»
Exemple :
Set-DatabaseAvailabilityGroup -Identity DAG01 -AlternateWitnessDirectory D:\DAGFileShareWitness\DAG01 -AlternateWitnessServer SRV-Temoin-02
Comme le nom l’indique, cela permet de renommer une base de données et c’est généralement utilisé pour changer les noms par défaut des bases de données.
Il est toutefois conseillé de renommer une base de données avec le même nom que les fichiers binaires (« .edb » et les « .log »)
En pratique comment ça marche :
Il est possible de renommer les bases de données à l’aide de l’EAC ou de l’EMS
Via l’EAC :
Dans la section « serveur » cliquer sur « base de données »
Cliquer sur l’icône
pour faire apparaître les paramètres de la base de données
Pour renommer la base de donner, il suffit de modifier le nom dans la section « nom » de la base de données.
Penser à donner le même nom aux fichiers binaires (« .edb » et les « .log »)
En cas de nécessité, le chemin est indiqué dans la section « chemin d’accès à la base de données »
Cliquer sur enregistrer
Via l’EMS
En utilisant la commande suivante :
Set-MailboxDatabase -Identity «nom_par_défaut_de_la_BDD» -Name «nouveau_nom_de_la_BDD»
Exemple :
Set-MailboxDatabase -Identity «Mailbox Database 0102030405» -Name DB05
Avant renommage :
Après renommage :
Le déplacement est généralement utilisé pour déplacer la base de données par défaut du serveur.
Pour effectuer un déplacement il est obligatoire d’avoir une copie de la base de données.
Cette fonction n’est absolument pas recommandée en cas d’utilisation de l’« autoreseed ».
De plus le déplacement entraine une coupure de service pour les boites aux lettres contenues dans la base de données qui sera déplacée.
Marche à suivre :
Uniquement via l’EMS :
Move-DatabasePath -Identity «nom_de_la_BDD» -EdbFilePath «nouveau_chemin_du_fichier_edb_correspondant\nom_BDD.edb» -LogFolderpath «nouveau_chemin_du_fichier_log_correspondant\nom_BDD.log»
Attention : bien peser à créer les différentes répertoires avant de lancer la commande
Le « Replay Lag » est une solution de retard de relecture, c’est-à-dire la mise en place retardée d’une copie de base de données.
Cette fonction fait partie du plan « Native Data Protection » de Exchange 2016 mais est également retrouvé dans Exchange Online (Office365). Elle permet de s’affranchir des anciens processus de sauvegardes.
Toutefois attention, cette fonction n’est PAS une sauvegarde mais une solution alternative de récupération d’urgence qui fonctionne uniquement lorsqu’un DAG est configuré.
La copie retardée de la base de données n’aura pas les mêmes informations que la base de données original à un instant T.
En effet elle aura les informations à un « instant T - X heures » ou X jours en fonctions de ce qui a été configuré.
Elle peut s’appliquer sur une ou plusieurs copies de bases de données et par défaut est désactivée.
Attention : Plus le délai de retard (Replay Lag) est grand, plus le processus de récupération de base de données sera long dû aux logs de transaction qui devront passer les informations manquante dans la base de données.
La période de délai peut aller de 0 à 14 jours (jours.heures:minutes:secondes).
Il est conseillé de configurer les valeurs de « Safety Net » (file d’attente) avec des valeurs égales ou supérieurs.
La solution de « Replay Lag » va stocker un grand nombre de journaux de transactions pour les bases de données qui sont configurées en retard. Il faut prévoir le stockage adéquat.
Lors de la configuration d’une base de données avec retard, il est impératif de désactiver le montage automatique pour ne pas entrainer une corruption logique des autres copies.
Cette solution est idéale pour se coupler avec une solution de sauvegarde ou la configuration des journaux circulaires.
Via l’EMS
Set-MailboxDatabaseCopy -Identity «nom_de_la_BDD\nom_du_serveur» -ReplayLagTime «jours.heures:minutes:secondes»
Suspend-MailboxDatabaseCopy -Identity «nom_de_la_BDD\nom_du_serveur» -ActivationOnly -SuspendComment «commentaire_pour_la_suspension»
Set-MailboxDatabaseCopy -Identity «nom_de_la_BDD\nom_du_serveur» -TrucationLagTime «jours.heures:minutes:secondes»
En cas de problème sur une base de données il est possible que l’on veuille activer sa copie retardée.
Avant l’activation il est conseillé de faire une copie des données binaires (« .edb » et « .log »).
Voici les étapes :
Suspend-MailboxDatabaseCopy «nom_de_la_BDD\nom_du_serveur» -SuspendComment «Activation_de_la_copie_sur_le_serveur_XXX» -Confirm:$False
Soit faire l’activation de la copie de base de données en jouant tous les journaux non validés
Move-ActiveMailboxDatabase «nom_de_la_BDD» -ActivateOnServer «nom_du_serveur» -SkipLagChecks
Soit faire l’activation avec la fonctionnalité de récupération SafetyNet
Eseutil /mh «chemin_dufichier.edb_de_la_BDD» | findstr /C:«Log Required»
Déplacer les journaux qui ne sont pas compris entre la valeur « LowGeneration » et « HighGeneration ».
Arrêter le service de réplication Exchange sur le serveur avec la copie active.
Puis faire la commande suivante :
Move-ActiveMailboxDatabase «nom_de_la_BDD» -ActivateOnServer «nom_du_serveur» -MountDialOverride Besteffort -SkipActiveCopyChecks -SkipClientExperienceChecks -SkipHealthChecks -SkipLagChecks
Soit faire l’activation en jouant les journaux d’un moment spécifique
Déterminer les fichiers journaux à relire impérativement dans la base de données afin de satisfaire aux besoins de la récupération en se basant sur l’heure et la date des fichiers journaux.
Tous les fichiers journaux créés par la suite devront être déplacés dans un répertoire jusqu’à ce que le processus de récupération soit terminé et que les fichiers journaux ne soient plus nécessaires.
Supprimer le fichier point de contrôle (« .chk ») de la base de données
Eseutil.exe /r eXX /a
Une fois la relecture des journaux terminée, la base de données se trouvera dans un état d’arrêt et pourra être copiée puis utilisée dans le cadre d’une récupération
Resume-MailboxDatabaseCopy -Identity «nom_de_la_BDD\nom_du_serveur»
La procédure de mise en maintenance est généralement utilisée dans un environnement DAG.
Elle permet d’isoler proprement un serveur pour y effectuer des opérations de maintenance, permettant de prévenir toute utilisation non souhaitée de ce serveur et la perturbation utilisateur :
Exemple de maintenances :
Uniquement via l’EMS
Set-ServerComponentState «nom_du_serveur» -Component HubTransport -State Draining -Requester Maintenance
Redirect-Message -Server «nom_du_serveur» -Target «FQDN_du_serveur_qui_aura_les_mails»
Suspend-ClusterNode -Name «nom_du_serveur»
Set-MailboxServer «nom_du_serveur» -DatabaseCopyActivationDisabledAndMoveNow $True
Set-mailboxServer «nom_du_serveur» -DatabaseCopyAutoActivationPolicy Blocked
Get-MailboxDatabaseCopyStatus -Server «nom_du_serveur» | Where {$._Status -eq «Mounted»}
Set-ServerComponentState «nom_du_serveur» -Component ServerWideOffline -State Inactive -Request Maintenance
Uniquement via l’EMS
Set-ServerComponentState «nom_du_serveur» -Component ServerWideOffline -State Active -Request Maintenance
Resume-ClusterNode -Name «nom_du_serveur»
Set-MailboxServer «nom_du_serveur» -DatabaseCopyActivationDisabledAndMoveNow $False
Set-mailboxServer «nom_du_serveur» -DatabaseCopyAutoActivationPolicy Unrestricted
Set-ServerComponentState «nom_du_serveur» -Component HubTransport -State Active -Requester Maintenance
%ExchangeInstallPath%\Scripts\RedistributeActiveDatabase.ps1 -DagName «nom_du_DAG» -ShowDatabase DistributionByServer | ft
%ExchangeInstallPath%\Scripts\RedistributeActiveDatabase.ps1 -DagName «nom_du_DAG» -BalanceDbsBy ActivationPreference
En filtrant sur les erreurs :
Il est également possible de vérifier les listes d’attentes via l’outil « Exchange Toolbox »
Vérification des cartes réseaux (leur activation, les configurations réseaux, etc.)
Vérification du DAG Network pour voir si tout est bien configuré et actif
Via le gestionnaire de service et la vérification des ressources.
Mais également consulter l’état de santé du serveur avec la commande suivante :
Directement dans les répertoires de Exchange
Il est possible que dans certaines situations les copies d’une base de données ne soient pas complètement saines voir totalement en erreur pour des raisons de stockage, réplication, de services ou autres.
Attention : avant de commencer les manipulations de réparation il est impératif de disposer de sauvegardes et/ou de copies saines de la base de données
Pour contrôler l’état des copies de bases de données sur un serveur il faut utiliser la commande suivante
Get-MailboxDatabaseCopyStatus -Server «nom_du_serveur»
En cas de problème de stockage :
Update-MailboxDatabaseCopy -Identity «nom_de_la_BDD\nom_du_serveur» -SourceServer «nom_du_serveur»
En cas de problème d’index :
Mettre le serveur en maintenance (client pas exchange) et faire la commande suivante
Update-MailboxDatabaseCopy -Identity «nom_de_la_BDD\nom_du_serveur» -CatalogOnly
Si cela ne fonctionne pas il faudra alors faire la démarche suivante
Autre problème
Il est possible de supprimer les données sur le serveur puis de les récupérer sur un autre serveur possédant d’une copie saine.
Faire très attention avec cette commande car elle efface tout de la base de données sur un serveur ciblé.
Update-MailboxDatabaseCopy -Identity «nom_de_la_BDD\nom_du_serveur» -SourceServer «nom_du_serveur» -DeleteExistingFiles