La réplica de disponibilidad está desconectada en un grupo de disponibilidad Always On

Se aplica a:SQL Server

Introducción

  • Nombre de la directiva: estado de conexión de la réplica de disponibilidad.
  • Incidencia: la réplica de disponibilidad está desconectada.
  • Categoría: crítica.
  • Faceta: réplica de disponibilidad.

Descripción

Esta directiva comprueba el estado de conexión entre las réplicas de disponibilidad. La directiva está en mal estado cuando el estado de conexión de la réplica de disponibilidad es DISCONNECTED. De lo contrario, la directiva está en un estado correcto.

Causas posibles

La réplica secundaria no está conectada a la réplica principal. El estado de conexión es DISCONNECTED. Este problema puede deberse a lo siguiente:

  • El puerto de conexión puede estar en conflicto con otra aplicación.

  • El tipo de cifrado o el algoritmo no coinciden.

  • Se ha eliminado o no se ha iniciado el extremo de la conexión.

  • Hay problemas de red o conectividad o los puertos están bloqueados en el firewall.

  • La cuenta de servicio o inicio no es un usuario de dominio y no puede conectarse al controlador de dominio y al nodo remoto y al puerto (por ejemplo, 5022)

Soluciones posibles

Compruebe la configuración del extremo de creación de reflejo de la base de datos para las instancias de la réplica principal y secundaria, y actualice la configuración que no coincide. Compruebe si el puerto está en conflicto y, si en ese caso, cambie el número de puerto.

Las siguientes son posibles soluciones para este problema:

  • El puerto de conexión puede estar en conflicto con otra aplicación.

    Ejecute los siguientes comandos para diagnosticar el problema del puerto:

    $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'; "
    

    El comando anterior devolverá el número de puerto que debe usar en el comando siguiente.

    $port = "5022"
    Get-NetTCPConnection -LocalPort $port
    Get-Process -Id (Get-NetTCPConnection -LocalPort $port).OwningProcess |Select-Object Name, ProductVersion, Path, Id
    
  • El tipo de cifrado o el algoritmo no coinciden.

    Ejecute esto en ambos servidores y compare el cifrado y asegúrese de que ambos son iguales:

    $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"
    
  • Se ha eliminado o no se ha iniciado el extremo de la conexión.

    Ejecute el siguiente comando si el punto de conexión de creación de reflejo sale y se inicia.

    $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"
    

    Ejecute el comando siguiente si sospecha que el punto de conexión no responde a las conexiones o no se está ejecutando.

    $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"
    

    Advertencia

    Al ejecutar el comando conSTATE = stopped, se detendrá el punto de conexión y se interrumpirá temporalmente Always On flujo de tráfico.

  • Hay problemas de red o conectividad o los puertos están bloqueados en el firewall

    Use los siguientes comandos para probar la conectividad en ambas direcciones de Node1 a Node2 y Node2 a Node1:

    $computer = $env:computername
    $port = "5022"                 # replace with the port from your database_mirroring_endpoints.
    Test-NetConnection -ComputerName $computer -Port $port 
    
  • La cuenta de servicio o inicio no es un usuario de dominio y no puede conectarse al controlador de dominio y al nodo remoto y al puerto (por ejemplo, 5022)

    Para probar si la cuenta de servicio puede conectarse al nodo remoto, siga estos pasos. En los pasos se supone que no ha iniciado sesión con la cuenta de servicio:

    1. Seleccione Inicio>Windows PowerShell> haga clic con el botón derecho en el icono.

    2. Seleccione Más>ejecución como usuario>diferente Use una cuenta diferente.

    3. Escriba el nombre y la contraseña de la cuenta de servicio.

    4. Después de que se abra Windows PowerShell, escriba el siguiente comando para comprobar que ha iniciado sesión con la cuenta de servicio:

      whoami
      
    5. A continuación, puede probar la conexión al nodo remoto. Por ejemplo:

      $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
      

Vea también