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

S’applique à :SQL Server sur Windows

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 permet un contrôle précis des conditions qui déclenchent le basculement automatique d’un groupe de disponibilité. En modifiant les conditions de défaillance qui déclenchent un basculement automatique ainsi que la fréquence des vérifications d’intégrité, vous pouvez augmenter ou diminuer la probabilité d’un basculement automatique afin de respecter votre SLA en matière de haute disponibilité.

La stratégie de basculement flexible d'un groupe de disponibilité est définie par son niveau de condition de défaillance et son seuil d'expiration du contrôle d'intégrité. Lorsqu’elle détecte qu’un groupe de disponibilité a dépassé son niveau de condition d’échec ou son seuil d’expiration de la vérification d’intégrité, la DLL de ressource du groupe de disponibilité répond au cluster de basculement Windows Server (WSFC). Le cluster WSFC initie ensuite un basculement automatique vers la réplique secondaire.

Remarque

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 actuel et un réplica secondaire doivent être configurés en 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 pour activer le basculement automatique au sein du groupe. Il y a un 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 en état d'échec jusqu'à ce que l’administrateur du cluster remette manuellement en ligne le groupe de ressources défaillant ou que l’administrateur de base de données effectue 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 de défaillance d’un groupe de disponibilité donné, utilisez la console du Gestionnaire du 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é Nécessite l’appartenance au rôle de serveur fixe sysadmin et soit l’autorisation de serveur CREATE AVAILABILITY GROUP, soit l’autorisation ALTER ANY AVAILABILITY GROUP, ou l’autorisation CONTROL SERVER.
Pour modifier la stratégie d'un groupe de disponibilité existant Nécessite 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’expiration de la vérification de l’état

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 renvoie des résultats à un intervalle correspondant à 1/3 du seuil du délai d’expiration du contrôle 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 sp_server_diagnostics est lent ou ne renvoie pas d’informations, la DLL de ressources attendra l’intégralité du délai défini par le seuil d’expiration du contrôle d’intégrité avant de déterminer que la réplique principale ne répond pas. Si la réplique principale ne répond pas, un basculement automatique est déclenché, si cette fonctionnalité est actuellement prise 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 de défaillance

Le fait que les données de diagnostic et les informations sur l’état de santé renvoyées par sp_server_diagnostics justifient ou non un basculement automatique dépend du niveau de condition de défaillance du groupe de disponibilité. Le niveau de défaillance définit quelles conditions d’échec 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. Ainsi, le niveau le plus strict, le niveau 5, inclut les quatre conditions moins restrictives, 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.

Niveau Condition de défaillance Valeur Transact-SQL Valeur PowerShell
Une En cas de panne du serveur. Indique qu’un basculement automatique est déclenché lorsque l’un des événements suivants se produit :

Le service SQL Server est fermé.

Le bail du groupe de disponibilité utilisé pour se connecter au cluster WSFC arrive à expiration parce qu'aucun accusé de réception (ACK) n'est reçu de l'instance du 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 déclenché 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é.

La réplique de disponibilité est en échec.
2 OnServerUnresponsive
Trois Erreur critique du serveur. Spécifie qu’un basculement automatique est déclenché en cas d’erreurs internes critiques de SQL Server, telles que des spinlocks orphelins, de graves violations d’accès en écriture ou un nombre trop élevé de vidages mémoire générés sur une courte période.

C'est le niveau par défaut.
3 OnCriticalServerError
Quatre Erreur de serveur modérée. Spécifie qu'un basculement automatique est déclenché en cas d'erreurs internes modérées de SQL Server, telles qu'une situation persistante de mémoire insuffisante dans le pool de ressources interne de SQL Server. 4 OnModerateServerError
Cinq Dans toutes les conditions d’échec admissibles. Spécifie qu'un basculement automatique est déclenché en cas de défaillance répondant aux critères requis, notamment :

Détection d’un interblocage de Scheduler.

Détection d'un blocage insoluble.



Il s'agit du niveau le plus restrictif.
5 SurTouteConditionD'ÉchecQualifiée

Remarque

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 CREATE AVAILABILITY GROUPTransact-SQL. Si vous modifiez un groupe de disponibilité existant, utilisez l’instruction ALTER AVAILABILITY GROUPTransact-SQL.

    • 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 Niveau Le basculement automatique démarre lorsque…
      1 Une En cas de panne du serveur. 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 En cas d'erreur modérée du serveur. Toutes les conditions qui correspondent à une valeur inférieure sont remplies ou une erreur modérée de serveur s'est produite.
      5 Cinq En cas de condition d’échec admissible. Toute condition de valeur inférieure est remplie ou une condition d’échec admissible se produit.

      Pour plus d’informations sur les niveaux des conditions de basculement, consultez Stratégie de basculement 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. Lorsque vous ajoutez un réplica de disponibilité à un groupe de disponibilité, utilisez l’applet de commande New-SqlAvailabilityGroup. Lors de la modification d’un réplica de disponibilité existant, utilisez l’applet de commande Set-SqlAvailabilityGroup.

    • Pour définir le niveau de la condition de basculement, utilisez le paramètre FailureConditionLevellevel, où level correspond à l’une des valeurs suivantes :

      Valeur Niveau Le basculement automatique démarre lorsque…
      OnServerDown Une En cas de panne du serveur. 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.
      SurTouteConditionD'ÉchecQualifiée Cinq Dans toutes les conditions d’échec admissibles. Toute condition de valeur inférieure est remplie ou une condition d’échec admissible se produit.

      Pour plus d’informations sur les niveaux des conditions de basculement, consultez Stratégie de basculement 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  
      

Remarque

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)
Cluster de basculement Windows Server (WSFC) avec SQL Server
Stratégie de basculement pour les instances de cluster de basculement
sp_server_diagnostics (Transact-SQL)