Partilhar via


Usar AG distribuído para migrar o grupo de disponibilidade

Use um grupo de disponibilidade distribuída (AG) para migrar bancos de dados em um grupo de disponibilidade Always On enquanto mantém o suporte de alta disponibilidade e recuperação de desastres (HADR) pós-migração em seu SQL Server em Máquinas Virtuais (VMs) do Azure.

Depois de validar que suas instâncias do SQL Server de origem atendem aos pré-requisitos, siga as etapas neste artigo para criar uma disponibilidade distribuída entre seu grupo de disponibilidade existente e seu grupo de disponibilidade de destino em seu SQL Server em VMs do Azure.

Este artigo destina-se a bancos de dados que participam de um grupo de disponibilidade e requer um WSFC (Cluster de Failover do Windows Server) e um ouvinte de grupo de disponibilidade. Também é possível migrar bancos de dados de uma instância autônoma do SQL Server.

Diagrama explicando a migração do grupo de disponibilidade usando um grupo de disponibilidade distribuído.

Configuração inicial

A primeira etapa é criar suas VMs do SQL Server no Azure. Você pode fazer isso usando o portal do Azure, o Azure PowerShell ou um modelo ARM.

Certifique-se de configurar suas VMs do SQL Server de acordo com os pré-requisitos. Escolha entre uma implantação de sub-rede única, que depende de um Balanceador de Carga do Azure ou de um nome de rede distribuído para encaminhar o tráfego ao ouvinte do grupo de disponibilidade, ou uma implantação de várias sub-redes que não exige tal requisito. A implantação de várias sub-redes é recomendada. Para saber mais, consulte conectividade.

Para simplificar, associe suas VMs do SQL Server de destino ao mesmo domínio que suas instâncias do SQL Server de origem. Caso contrário, associe sua VM do SQL Server de destino a um domínio federado com o domínio de suas instâncias do SQL Server de origem.

Para usar a propagação automática para criar seu grupo de disponibilidade distribuída (DAG), o nome da instância para o primário global (origem) do DAG deve corresponder ao nome da instância do encaminhador (destino) do DAG. Se houver uma incompatibilidade de nome de instância entre o primário global e o encaminhador, você deverá usar a propagação manual para criar o DAG e adicionar manualmente quaisquer arquivos de banco de dados adicionais no futuro.

Este artigo usa os seguintes parâmetros de exemplo:

  • Nome do banco de dados: Adventureworks2022
  • Nomes de máquinas de origem: OnPremNode1 (primário global no DAG), OnPremNode2
  • Nomes de instância do SQL Server de origem: MSSQLSERVER, MSSQLSERVER
  • Nome do grupo de disponibilidade de origem : OnPremAg
  • Nome do ouvinte do grupo de disponibilidade de origem: OnPremAG_LST
  • Nomes de VM do SQL Server de destino: SQLVM1 (encaminhador no DAG), SQLVM2
  • Nomes de instância de SQL Server alvo em VM do Azure: MSSQLSERVER, MSSQLSERVER
  • Nome do grupo de disponibilidade de destino: AzureAG
  • Nome do ouvinte do grupo de disponibilidade de origem: AzureAG_LST
  • Nome do ponto final: Hadr_endpoint
  • Nome do grupo de disponibilidade distribuída: DAG
  • Nome de domínio: Contoso

Criar pontos de extremidade

Use Transact-SQL (T-SQL) para criar endpoints em ambas as suas instâncias de origem (OnPremNode1, OnPremNode2) e nas instâncias de destino do SQL Server (SQLVM1, SQLVM2).

Se você já tiver um grupo de disponibilidade configurado nas instâncias de origem, execute esse script apenas nas duas instâncias de destino.

Para criar os seus endpoints, execute este script T-SQL nos servidores de origem e de destino:

CREATE ENDPOINT [Hadr_endpoint]
    STATE = STARTED
    AS TCP (
        LISTENER_PORT = 5022,
        LISTENER_IP = ALL
    )
    FOR DATABASE_MIRRORING (
        ROLE = ALL,
        AUTHENTICATION = WINDOWS NEGOTIATE,
        ENCRYPTION = REQUIRED ALGORITHM AES
    );
GO

As contas de domínio têm acesso automático aos pontos de extremidade, mas as contas de serviço podem não fazer parte automaticamente do grupo sysadmin e podem não ter permissão de conexão. Para conceder manualmente a permissão de conexão da conta de serviço do SQL Server ao ponto de extremidade, execute o seguinte script T-SQL em ambos os servidores:

GRANT CONNECT ON ENDPOINT::[Hadr_endpoint] TO [<your account>];

Criar fonte AG

Como um grupo de disponibilidade distribuída é um grupo de disponibilidade especial que abrange dois grupos de disponibilidade individuais, primeiro você precisa criar um grupo de disponibilidade nas duas instâncias de origem do SQL Server.

Se você já tiver um grupo de disponibilidade em suas instâncias de origem, ignore esta seção.

Use Transact-SQL (T-SQL) para criar um grupo de disponibilidade (OnPremAG) entre suas duas instâncias de origem (OnPremNode1, OnPremNode2) para o banco de dados de exemplo Adventureworks2022 .

Para criar o grupo de disponibilidade nas instâncias de origem, execute este script na réplica primária de origem (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)
);

Em seguida, para unir a réplica secundária (OnPremNode2) ao grupo de disponibilidade (OnPremAg).

Para ingressar no grupo de disponibilidade, execute este script na réplica secundária de origem:

ALTER AVAILABILITY GROUP [OnPremAG] JOIN;
GO
ALTER AVAILABILITY GROUP [OnPremAG] GRANT CREATE ANY DATABASE;
GO

Por fim, crie o ouvinte para o seu grupo de disponibilidade de encaminhador global (OnPremAG).

Para criar o ouvinte, execute este script na réplica primária de origem:

USE [master]
GO

ALTER AVAILABILITY GROUP [OnPremAG]
ADD LISTENER N'OnPremAG_LST' (
    WITH IP (
        (<available_static_ip>, <mask>),
        PORT = 60173
    )
);
GO

Criar AG de destino

Você também precisa criar um grupo de disponibilidade nas VMs do SQL Server de destino.

Se você já tiver um grupo de disponibilidade configurado entre suas instâncias do SQL Server no Azure, ignore esta seção.

Use Transact-SQL (T-SQL) para criar um grupo de disponibilidade (AzureAG) nas instâncias de destino do SQL Server (SQLVM1 e SQLVM2).

Para criar o grupo de disponibilidade no destino, execute este script na réplica primária 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

Em seguida, associe a réplica secundária de destino (SQLVM2) ao grupo de disponibilidade (AzureAG).

Execute este script na réplica secundária de destino:

ALTER AVAILABILITY GROUP [AzureAG] JOIN;
GO
ALTER AVAILABILITY GROUP [AzureAG] GRANT CREATE ANY DATABASE;
GO

Por fim, crie um ouvinte (AzureAG_LST) para seu grupo de disponibilidade de destino (AzureAG). Se você implantou suas VMs do SQL Server em várias sub-redes, crie seu ouvinte usando o Transact-SQL. Se você implantou suas VMs do SQL Server em uma única sub-rede, configure um Balanceador de Carga do Azure ou um nome de rede distribuída para seu ouvinte.

Para criar seu ouvinte, execute esse script na réplica primária do grupo de disponibilidade no 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

Criar Grupo de Disponibilidade (AG) distribuído

Depois de configurar os grupos de disponibilidade de origem (OnPremAG) e de destino (AzureAG), crie o grupo de disponibilidade distribuída para abranger ambos os grupos de disponibilidade individuais.

Use Transact-SQL no SQL Server de origem primário global (OnPremNode1) e no AG (OnPremAG) para criar o Distributed Availability Group (DAG).

Para criar o AG distribuído na fonte, execute este script na fonte primária global:

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

Observação

O modo de propagação é definido como AUTOMATIC, pois a versão do SQL Server no destino e na origem é a mesma. Se o destino do SQL Server for uma versão superior ou se o primário global e o encaminhador tiverem nomes de instância diferentes, crie o ag distribuído e associe o AG secundário ao ag distribuído com SEEDING_MODE definido como MANUAL. Em seguida, restaure manualmente os bancos de dados da origem para a instância do SQL Server de destino. Revise a atualização de versões durante a migração para saber mais.

Depois que o AG distribuído for criado, junte o AG de destino (AzureAG) na instância do encaminhador de destino (SQLVM1) ao AG distribuído (DAG).

Para unir o AG de destino ao AG distribuído, execute este script no reencaminhador 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

Se você precisar cancelar, pausar ou atrasar a sincronização entre os grupos de disponibilidade de origem e de destino (como, por exemplo, problemas de desempenho), execute este script na instância primária global de origem (OnPremNode1):

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

Para saber mais, reveja cancelar o envio automático ao redirecionador.