Compartir a través de


Uso de AG distribuido para migrar bases de datos desde una instancia independiente

Use un grupo de disponibilidad (AG) distribuido para migrar una base de datos (o varias bases de datos) de una instancia independiente de SQL Server a una instancia de SQL Server en Azure Virtual Machines (VM).

Una vez que haya validado que la instancia de origen de SQL Server cumple los requisitos previos, siga los pasos de este artículo para crear un grupo de disponibilidad en su instancia de SQL Server independiente y migrar la base de datos (o grupo de bases de datos) a su VM con SQL Server en Azure.

Este artículo está pensado para bases de datos en una instancia independiente de SQL Server. Esta solución no requiere un clúster de conmutación por error de Windows Server (WSFC) o una escucha del grupo de disponibilidad. También es posible migrar bases de datos en un grupo de disponibilidad.

Diagrama explicativo de la migración de instancia única donde se usa un grupo de disponibilidad distribuido.

Configuración inicial

El primer paso es crear su VM con SQL Server en Azure. Para hacerlo, puede usar Azure Portal, Azure PowerShell o una plantilla de ARM.

Asegúrese de configurar su VM con SQL Server según los requisitos previos.

Para mayor sencillez, una su VM con SQL Server de destino al mismo dominio que SQL Server de origen. En caso contrario, una su VM con SQL Server de destino a un dominio federado con el dominio de su 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
  • Nombre de la máquina de origen (principal global en DAG): OnPremNode
  • Nombre de la instancia de SQL Server de origen: MSSQLSERVER
  • Nombre del grupo de disponibilidad de origen: OnPremAg
  • Nombre de VM con SQL Server de destino (reenviador en DAG): SQLVM
  • Nombre de SQL Server de destino en la instancia de Azure Virtual Machines: MSSQLSERVER
  • Nombre del grupo de disponibilidad de destino: AzureAG
  • 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 la instancia de SQL Server de origen (OnPremNode) como en la de destino (SQLVM).

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 la instancia de SQL Server origen. Si ya tiene un grupo de disponibilidad que le gustaría mantener en Azure, migre el grupo de disponibilidad su lugar.

Use Transact-SQL (T-SQL) para crear un grupo de disponibilidad (OnPremAg) en la instancia de origen (OnPremNode) para la base de datos Adventureworks2022 de ejemplo.

Para crear el grupo de disponibilidad, ejecute este script en el origen:

CREATE AVAILABILITY GROUP [OnPremAG]
WITH (
    AUTOMATED_BACKUP_PREFERENCE = PRIMARY,
    DB_FAILOVER = OFF,
    DTC_SUPPORT = NONE,
    CLUSTER_TYPE = NONE
)
FOR DATABASE [Adventureworks2022] REPLICA ON N'OnPremNode'
WITH (
    ENDPOINT_URL = N'TCP://OnPremNode.contoso.com:5022',
    FAILOVER_MODE = MANUAL,
    AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
    SEEDING_MODE = AUTOMATIC,
    SECONDARY_ROLE(ALLOW_CONNECTIONS = NO)
);
GO

Creación de un AG de destino

También debe crear un grupo de disponibilidad en la VM de SQL Server de destino.

Use Transact-SQL (T-SQL) para crear un grupo de disponibilidad (AzureAG) en la instancia (SQLVM) de destino.

Para crear el grupo de disponibilidad, ejecute este script en el destino:

CREATE AVAILABILITY GROUP [AzureAG]
WITH (
    AUTOMATED_BACKUP_PREFERENCE = PRIMARY,
    DB_FAILOVER = OFF,
    DTC_SUPPORT = NONE,
    CLUSTER_TYPE = NONE,
    REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = 0
)
FOR REPLICA ON N'SQLVM'
WITH (
    ENDPOINT_URL = N'TCP://SQLVM.contoso.com:5022',
    FAILOVER_MODE = MANUAL,
    AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
    SEEDING_MODE = AUTOMATIC,
    SECONDARY_ROLE(ALLOW_CONNECTIONS = NO)
);
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 la instancia de SQL Server de origen (OnPremNode) y AG (OnPremAG) para crear el grupo de disponibilidad distribuido (DAG).

Para crear el AG distribuido, ejecute este script en el origen:

CREATE AVAILABILITY GROUP [DAG]
WITH (DISTRIBUTED) AVAILABILITY GROUP
ON 'OnPremAG' WITH (
    LISTENER_URL = 'tcp://OnPremNode.contoso.com:5022',
    AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
    FAILOVER_MODE = MANUAL,
    SEEDING_MODE = AUTOMATIC
),
'AzureAG' WITH (
    LISTENER_URL = 'tcp://SQLVM.contoso.com:5022',
    AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
    FAILOVER_MODE = MANUAL,
    SEEDING_MODE = AUTOMATIC
);
GO

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. Para obtener más información, consulte Actualización de versiones durante la migración.

Después de crear el AG distribuido, una el AG de destino (AzureAG) de la instancia de destino (SQLVM) al AG distribuido (DAG).

Para unir el AG de destino al AG distribuido, ejecute este script en el destino:

ALTER AVAILABILITY GROUP [DAG]
JOIN AVAILABILITY GROUP
ON 'OnPremAG' WITH (
    LISTENER_URL = 'tcp://OnPremNode.contoso.com:5022',
    AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
    FAILOVER_MODE = MANUAL,
    SEEDING_MODE = AUTOMATIC
),
'AzureAG' WITH (
    LISTENER_URL = 'tcp://SQLVM.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 (OnPremNode):

ALTER AVAILABILITY GROUP [DAG]
MODIFY AVAILABILITY GROUP
ON 'AzureAG' WITH (SEEDING_MODE = MANUAL);

Para obtener más información, consulte Cancelación de la propagación automática al reenviador.