La conmutación por error automática del grupo de disponibilidad AlwaysOn no funciona

10

Jugando con la configuración AG Tengo el WSFC activado y configurado con dos nodos en un grupo de disponibilidad llamado DevClusterOnline. Ambos nodos (DEV-AWEB5 primario, DEV-AWEB6 secundario) están ejecutando Windows Server 2008 R2.

Si verifico el estado de mi AG, obtengo esto:

Descripción del estado del grupo de disponibilidad

La ejecución de la consulta a continuación devolverá este conjunto de resultados: Confirmación sincrónica y configuración automática de conmutación por error

select
    ar.replica_server_name,
    availability_group_name = ag.name,
    ar.availability_mode_desc,
    ar.failover_mode_desc
from sys.availability_replicas ar
inner join sys.availability_groups ag
on ar.group_id = ag.group_id
order by availability_group_name, replica_server_name;

Si desconecto DEV-AWEB5, no puedo conectarme al Group Listener (DevListener), pero puedo hacer ping y responderá a mi ping. La réplica - DEV-AWEB6 entra en un estado RESOLVIENDO y mi base de datos no es accesible. Sin embargo, puedo ir manualmente a Management Studio y configurar la conmutación por error en DEV-AWEB6 y luego volver a estar en funcionamiento y DevListener aceptará nuevamente las conexiones.

Teniendo en cuenta que estos hechos confirman que la conmutación por error realmente funciona, que tengo confirmaciones sincronizadas y una conmutación por error automática configurada, no tengo idea de qué sucede si funciona mal en mi configuración.

Cuando desconecto DEV-AWEB5, espero que mi réplica conserve la conexión y, por lo tanto, también DevListener. Espero que la conmutación por error automática me permita conectarme al AG Listener de forma transparente. Desde la perspectiva del usuario final, al usar un sistema web no debería notarse que uno de los servidores de base de datos deja de funcionar.

Estoy atrapado aquí, ¿alguien puede aclararme lo que estoy haciendo mal?

Marcus
fuente
1
¿Cómo se ve su modelo de quórum? ¿Es una simple mayoría de nodos? Si es así, ese podría ser tu problema. Desde technet.microsoft.com/en-us/library/cc731739.aspx , ese modelo de quórum solo puede soportar una pérdida de (la mitad de los nodos en el clúster) -1. Por lo tanto, si tiene un clúster de dos nodos con quórum mayoritario de nodos, puede sufrir fallas de 0 nodos.
Ben Thul
2
@BenThul Si el clúster perdió el quórum, entonces el OP no podría realizar la conmutación por error manualmente.
Thomas Stringer

Respuestas:

6

Si desconecto DEV-AWEB5

Defina "desconectar", si lo desea. Supongo que mantuviste el cuadro en alto, pero eliminaste SQL Server.

No puedo conectarme al Group Listener (DevListener), pero puedo hacer ping y responderá a mi ping

Esto se debe a que el oyente es solo un nombre de red virtual (VNN) dentro del grupo de recursos del clúster WSFC para el grupo de disponibilidad representado. Su nodo DEV_AWEB5 aún posee el grupo de recursos del clúster, pero es más probable que el recurso de clúster AG esté en un estado fallido. El VNN aún debe estar en línea (comportamiento esperado). Simplemente apunta a cualquier nodo que posea ese grupo de recursos (en este caso, DEV-AWEB5). De hecho, si tenía habilitado el control remoto de PowerShell y ejecutó lo siguiente:

Invoke-Command -ComputerName "YourListenerName" -ScriptBlock { $env:computername }

Del mismo modo, si puede RDP en DEV-AWEB5 (siempre que tenga la capacidad y accesibilidad, etc.), entonces podrá RDP utilizando el nombre del oyente ( mstsc /v:YourListenerName). Es solo un VNN.

El retorno de eso sería el nombre de la computadora de su nodo propietario.

Según todos sus síntomas, estaría dispuesto a apostar que ha alcanzado su umbral de conmutación por error. El umbral de conmutación por error determina cuántas veces el clúster intentará conmutar por error su grupo de recursos en un período de tiempo específico. El valor predeterminado de estos valores de failovers máximos n - 1 (donde n es el recuento de nodos) en un período de 6 horas . Puede ver eso a través del siguiente comando WSFC PowerShell:

Get-ClusterGroup -Name "YourAgName" |
    Select-Object Name, FailoverThreshold, FailoverPeriod

Eso solo te da la configuración (que puedes modificar si así lo eliges, por supuesto).

La mejor manera de demostrar que este es el caso para usted, necesitaría generar el registro del clúster (los registros de eventos del sistema solo entran en detalles hasta que "ha fallado", o algo así).

Get-ClusterLog -Node "YourClusterNode" -TimeSpan <amount_of_minutes_since_failure>

Por defecto, se colocará en la carpeta "C: \ Windows \ Cluster \ Reports", y el archivo se llama "Cluster.log".

Si abriera ese registro de clúster, debería poder encontrar la siguiente cadena allí, indicando exactamente qué sucedió y por qué sucedió:

No se produce un error en el grupo [YourClusterGroupName] , failoverCount [# of failovers] , umbral de failover [valor de umbral de failover] , nodeAvailCount [número de nodos disponibles ].

El mensaje anterior es simplemente WSFC diciéndole que no hará una conmutación por error a su grupo porque ha sucedido demasiado (alcanzó el umbral).

¿Por qué pasó esto? Simplemente para evitar el efecto Ping-Pong de los recursos del clúster yendo y viniendo con demasiada frecuencia entre nodos.

Mientras que esto sería común para alcanzar estos umbrales en las pruebas de conmutación por error, en la producción generalmente señalaría un problema que debería investigarse.

Thomas Stringer
fuente
2
Gracias por su ayuda, seguí sus instrucciones pero finalmente descubrí que este no era el problema. La razón por la que no pude hacer que el AG realice una conmutación por error automática fue porque no había configurado las dependencias de WSFC correctamente. Como resultado, necesitaba agregar MSSQL como un recurso de clúster (Servicio genérico) y agregarlo como una dependencia en el Administrador de clústeres de conmutación por error junto con el agente de escucha AG. Además, es necesario marcar la casilla de verificación "Si el reinicio no se realiza correctamente, conmutar por error todos los recursos en este servicio o aplicación". Estoy seguro de que tenía la impresión de que ya había hecho esto.
Marcus
1

Agregar MSSQL como un recurso de servicio genérico no es la respuesta.

Eso solo pondrá al Administrador de clústeres a cargo del Servicio de SQL Server, OK, sí, se conmutará por error automáticamente, pero notará en el Administrador de configuración de SQL Server que sus servicios ahora están configurados en "Manual", lo que indica que el Administrador de clústeres está ahora en control de su servicio de servidor SQL.

Está poniendo a Cluster Manager a cargo de una aplicación NO agrupada.

Terminará en lágrimas.

El enfoque correcto es configurar correctamente los Grupos de disponibilidad de SQL Server según la documentación de MS.

Y también asegúrese de no exceder los parámetros de conmutación por error tal como se definen en el Administrador de clústeres> Roles> pestaña de conmutación por error.

Si excede estos límites, el clúster no fallará sus recursos y se publicará un error en el registro de eventos de la aplicación.

Keiran Grogan
fuente