Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:SQL Server
En este tema se describe cómo realizar una conmutación por error manual sin pérdida de datos (una conmutación por error manual planeada) en un grupo de disponibilidad AlwaysOn mediante SQL Server Management Studio, Transact-SQL o PowerShell en SQL Server. Un grupo de disponibilidad realiza la conmutación por error en el nivel de una réplica de disponibilidad. Una conmutación por error manual programada, como cualquier conmutación por error de un grupo de disponibilidad Always On, convierte una réplica secundaria al rol principal. Al mismo tiempo, la conmutación por error convierte la réplica principal anterior en la réplica secundaria.
Una conmutación por error manual planificada solo se admite cuando la réplica principal y la réplica secundaria de destino se ejecutan en modo de confirmación sincrónica y están actualmente sincronizadas. Una conmutación por error manual planeada conserva todos los datos de las bases de datos secundarias que se unen al grupo de disponibilidad en la réplica secundaria de destino. Después de que la réplica principal antigua realiza la transición al rol secundario, sus bases de datos se convierten en bases de datos secundarias. A continuación, pueden empezar a sincronizarse con las bases de datos principales. Después de que todas realicen la transición al estado SYNCHRONIZED, la nueva réplica secundaria es apta para actuar como destino de una conmutación por error manual planeada futura.
Nota
Si las replicas principal y secundaria están ambas configuradas para el modo de conmutación automática por error, una vez que la réplica secundaria se sincroniza, también puede servir como destino de una conmutación automática por error. Para más información, consulte Modos de disponibilidad (grupos de disponibilidad AlwaysOn).
Antes de empezar
Importante
Hay procedimientos específicos para realizar la conmutación por error de un grupo de disponibilidad de escalado de lectura sin un administrador de clúster. Cuando un grupo de disponibilidad tiene CLUSTER_TYPE = NONE, siga los procedimientos que se describen en Conmutación por error de la réplica principal en un grupo de disponibilidad de escalado de lectura.
Limitaciones y restricciones
Un comando de conmutación por error realiza la devolución en cuanto la réplica secundaria de destino haya aceptado el comando. Sin embargo, la recuperación de la base de datos se produce de forma asincrónica después de que el grupo de disponibilidad haya completado la conmutación por error.
Puede que la coherencia entre las distintas bases de datos del grupo de disponibilidad no se mantenga en la conmutación por error.
Nota
La compatibilidad con transacciones distribuidas y entre bases de datos varía según la versión de SQL Server y del sistema operativo. Para más información, consulte Transacciones entre bases de datos y transacciones distribuidas para grupos de disponibilidad Always On y la creación de reflejo de bases de datos (SQL Server).
Requisitos previos y restricciones
La réplica secundaria de destino y la réplica principal deben ejecutarse en modo de disponibilidad de confirmación sincrónica.
Actualmente, la réplica secundaria de destino debe estar sincronizada con la réplica principal. Todas las bases de datos secundarias de esta réplica secundaria deben estar unidas al grupo de disponibilidad. También deben estar sincronizadas con sus bases de datos principales correspondientes (es decir, las bases de datos secundarias locales deben estar SINCRONIZADAS).
Sugerencia
Para determinar la preparación para la conmutación por error de una réplica secundaria, consulte la columna is_failover_ready en la vista de administración dinámica sys.dm_hadr_database_replica_cluster_states. O bien puede consultar la columna Preparación de la conmutación por error del panel del grupo Always On.
Esta tarea solo se admite en la réplica secundaria de destino. Debe estar conectado a la instancia del servidor que hospeda la réplica secundaria de destino.
Seguridad
Permisos
Se requiere el permiso ALTER AVAILABILITY GROUP en el grupo de disponibilidad. También se requiere el permiso CONTROL AVAILABILITY GROUP , el permiso ALTER ANY AVAILABILITY GROUP o el permiso CONTROL SERVER.
Uso de SQL Server Management Studio
Para realizar la conmutación por error manual de un grupo de disponibilidad:
En el Explorador de objetos, conéctese a una instancia de servidor que albergue una réplica secundaria del grupo de disponibilidad sobre el que debe realizarse la conmutación por error. Expanda el árbol de servidores.
Expanda los nodos Alta disponibilidad de AlwaysOn y Grupos de disponibilidad .
Haga clic con el botón derecho en el grupo de disponibilidad que se va a conmutar por error y seleccione el comando Conmutación por error.
Se inicia el asistente para la conmutación por error de grupos de disponibilidad. Para más información, consulte Usar el Asistente para el grupo de disponibilidad de conmutación por error (SQL Server Management Studio).
Uso de Transact-SQL
Para realizar una conmutación por error manual de un grupo de disponibilidad:
Conéctese a la instancia del servidor que hospeda la réplica secundaria de destino.
Use la ALTER AVAILABILITY GROUP sentencia, como se indica a continuación:
ALTER AVAILABILITY GROUP group_name CONMUTACIÓN POR ERROR
En la instrucción, group_name es el nombre del grupo de disponibilidad.
En el ejemplo siguiente se realiza una conmutación por error manual del grupo de disponibilidad MyAg a la réplica secundaria conectada:
ALTER AVAILABILITY GROUP MyAg FAILOVER;
Uso de PowerShell
Para realizar una conmutación por error manual de un grupo de disponibilidad:
Cambie el directorio (cd) a la instancia del servidor que hospeda la réplica secundaria de destino.
Use el cmdlet Switch-SqlAvailabilityGroup .
Nota
Para ver la sintaxis de un cmdlet, use el cmdlet Get-Help en el entorno de SQL Server PowerShell. Para más información, consulte Obtener ayuda de SQL Server PowerShell.
En el ejemplo siguiente, se realiza manualmente una conmutación por error del grupo de disponibilidad MyAg a la réplica secundaria que tiene la ruta de acceso especificada:
Switch-SqlAvailabilityGroup -Path SQLSERVER:\Sql\SecondaryServer\InstanceName\AvailabilityGroups\MyAgPara configurar y usar el proveedor de SQL Server PowerShell:
Seguimiento: después de conmutar por error manualmente un grupo de disponibilidad
Si la conmutación por error se realizó fuera del conjunto de conmutación automática por error del grupo de disponibilidad, ajuste los votos de cuórum de los nodos del clúster de conmutación por error de Windows Server para que reflejen la nueva configuración del grupo de disponibilidad. Para más información, consulte Clústeres de conmutación por error de Windows Server (WSFC) con SQL Server.
Conmutar por error la réplica principal en un grupo de disponibilidad para escalado de lectura
Cada grupo de disponibilidad tiene solo una réplica principal. La réplica principal permite lecturas y escrituras. Para cambiar la réplica principal, puede efectuar una conmutación por error. En un grupo de disponibilidad típico, el administrador del clúster automatiza el proceso de conmutación por error. En un grupo de disponibilidad con el tipo de clúster NONE, el proceso de conmutación por error es manual.
Hay dos maneras de realizar la conmutación por error de la réplica principal en un grupo de disponibilidad con tipo de clúster NONE:
- Conmutación por error manual sin pérdida de datos
- Conmutación por error manual forzada con pérdida de datos
Conmutación por error manual sin pérdida de datos
Use este método si la réplica principal está disponible, pero necesita modificar temporal o permanentemente la instancia que hospeda dicha réplica principal. Para evitar una posible pérdida de datos, antes de iniciar la conmutación por error manual, asegúrese de que la réplica secundaria de destino esté actualizada.
Para realizar la conmutación por error manual sin pérdida de datos:
Establezca la réplica principal actual y la réplica secundaria de destino en
SYNCHRONOUS_COMMIT.ALTER AVAILABILITY GROUP [AGRScale] MODIFY REPLICA ON N'<node2>' WITH (AVAILABILITY_MODE = SYNCHRONOUS_COMMIT);Ejecute la consulta siguiente para identificar que las transacciones activas se confirman en la réplica principal y en al menos una réplica secundaria sincrónica:
SELECT ag.name, drs.database_id, drs.group_id, drs.replica_id, drs.synchronization_state_desc, ag.sequence_number FROM sys.dm_hadr_database_replica_states drs, sys.availability_groups ag WHERE drs.group_id = ag.group_id;La réplica secundaria se sincroniza si
synchronization_state_descesSYNCHRONIZED.Actualice
REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMITa la versión 1.El siguiente script establece
REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMITen 1 en un grupo de disponibilidad denominadoag1. Antes de ejecutar el siguiente script, reemplaceag1por el nombre del grupo de disponibilidad:ALTER AVAILABILITY GROUP [AGRScale] SET (REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = 1);Esta configuración garantiza que cada transacción activa se confirme tanto en la réplica principal como en, al menos, una réplica secundaria sincrónica.
Nota
Esta configuración no es específica de la conmutación por error y debe establecerse en función de los requisitos del entorno.
Ponga sin conexión la réplica principal y las réplicas secundarias que no participan en la conmutación por error para preparar el cambio de rol:
ALTER AVAILABILITY GROUP [AGRScale] OFFLINEAscienda la réplica secundaria de destino a principal.
ALTER AVAILABILITY GROUP AGRScale FORCE_FAILOVER_ALLOW_DATA_LOSS;Actualice el rol de la réplica principal antigua y otras réplicas secundarias a
SECONDARY, ejecute el comando siguiente en la instancia de SQL Server en la que se hospeda la réplica principal anterior:ALTER AVAILABILITY GROUP [AGRScale] SET (ROLE = SECONDARY);Nota
Para eliminar un grupo de disponibilidad, use DROP AVAILABILITY GROUP. Para un grupo de disponibilidad creado con el tipo de clúster NONE o EXTERNAL, ejecute el comando en todas las réplicas que forman parte del grupo de disponibilidad.
Reanude el movimiento de datos, ejecute el siguiente comando para cada base de datos del grupo de disponibilidad en la instancia de SQL Server que hospeda la réplica principal:
ALTER DATABASE [db1] SET HADR RESUMEVuelva a crear cualquier cliente de escucha que haya creado para fines de escalado de lectura y que no esté administrado por un administrador de clústeres. Si el listener original apunta al antiguo servidor principal, elimínelo y vuelva a crearlo para que apunte al nuevo servidor principal.
Conmutación por error manual forzada con pérdida de datos
Si la réplica principal no está disponible y no se puede recuperar de inmediato, debe forzar una conmutación por error a la réplica secundaria con pérdida de datos. Sin embargo, si la réplica principal original se recupera tras la conmutación por error, pasará a ostentar el rol principal. Para evitar que cada réplica esté en un estado diferente, quite la réplica principal original del grupo de disponibilidad después de una conmutación por error forzada con pérdida de datos. Una vez que la principal original vuelva a estar en línea, quite el grupo de disponibilidad al completo.
Para forzar una conmutación por error manual con pérdida de datos desde la réplica principal N1 hasta la réplica secundaria N2, siga estos pasos:
En la réplica secundaria (N2), inicie una conmutación por error forzada:
ALTER AVAILABILITY GROUP [AGRScale] FORCE_FAILOVER_ALLOW_DATA_LOSS;En la nueva réplica principal (N2), elimine la réplica principal original (N1):
ALTER AVAILABILITY GROUP [AGRScale] REMOVE REPLICA ON N'N1';Compruebe que todo el tráfico de la aplicación se dirija al listener y/o a la nueva réplica principal.
Si el servidor principal original (N1) vuelve a estar en línea, ponga de inmediato fuera de línea el grupo de disponibilidad AGRScale en el servidor principal original (N1):
ALTER AVAILABILITY GROUP [AGRScale] OFFLINESi hay datos o cambios sin sincronizar, conserve dichos datos por medio de copias de seguridad u otras opciones de replicación de datos, en consonancia con los requisitos de su empresa.
A continuación, elimine el grupo de disponibilidad del nodo principal original (N1):
DROP AVAILABILITY GROUP [AGRScale];Anule la base de datos del grupo de disponibilidad de la réplica principal original (N1):
USE [master] GO DROP DATABASE [AGDBRScale] GO(Opcional) Si lo desea, ahora puede volver a agregar N1 como nueva réplica secundaria al grupo de disponibilidad AGRScale.