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 es DISCONNECTED
. Este problema puede deberse a uno de los siguientes motivos:
- El puerto de conexión puede estar en conflicto con otra aplicación.
- El tipo de cifrado o el algoritmo no coinciden.
- El punto de conexión se eliminó o no se inició.
- 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
Ejecuta 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 devuelve el número de puerto que debes 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
Ejecuta este comando en ambos servidores y compara el cifrado y asegúrate 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"
El punto de conexión se eliminó o no se inició
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"
Ejecuta el comando siguiente si sospechas 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.
Problemas de red o conectividad o los puertos están bloqueados en el firewall
Usa los siguientes comandos para probar la conectividad en ambas direcciones de Node1
a Node2
y Node2
a Node1
:
$computer = "remote_node" # replace with node name in your environment
$port = "5022" # replace with the port from your database_mirroring_endpoints
Test-NetConnection -ComputerName $computer -Port $port
La cuenta no es un usuario de dominio y no puede conectarse al controlador de dominio y al nodo remoto
Para probar si la cuenta de servicio puede conectarse al nodo remoto, siga estos pasos. En los pasos se supone que no has iniciado sesión con la cuenta de servicio.
Seleccione Inicio>Windows PowerShell> haga clic con el botón derecho en el icono.
Seleccione Más>ejecución como usuario>diferente Use una cuenta diferente.
Escriba el nombre y la contraseña de la cuenta de servicio.
Después de que se abra Windows PowerShell, escribe el siguiente comando para comprobar que has iniciado sesión con la cuenta de servicio:
whoami
A continuación, puede probar la conexión al nodo remoto, como en el siguiente ejemplo.
$computer = "remote_node" # replace with node name in your environment $port = "5022" # replace with the port from your database_mirroring_endpoints Test-NetConnection -ComputerName $computer -Port $port