Configurer une stratégie de basculement automatique flexible pour un groupe de disponibilité Always On

S’applique à : SQL Server - Windows uniquement

Cette rubrique explique comment configurer la stratégie de basculement flexible pour un groupe de disponibilité Always On à l’aide de Transact-SQL ou PowerShell dans SQL Server. Une stratégie de basculement flexible vous offre un contrôle granulaire sur les conditions qui entraînent le basculement automatique d’un groupe de disponibilité. En changeant les conditions d'échec qui déclenchent un basculement automatique et la fréquence des contrôles d'intégrité, vous pouvez augmenter ou diminuer la probabilité d'un basculement automatique pour assurer le contrat de niveau de service relatif à la haute disponibilité.

La stratégie de basculement flexible d'un groupe de disponibilité est définie par son niveau de condition et le seuil du délai d'attente de contrôle d'intégrité. Lorsque le dépassement du niveau de condition d'échec ou du seuil du délai d'attente de contrôle d'intégrité d'un groupe de disponibilité est détecté, la DLL de ressource du groupe de disponibilité répond au Clustering de basculement Windows Server (WSFC). Le cluster WSFC initialise un basculement automatique vers le réplica secondaire.

Notes

La stratégie de basculement flexible d'un groupe de disponibilité ne peut pas être configurée à l'aide de SQL Server Management Studio.

Limitations relatives aux basculements automatiques

  • Pour qu'un basculement automatique se produise, le réplica principal et un réplica secondaire doivent être configurés pour le mode de disponibilité avec validation synchrone et basculement automatique et le réplica secondaire doit être synchronisé avec le réplica principal.

  • SQL Server 2019 (15.x) augmente le nombre maximal de réplicas synchrones à 5, contre 3 dans SQL Server 2017 (14.x). Vous pouvez configurer ce groupe de cinq réplicas de manière à instaurer le basculement automatique en son sein. Il existe un seul réplica principal, plus quatre réplicas secondaires synchrones.

  • Si un groupe de disponibilité dépasse le seuil d'échec WSFC, le cluster WSFC ne tente pas un basculement automatique du groupe de disponibilité. En outre, le groupe de ressources WSFC du groupe de disponibilité reste à l'état d'échec jusqu'à ce que l'administrateur de cluster mette manuellement le groupe de ressources en ligne ou jusqu'à ce que l'administrateur de base de données exécute un basculement manuel du groupe de disponibilité. Le seuil d'échec WSFC est le nombre maximal d'échecs autorisés pour le groupe de disponibilité au cours d'une période donnée. La période par défaut est de six heures, et la valeur par défaut du nombre maximal d’échecs au cours de cette période est n-1, où n est le nombre de nœuds de WSFC. Pour modifier les valeurs de seuil/d'échec pour un groupe de disponibilité donné, utilisez la console du gestionnaire de basculement WSFC.

Prérequis

  • Vous devez être connecté à l'instance de serveur qui héberge le réplica principal.

Autorisations

Tâche Autorisations
Pour configurer la stratégie de basculement flexible pour un nouveau groupe de disponibilité Requiert l’appartenance au rôle serveur fixe sysadmin et l’autorisation de serveur CREATE AVAILABILITY GROUP, l’autorisation ALTER ANY AVAILABILITY GROUP ou l’autorisation CONTROL SERVER.
Pour modifier la stratégie d'un groupe de disponibilité existant Requiert l'autorisation ALTER AVAILABILITY GROUP sur le groupe de disponibilité, l'autorisation CONTROL AVAILABILITY GROUP, l'autorisation ALTER ANY AVAILABILITY GROUP ou l'autorisation CONTROL SERVER.

Seuil du délai d'attente de contrôle d'intégrité

La DLL de ressource WSFC du groupe de disponibilité exécute un contrôle d’intégrité du réplica principal en appelant la procédure stockée sp_server_diagnostics sur l’instance de SQL Server qui héberge le réplica principal. sp_server_diagnostics retourne les résultats à un intervalle égal à 1/3 du seuil du délai d’attente de vérification d’intégrité pour le groupe de disponibilité. Le seuil par défaut du délai d’attente de vérification d’intégrité est de 30 secondes, ce qui signifie que sp_server_diagnostics répond à un intervalle de 10 secondes. Si la procédure sp_server_diagnostics est lente ou ne renvoie aucune information, la DLL de ressource attend la fin de l’intervalle du seuil du délai d’attente de vérification d’intégrité avant de déterminer que le réplica principal ne répond pas. Si le réplica principal ne répond pas, un basculement automatique est initialisé, si actuellement pris en charge.

Important

sp_server_diagnostics n’exécute pas de vérifications d’intégrité au niveau de la base de données.

Niveau de condition d'échec

Le fait que les données de diagnostic et les informations d’intégrité renvoyées par sp_server_diagnostics justifient ou non un basculement automatique dépend du niveau de condition d’échec du groupe de disponibilité. Le niveau de condition d’échec spécifie les conditions d’échec qui déclenchent un basculement automatique. Il existe cinq niveaux de condition d'échec, allant du moins restrictif (niveau 1) au plus restrictif (le niveau 5). Chaque niveau comprend les niveaux moins restrictifs. Par conséquent, le niveau de condition le plus strict, le niveau 5, inclut les quatre conditions moins restrictives (1 à 4), et ainsi de suite.

Important

Les bases de données endommagées et suspectes ne sont détectées par aucun niveau de condition d'échec. Par conséquent, une base de données qui est endommagée ou suspecte (que ce soit en raison d'une défaillance matérielle, de l'altération des données ou de tout autre problème) ne déclenche jamais de basculement automatique.

Le tableau suivant décrit la condition d'échec qui correspond à chaque niveau.

Level Condition d'échec Valeur Transact-SQL Valeur PowerShell
Une Le serveur est arrêté. Spécifie qu’un basculement automatique est initialisé lorsque l’une des situations suivantes se produit :

Le service SQL Server est fermé.

Le bail du groupe de disponibilité pour la connexion au cluster WSFC expire car aucun accusé de réception n'est reçu de l'instance de serveur. Pour plus d’informations, consultez How It Works: SQL Server Always On Lease Timeout.



Il s'agit du niveau le moins restrictif.
1 OnServerDown
Deux Le serveur ne répond pas. Spécifie qu’un basculement automatique est initialisé lorsque l’une des situations suivantes se produit :

L'instance SQL Server ne se connecte pas au cluster et le seuil du délai d'attente de contrôle d'intégrité spécifié par l'utilisateur pour le groupe de disponibilité est dépassé.

Le réplica de disponibilité est dans un état d'échec.
2 OnServerUnresponsive
Trois Erreur critique du serveur. Spécifie qu’un basculement automatique est lancé sur des erreurs critiques du SQL Server internes, telles que des verrouillages tournants orphelins, des violations graves d’accès en écriture ou un trop grand nombre de vidages de mémoire générés dans un court laps de temps.

C'est le niveau par défaut.
3 OnCriticalServerError
Quatre Erreur de serveur modérée. Spécifie qu'un basculement automatique est initialisé en cas d'erreurs internes modérées SQL Server , telles qu'une condition persistante de mémoire insuffisante dans le pool de ressources interne SQL Server . 4 OnModerateServerError
Cinq Conditions d'échec qualifiées. Spécifie qu'un basculement automatique est initialisé pour toutes les conditions d'échec qualifiées, notamment :

Détection d’un interblocage de Scheduler.

Détection d'un blocage insoluble.



Il s'agit du niveau le plus restrictif.
5 OnAnyQualifiedFailureConditions

Notes

L'absence de réponse par une instance de SQL Server aux demandes des clients n'est pas pertinente pour les groupes de disponibilité.

Utilisation de Transact-SQL

Pour configurer la stratégie de basculement flexible

  1. Connectez-vous à l'instance de serveur qui héberge le réplica principal.

  2. Pour un nouveau groupe de disponibilité, utilisez l’instruction Transact-SQLCREATE AVAILABILITY GROUP. Si vous modifiez un groupe de disponibilité existant, utilisez l’instruction Transact-SQL ALTER AVAILABILITY GROUP.

    • Pour définir le niveau de condition de basculement, utilisez l’option FAILURE_CONDITION_LEVEL = n , où n est un entier compris entre 1 et 5.

      Par exemple, l'instruction Transact-SQL suivante modifie le niveau de condition d'échec d'un groupe de disponibilité existant, AG1, sur le niveau un :

      
      ALTER AVAILABILITY GROUP AG1 SET (FAILURE_CONDITION_LEVEL = 1);  
      

      La relation de ces valeurs entières avec les niveaux de condition d'échec est la suivante :

      Valeur Transact-SQL Level Le basculement automatique démarre lorsque…
      1 Une Le serveur est arrêté. Le service SQL Server s'arrête à cause d'un basculement ou d'un redémarrage.
      2 Deux Le serveur ne répond pas. Toutes les conditions qui correspondent à une valeur inférieure sont remplies, le service SQL Server est connecté au cluster et le seuil du délai d'attente de contrôle d'intégrité est dépassé, ou le réplica principal actuel est dans un état d'échec.
      3 Trois Erreur critique du serveur. Toutes les conditions qui correspondent à une valeur inférieure sont remplies ou une erreur interne et critique de serveur est survenue.

      C'est le niveau par défaut.
      4 Quatre Erreur de serveur modérée. Toutes les conditions qui correspondent à une valeur inférieure sont remplies ou une erreur modérée de serveur s'est produite.
      5 Cinq Conditions d'échec qualifiées. Toutes les conditions qui correspondent à une valeur inférieure sont remplies ou une condition d'échec qualifiée s'est produite.

      Pour plus d’informations sur les niveaux de condition de basculement, consultez Stratégie flexible pour le basculement automatique d’un groupe de disponibilité (SQL Server).

    • Pour configurer le seuil du délai d’attente de contrôle d’intégrité, utilisez l’optionHEALTH_CHECK_TIMEOUT = n , où n est un entier compris entre 15000 millisecondes (15 secondes) et 4294967295 millisecondes. La valeur par défaut est 30 000 millisecondes (ou 30 secondes).

      Par exemple, l'instruction Transact-SQL suivante modifie le seuil du délai d'attente de contrôle d'intégrité d'un groupe de disponibilité existant, AG1, sur 60 000 millisecondes (une minute).

      
      ALTER AVAILABILITY GROUP AG1 SET (HEALTH_CHECK_TIMEOUT = 60000);  
      

Utilisation de PowerShell

Pour configurer la stratégie de basculement flexible

  1. Définissez la valeur par défaut (cd) sur l’instance de serveur qui héberge le réplica principal.

  2. Quand vous ajoutez un réplica de disponibilité à un groupe de disponibilité, utilisez l’applet de commande New-SqlAvailabilityGroup . Quand vous modifiez un réplica de disponibilité existant, utilisez l’applet de commande Set-SqlAvailabilityGroup .

    • Pour définir le niveau de condition de basculement, utilisez le paramètre FailureConditionLevelniveau , où niveau a l’une des valeurs suivantes :

      Valeur Level Le basculement automatique démarre lorsque…
      OnServerDown Une Le serveur est arrêté. Le service SQL Server s'arrête à cause d'un basculement ou d'un redémarrage.
      OnServerUnresponsive Deux Le serveur ne répond pas. Toutes les conditions qui correspondent à une valeur inférieure sont remplies, le service SQL Server est connecté au cluster et le seuil du délai d'attente de contrôle d'intégrité est dépassé, ou le réplica principal actuel est dans un état d'échec.
      OnCriticalServerError Trois Erreur critique du serveur. Toutes les conditions qui correspondent à une valeur inférieure sont remplies ou une erreur interne et critique de serveur est survenue.

      C'est le niveau par défaut.
      OnModerateServerError Quatre Erreur de serveur modérée. Toutes les conditions qui correspondent à une valeur inférieure sont remplies ou une erreur modérée de serveur s'est produite.
      OnAnyQualifiedFailureConditions Cinq Conditions d'échec qualifiées. Toutes les conditions qui correspondent à une valeur inférieure sont remplies ou une condition d'échec qualifiée s'est produite.

      Pour plus d’informations sur les niveaux de condition de basculement, consultez Stratégie flexible pour le basculement automatique d’un groupe de disponibilité (SQL Server).

      Par exemple, la commande suivante modifie le niveau de condition d'échec d'un groupe de disponibilité existant, AG1, sur le niveau un.

      Set-SqlAvailabilityGroup `   
      -Path SQLSERVER:\Sql\PrimaryServer\InstanceName\AvailabilityGroups\MyAg `   
      -FailureConditionLevel OnServerDown  
      
    • Pour définir le seuil du délai d’attente de vérification d’intégrité, utilisez le paramètre HealthCheckTimeoutn , où n est un entier compris entre 15000 millisecondes (15 secondes) et 4294967295 millisecondes. La valeur par défaut est 30 000 millisecondes (ou 30 secondes).

      Par exemple, la commande suivante modifie le seuil du délai d'attente de contrôle d'intégrité d'un groupe de disponibilité existant, AG1, sur 120 000 millisecondes (deux minutes).

      Set-SqlAvailabilityGroup `   
      -Path SQLSERVER:\Sql\PrimaryServer\InstanceName\AvailabilityGroups\MyAG `   
      -HealthCheckTimeout 120000  
      

Notes

Pour voir la syntaxe d’une applet de commande, utilisez l’applet de commande Get-Help dans l’environnement SQL Server PowerShell. Pour en savoir plus, voir Get Help SQL Server PowerShell.

Pour configurer et utiliser le fournisseur SQL Server PowerShell

Tâches associées

Pour configurer un basculement automatique

Contenu associé

Voir aussi

Vue d’ensemble des groupes de disponibilité Always On (SQL Server)
Modes de disponibilité (Groupes de disponibilité Always On)
Basculement et modes de basculement (groupes de disponibilité Always On)
Clustering de basculement Windows Server (WSFC) avec SQL Server
Failover Policy for Failover Cluster Instances
sp_server_diagnostics (Transact-SQL)