Le réplica de disponibilité est déconnecté dans un groupe de disponibilité Always On

S’applique à :SQL Server

Introduction

  • Nom de la stratégie : État de connexion du réplica de disponibilité
  • Problème : Le réplica de disponibilité est déconnecté.
  • Catégorie : Critique
  • Facette : Réplica de disponibilité

Description

Cette stratégie vérifie l'état de la connexion entre les réplicas de disponibilité. La stratégie se trouve dans un état non sain lorsque l'état de la connexion du réplica de disponibilité est DISCONNECTED. Autrement, l'état de la stratégie est sain.

Causes possibles

Le réplica secondaire n’est pas connecté au réplica principal. L'état de la connexion est DISCONNECTED. Ce problème peut avoir les causes suivantes :

  • Le port de connexion est peut-être en conflit avec une autre application.

  • Le type ou l'algorithme de chiffrement est incompatible.

  • Le point de terminaison de connexion a été supprimé ou n’a pas été démarré.

  • Il existe des problèmes de connectivité/réseau ou de ports bloqués sur le pare-feu.

  • Le compte de service ou de démarrage n’est pas un utilisateur de domaine et n’est pas en mesure de se connecter au contrôleur de domaine, ni au nœud et au port distants (par exemple, 5022)

Solutions possibles

Vérifiez la configuration du point de terminaison de mise en miroir de bases de données pour les instances du réplica principal et secondaire et mettez à jour la configuration incompatible. Regardez également si le port crée un conflit et, le cas échéant, modifiez le numéro du port.

Voici les solutions possibles à ce problème :

  • Le port de connexion est peut-être en conflit avec une autre application.

    Exécutez les commandes suivantes pour diagnostiquer le problème de port :

    $server_name = "server_instance"  #replace with your SQL Server instance
    Sqlcmd -S $server_name -E -Q "SELECT type_desc, port FROM sys.tcp_endpoints WHERE type_desc = 'DATABASE_MIRRORING'; "
    

    La commande ci-dessus retourne le numéro de port que vous devez utiliser dans la commande ci-dessous.

    $port = "5022"
    Get-NetTCPConnection -LocalPort $port
    Get-Process -Id (Get-NetTCPConnection -LocalPort $port).OwningProcess |Select-Object Name, ProductVersion, Path, Id
    
  • Le type ou l'algorithme de chiffrement est incompatible.

    Exécutez-la sur les deux serveurs et comparez le chiffrement pour vérifier que les deux sont identiques :

    $server_name = "server_instance"  #replace with your SQL Server instance
    sqlcmd -S $server_name -E -Q "SELECT name, state_desc, encryption_algorithm_desc, protocol_desc, type_desc  FROM sys.database_mirroring_endpoints"
    
  • Le point de terminaison de connexion a été supprimé ou n’a pas été démarré.

    Exécutez la commande suivante si le point de terminaison de mise en miroir se ferme puis est démarré.

    $server_name = "server_instance" #replace with your SQL Server instance
    Sqlcmd -S $server_name -E -Q "SELECT name, state_desc, encryption_algorithm_desc, protocol_desc, type_desc  FROM sys.database_mirroring_endpoints"
    

    Exécutez la commande ci-dessous si vous pensez que le point de terminaison ne répond pas aux connexions ou n’est pas en cours d’exécution.

    $server_name = "server_instance" #use your SQL Server instance here
    $server_name = "hadr_endpoint" #replace with your endpoint name
    Sqlcmd -S $server_name -E -Q "ALTER ENDPOINT hadr_endpoint STATE = stopped"
    Sqlcmd -S $server_name -E -Q "ALTER ENDPOINT hadr_endpoint STATE = started"
    

    Avertissement

    L’exécution de la commande avec STATE = stopped arrête votre point de terminaison et interrompt temporairement le flux de trafic AlwaysOn.

  • Il existe des problèmes de connectivité/réseau ou de ports bloqués sur le pare-feu

    Utilisez les commandes suivantes pour tester la connectivité dans les deux sens, de Node1 vers Node2, et de Node2 vers Node1 :

    $computer = $env:computername
    $port = "5022"                 # replace with the port from your database_mirroring_endpoints.
    Test-NetConnection -ComputerName $computer -Port $port 
    
  • Le compte de service ou de démarrage n’est pas un utilisateur de domaine et n’est pas en mesure de se connecter au contrôleur de domaine, ni au nœud et au port distants (par exemple, 5022)

    Pour tester si le compte de service peut se connecter au nœud distant, effectuez les étapes suivantes. Ces étapes supposent que vous n’êtes pas connecté avec le compte de service :

    1. Sélectionnez Démarrer>Windows PowerShell> en cliquant avec le bouton droit sur l’icône.

    2. Sélectionnez Plus>Exécuter en tant qu’autre utilisateur>Utiliser un autre compte.

    3. Tapez le nom et le mot de passe du compte de service.

    4. Une fois que Windows PowerShell s’ouvre, tapez la commande suivante pour vérifier que vous vous êtes connecté avec le compte de service :

      whoami
      
    5. Vous pouvez ensuite tester la connexion au nœud distant. Par exemple :

      $computer = "remote_node" # Replace with Naode name as per your environment.
      $port = "5022"            # Replace with the port from your database_mirroring_endpoints.        
      Test-NetConnection -ComputerName $computer -Port 5022
      

Voir aussi