Uso de una AG distribuido para migrar un grupo de disponibilidad
Use un grupo de disponibilidad (AG) distribuido para migrar bases de datos en un grupo de disponibilidad Always On mientras mantiene la compatibilidad con alta disponibilidad y recuperación ante desastres (HADR) después de la migración en su SQL Server en de Azure Virtual Machines (VM).
Una vez que haya validado que las instancias de SQL Server de origen cumplen los requisitos previos, siga los pasos de este artículo para crear una disponibilidad distribuida entre el grupo de disponibilidad existente y el grupo de disponibilidad de destino en su SQL Server en Azure Virtual Machines.
Este artículo está pensado para bases de datos que participan en un grupo de disponibilidad y requiere un clúster de conmutación por error de Windows Server (WSFC) y una escucha de grupo de disponibilidad. También es posible migrar bases de datos desde una instancia de SQL Server independiente.
Configuración inicial
El primer paso es crear sus VM con SQL Server en Azure. Para hacerlo, puede usar Azure Portal, Azure PowerShell o una plantilla de ARM.
Asegúrese de configurar sus VM con SQL Server según los requisitos previos. Elija entre una implementación de subred única, que se basa en Azure Load Balancer o un nombre de red distribuida para enrutar el tráfico al cliente de escucha del grupo de disponibilidad, o una implementación de subred múltiple que no tenga dicho requisito. Se recomienda la implementación de subred múltiple. Para obtener más información, consulte la sección sobre conectividad.
Para mayor sencillez, una sus VM con SQL Server al mismo dominio que las instancias de SQL Server de origen. En caso contrario, una su VM de SQL Server de destino a un dominio federado con el dominio de sus instancias de SQL Server de origen.
Para usar la inicialización automática para crear el grupo de disponibilidad distribuido (DAG), el nombre de instancia para el principal global (origen) del DAG debe coincidir con el nombre de instancia del reenviador (destino) del DAG. Si hay una falta de coincidencia de nombres de instancia entre el principal global y el reenviador, debe usar la inicialización manual para crear el DAG y agregar manualmente cualquier archivo de base de datos adicional en el futuro.
En este artículo se usan los siguientes parámetros de ejemplo:
- Nombre de la base de datos:
Adventureworks2022
- Nombres de las máquinas de origen:
OnPremNode1
(principal global en DAG),OnPremNode2
. - Nombres de las instancias de SQL Server de origen:
MSSQLSERVER
,MSSQLSERVER
- Nombre del grupo de disponibilidad de origen:
OnPremAg
- Nombre de la escucha de grupo de disponibilidad de origen:
OnPremAG_LST
- Nombres de VM con SQL Server de destino:
SQLVM1
(reenviador en DAG),SQLVM2
- Nombres de SQL Server de destino en la instancia de Azure Virtual Machines:
MSSQLSERVER
,MSSQLSERVER
- Nombre del grupo de disponibilidad de destino:
AzureAG
- Nombre de la escucha de grupo de disponibilidad de origen:
AzureAG_LST
- Nombre del punto de conexión:
Hadr_endpoint
- Nombre del grupo de disponibilidad distribuido:
DAG
- Nombre de dominio:
Contoso
Creación de puntos de conexión
Use Transact-SQL (T-SQL) para crear puntos de conexión tanto en las dos instancias de origen (OnPremNode1
, OnPremNode2
) como en las instancias de SQL Server de destino (SQLVM1
, SQLVM2
).
Si ya tiene un grupo de disponibilidad configurado en las instancias de origen, ejecute este script solo en las dos instancias de destino.
Para crear los puntos de conexión, ejecute este script de T-SQL en los servidores de origen y de destino:
CREATE ENDPOINT [Hadr_endpoint] STATE = STARTED AS TCP (
LISTENER_PORT = 5022,
LISTENER_IP = ALL
)
FOR DATA_MIRRORING(ROLE = ALL,
AUTHENTICATION = WINDOWS NEGOTIATE,
ENCRYPTION = REQUIRED ALGORITHM AES);
GO
Las cuentas de dominio tienen acceso automáticamente a los puntos de conexión, pero es posible que las cuentas de servicio no formen automáticamente parte del grupo sysadmin y que no tengan permiso de conexión. Para conceder manualmente el permiso de conexión de cuenta de servicio de SQL Server al punto de conexión, ejecute el siguiente script de T-SQL en ambos servidores:
GRANT CONNECT ON ENDPOINT::[Hadr_endpoint] TO [<your account>];
Creación de un AG de origen
Puesto que un grupo de disponibilidad distribuido es un grupo de disponibilidad especial que abarca dos grupos de disponibilidad individuales, primero debe crear un grupo de disponibilidad en las dos instancias de SQL Server de origen.
Si ya tiene un grupo de disponibilidad en las instancias de origen, omita esta sección.
Use Transact-SQL (T-SQL) para crear un grupo de disponibilidad (OnPremAG
) en las dos instancias de origen (OnPremNode1
, OnPremNode2
) para la base de datos Adventureworks2022
de ejemplo.
Para crear el grupo de disponibilidad en las instancias de origen, ejecute este script en la réplica principal de origen (OnPremNode1
):
CREATE AVAILABILITY GROUP [OnPremAG]
WITH (
AUTOMATED_BACKUP_PREFERENCE = PRIMARY,
DB_FAILOVER = OFF,
DTC_SUPPORT = NONE
)
FOR DATABASE [Adventureworks2022] REPLICA
ON N'OnPremNode1' WITH (
ENDPOINT_URL = N'TCP://OnPremNode1.contoso.com:5022',
FAILOVER_MODE = AUTOMATIC,
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
SEEDING_MODE = AUTOMATIC,
SECONDARY_ROLE(ALLOW_CONNECTIONS = NO)
),
N'OnPremNode2' WITH (
ENDPOINT_URL = N'TCP://OnPremNode2.contoso.com:5022',
FAILOVER_MODE = AUTOMATIC,
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
SEEDING_MODE = AUTOMATIC,
SECONDARY_ROLE(ALLOW_CONNECTIONS = NO)
);
A continuación, para unir una réplica secundaria (OnPremNode2
) al grupo de disponibilidad (OnPremAg
).
Para unirse al grupo de disponibilidad, ejecute este script en la réplica secundaria de origen:
ALTER AVAILABILITY GROUP [OnPremAG] JOIN;
GO
ALTER AVAILABILITY GROUP [OnPremAG] GRANT CREATE ANY DATABASE;
GO
Por último, cree el cliente de escucha para el grupo de disponibilidad global del reenviador (OnPremAG
).
Para crear el cliente de escucha, ejecute este script en la réplica principal de origen:
USE [master]
GO
ALTER AVAILABILITY GROUP [OnPremAG]
ADD LISTENER N'OnPremAG_LST' (
WITH IP (
(<available_static_ip>, <mask>),
PORT = 60173
)
);
GO
Creación de un AG de destino
También debe crear un grupo de disponibilidad en las VM con SQL Server de destino.
Si ya tiene un grupo de disponibilidad configurado entre las instancias de SQL Server en Azure, omita esta sección.
Use Transact-SQL (T-SQL) para crear un grupo de disponibilidad (AzureAG
) en las instancias de SQL Server de destino (SQLVM1
y SQLVM2
).
Para crear el grupo de disponibilidad en el destino, ejecute este script en la réplica principal de destino:
CREATE AVAILABILITY GROUP [AzureAG] FOR REPLICA
ON N'SQLVM1' WITH (
ENDPOINT_URL = N'TCP://SQLVM1.contoso.com:5022',
FAILOVER_MODE = MANUAL,
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
BACKUP_PRIORITY = 50,
SECONDARY_ROLE(ALLOW_CONNECTIONS = NO),
SEEDING_MODE = AUTOMATIC
),
N'SQLVM2' WITH (
ENDPOINT_URL = N'TCP://SQLVM2.contoso.com:5022',
FAILOVER_MODE = MANUAL,
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
BACKUP_PRIORITY = 50,
SECONDARY_ROLE(ALLOW_CONNECTIONS = NO),
SEEDING_MODE = AUTOMATIC
);
GO
A continuación, una la réplica secundaria de destino (SQLVM2
) al grupo de disponibilidad (AzureAG
).
Ejecute este script en la réplica secundaria de destino:
ALTER AVAILABILITY GROUP [AzureAG] JOIN;
GO
ALTER AVAILABILITY GROUP [AzureAG] GRANT CREATE ANY DATABASE;
GO
Por último, cree un cliente de escucha (AzureAG_LST
) para el grupo de disponibilidad de destino (AzureAG
). Si implementó sus VM con SQL Server en varias subredes, cree el cliente de escucha mediante Transact-SQL. Si implementó sus VM con SQL Server en una única subred, configure una instancia de Azure Load Balancer o un nombre de red distribuido para el cliente de escucha.
Para crear el cliente de escucha, ejecute este script en la réplica principal del grupo de disponibilidad en Azure.
ALTER AVAILABILITY GROUP [AzureAG]
ADD LISTENER N'AzureAG_LST' (
WITH IP (
(N'<primary replica_secondary_ip>', N'<primary_mask>'),
(N'<secondary replica_secondary_ip>', N'<secondary_mask>')
),
PORT = <port_number_you_set>
);
GO
Creación de un AG distribuido
Después de configurar los grupos de disponibilidad de origen (OnPremAG
) y destino (AzureAG
), cree el grupo de disponibilidad distribuido para abarcar ambos grupos de disponibilidad individuales.
Use Transact-SQL en el principal global de SQL Server de origen (OnPremNode1
) y AG (OnPremAG
) para crear el grupo de disponibilidad distribuido (DAG
).
Para crear el AG distribuido en el origen, ejecute este script en el principal global de origen:
CREATE AVAILABILITY GROUP [DAG]
WITH (DISTRIBUTED) AVAILABILITY GROUP
ON 'OnPremAG' WITH (
LISTENER_URL = 'tcp://OnPremAG_LST.contoso.com:5022',
AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
FAILOVER_MODE = MANUAL,
SEEDING_MODE = AUTOMATIC
),
'AzureAG' WITH (
LISTENER_URL = 'tcp://AzureAG_LST.contoso.com:5022',
AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
FAILOVER_MODE = MANUAL,
SEEDING_MODE = AUTOMATIC
);
GO
Nota:
El modo de inicialización se establece en AUTOMATIC
, ya que la versión de SQL Server en el destino y el origen es la misma. Si el destino de SQL Server es una versión superior, o si el principal global y el reenviador tienen nombres de instancia diferentes, cree el AG distribuido y una el AG secundario a aquel con SEEDING_MODE
establecido en MANUAL
. A continuación, restaure manualmente las bases de datos desde el origen a la instancia de SQL Server de destino. Revise la sección sobre versiones de actualización durante la migración para obtener más información.
Después de crear el AG distribuido, una el AG de destino (AzureAG
) de la instancia del reenviador de destino (SQLVM1
) al AG distribuido (DAG
).
Para unir el AG de destino al AG distribuido, ejecute este script en el reenviador de destino:
ALTER AVAILABILITY GROUP [DAG]
INNER JOIN AVAILABILITY GROUP
ON 'OnPremAG' WITH (
LISTENER_URL = 'tcp://OnPremAG_LST.contoso.com:5022',
AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
FAILOVER_MODE = MANUAL,
SEEDING_MODE = AUTOMATIC
),
'AzureAG' WITH (
LISTENER_URL = 'tcp://AzureAG_LST.contoso.com:5022',
AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
FAILOVER_MODE = MANUAL,
SEEDING_MODE = AUTOMATIC
);
GO
Si necesita cancelar, pausar o retrasar la sincronización entre los grupos de disponibilidad de origen y destino (como, por ejemplo, problemas de rendimiento), ejecute este script en la instancia principal global de origen (OnPremNode1
):
ALTER AVAILABILITY GROUP [DAG]
MODIFY AVAILABILITY GROUP ON 'AzureAG'
WITH (SEEDING_MODE = MANUAL);
Para obtener más información, revise la cancelación de la inicialización automática al reenviador.