Magasin géré dans Exchange Server

Le magasin géré est le nom des processus de banque d’informations (également appelé Store) dans Exchange Server 2016 et Exchange Server 2019. Introduit dans Exchange Server 2013, le magasin géré utilise un modèle de processus contrôleur/worker qui fournit une isolation des processus de stockage et un basculement de base de données plus rapide. Le magasin géré utilise également un mécanisme de mise en cache de base de données statique qui remplace l’algorithme de mémoire tampon dynamique dans les versions précédentes d’Exchange.

Le modèle multiprocesseur utilisé par le magasin géré se compose des processus suivants sur le serveur de boîtes aux lettres :

  • Processus de contrôleur de service de magasin unique pour l’ensemble du serveur Exchange (Microsoft.Exchange.Store.Service.exe, également appelé MSExchangeIS).

  • Un processus worker pour chaque base de données montée (Microsoft.Exchange.Store.Worker.exe). Lorsqu'une base de données est montée, un nouveau processus de travail desservant uniquement cette base de données est instancié. Lorsqu'une base de données est démontée, le processus de travail de cette base de données est arrêté.

Par exemple, si vous avez 40 bases de données de boîtes aux lettres montées sur un serveur de boîtes aux lettres, 41 processus seront en cours d’exécution pour le magasin géré : un pour chaque base de données et un pour le contrôleur de processus de service de magasin. Le contrôleur de processus du magasin surveille l’intégrité de tous les processus worker du magasin sur le serveur. Un arrêt forcé ou inattendu de l'Microsoft.Exchange.Store.Service.exe provoque un basculement immédiat de toutes les copies de base de données actives sur le serveur.

Le magasin géré est également étroitement intégré au service de réplication Microsoft Exchange (MSExchangeRepl.exe) et à Active Manager. Le processus de contrôleur, les processus de travail et le service de réplication fonctionnent ensemble pour fournir une plus grande disponibilité et fiabilité, comme décrit dans la liste suivante :

  • Processus du service de réplication Microsoft Exchange (MSExchangeRepl.exe) :

    • Responsable de l’émission des opérations de montage et de démontage dans le Store.

    • Lance une action de récupération sur les défaillances de stockage ou de base de données signalées par le Store, le moteur de stockage extensible (ESE) et les répondeurs de disponibilité managée.

    • Détecte les défaillances inattendues de base de données.

    • Fournit l’interface d’administration pour les tâches de gestion.

  • Processus/contrôleur de service de stockage (Microsoft.Exchange.Store.Service.exe) :

    • Gère la durée de vie de chaque processus de travail en fonction des opérations de montage et de démontage reçues du service de réplication.

    • Gère les demandes entrantes à partir du Gestionnaire de contrôle des services Windows.

    • Enregistre les éléments d’échec lorsque des problèmes de processus de travail du magasin ont été détectés (par exemple, blocage ou sortie inattendue).

    • Met fin aux processus worker du magasin dans l’événement de basculement de réponse.

  • Processus de travail de banque (Microsoft.Exchange.Store.Worker.exe)

    • Responsable de l’exécution des opérations RPC pour les boîtes aux lettres sur une base de données.

    • Le point de terminaison RPC instance dans le processus de travail est le GUID de la base de données.

    • Fournit le cache de base de données pour une base de données.

Algorithme de mise en cache de base de données statique

Le magasin géré utilise un algorithme simple et direct pour déterminer le cache de base de données par rapport à l’allocation de mémoire tampon dynamique utilisée dans les versions précédentes d’Exchange. La mémoire allouée pour chaque cache de base de données (autrement dit, chaque processus worker du magasin) est basée sur le nombre de copies de base de données locales et la valeur configurée du paramètre MaximumActiveDatabases sur l’applet de commande Set-MailboxServer (la valeur par défaut est $null ou vide). Si la valeur de MaximumActiveDatabases est supérieure au nombre de copies de base de données actuelles, le calcul du cache est basé sur le nombre de copies de base de données.

L’algorithme statique alloue de la mémoire pour le cache ESE de chaque processus worker de magasin en fonction de la quantité de RAM physique installée sur le serveur. Il s’agit de la cible de cache maximale de la base de données. 25 % de la mémoire totale du serveur est allouée au cache ESE et est appelée cible de taille du cache du serveur.

Remarque

Vous pouvez remplacer la cible de taille du cache du serveur et, par conséquent, la quantité de mémoire allouée au cache Store pour ESE à l’aide msExchESEParamCacheSizeMax de l’attribut de l’objet InformationStore dans Active Directory (la valeur configurée est le nombre de pages de 32 Ko à allouer sur tous les processus de magasin).

Une quantité statique de ce cache est allouée aux copies actives et passives. Le processus worker du magasin se voit allouer la cible de cache maximale uniquement lors de la maintenance d’une copie de base de données active. Les copies de bases de données passives bénéficient de 20 % de la cible de cache maximale. Le reste est conservé par la banque et alloué au processus de travail si la base de données passive devient active.

La cible de cache maximale est calculée uniquement au démarrage de la banque. Par conséquent, si vous ajoutez ou supprimez des bases de données ou des copies de bases de données, vous devez redémarrer le service de contrôleur de banque (MSExchangeIS) afin que le cache puisse être ajusté. Si le service n’est pas redémarré, les nouvelles bases de données ont une cible de cache plus petite que les bases de données qui existaient avant le dernier démarrage du service. Dans ce scénario, la somme des cibles de taille de cache de base de données dépassera probablement la cible de taille du cache du serveur jusqu’à ce que MSExchangeIS soit redémarré.

Exemples de calculs de cache de base de données

Voici des exemples de calculs de mise en cache de base de données basés sur la mémoire et la configuration de base de données d’un serveur de boîtes aux lettres.

Exemple 1

Configuration du serveur de boîtes aux lettres :

  • 48 Go de mémoire

  • Deux bases de données actives et deux bases de données passives

  • Paramètre MaximumActiveDatabases : non configuré

La quantité de cache de base de données est de 3 Go pour chaque processus de travail de copie de base de données actif et de 0,6 Go pour chaque processus de travail de copie de base de données passif. Voici comment ces valeurs sont calculées :

  • Cible de taille du cache du serveur : 25 % de la quantité de mémoire : 48 Go * 0,25 = 12 Go.

  • Cible maximale du cache de base de données : divisez la cible de taille du cache du serveur par le nombre total de bases de données actives et passives : 12 Go / 4 bases de données = 3 Go.

  • Mémoire utilisée pour les copies de base de données passives : 20 % de la cible maximale du cache de base de données : 3 Go * 0,20 = 0,6 Go.

Sur les 12 Go de mémoire affectés à la cible de taille du cache du serveur :

  • 7,2 Go seront utilisés par les processus worker de base de données.

  • 4,8 Go seront réservés par le magasin d’informations pour les deux copies de base de données passives au cas où elles devenaient des copies actives. Si cela se produit, ils utiliseront leur cible de cache maximale de 3 Go.

Exemple 2

Configuration du serveur de boîtes aux lettres :

  • 48 Go de mémoire

  • Deux bases de données actives et deux bases de données passives

  • Paramètre MaximumActiveDatabases : 2

La quantité de cache de base de données est de 5 Go pour chaque processus de travail de copie de base de données actif et de 0,2 Go pour chaque processus de travail de copie de base de données passif. Voici comment ces valeurs sont calculées :

  • Cible de taille du cache du serveur : 25 % de la quantité de mémoire : 48 Go * 0,25 = 12 Go.

  • Cible maximale du cache de base de données : divisez la cible de taille du cache du serveur par la somme des valeurs suivantes :

    • Nombre de bases de données actives

    • 20 % du nombre de bases de données passives

    12 Go / (2A + (2P * 0,20)) = 5 Go

  • Mémoire utilisée pour les copies de base de données passives : 20 % de la cible maximale du cache de la base de données : 5 Go * 0,20 = 1 Go.

Sur les 12 Go de mémoire affectés à la cible de taille du cache du serveur :

  • 12 Go seront utilisés par les processus worker de base de données

  • Aucune mémoire n’est réservée par le magasin d’informations pour les deux copies de base de données passives, car elles ne peuvent pas devenir des copies actives (MaximumActiveDatabases est configuré avec la valeur 2 et il y a déjà 2 copies de base de données actives sur le serveur).