Usar a AG distribuída para migrar o grupo de disponibilidade

Use um AG (grupo de disponibilidade) distribuído para migrar bancos de dados em um grupo de disponibilidade Always On, mantendo suporte de HADR (alta disponibilidade e recuperação de desastre) após a migração no seu SQL Server em Máquinas Virtuais do Azure (VMs).

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

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

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

Instalação inicial

A primeira etapa é criar sua VM do SQL Server no Azure. É possível fazer isso usando o portal do Azure, o Azure PowerShell ou um modelo de ARM.

Certifique-se de configurar sua VM do SQL Server de acordo com os pré-requisitos. Escolha entre uma única implantação de sub-rede, que depende de um nome de rede distribuída ou do Azure Load Balancer para rotear o tráfego para o ouvinte do grupo de disponibilidade ou uma implantação de várias sub-redes que não tenha esse requisito. A implantação de várias sub-redes é recomendada. Para saber mais, confira conectividade.

Para simplificar, ingresse suas VMs do SQL Server de destino no mesmo domínio que suas instâncias do SQL Server de origem. Caso contrário, ingresse sua VM do SQL Server de destino em 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 DAG (grupo de disponibilidade distribuída), o nome da instância do primário global (origem) global 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, use a propagação manual para criar o DAG e adicione manualmente quaisquer arquivos de banco de dados adicionais no futuro.

Este artigo usa os seguintes parâmetros de exemplo:

  • Nome do projeto: Adventureworks
  • Nomes de máquina de origem: OnPremNode1 (primário global no DAG), OnPremNode2
  • Nomes de instâncias do SQL Server de origem: MSSQLSERVER, MSSQLSERVER
  • Nome de grupo de disponibilidade de origem: OnPremAg
  • Nome do ouvinte do grupo de disponibilidade de origem: OnPremAG_LST
  • Nomes da VM do SQL Server de destino: SQLVM1 (encaminhador no DAG), SQLVM2
  • Nomes da instância do SQL Server de destino na 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 de extremidade: Hadr_endpoint
  • Nome do grupo de disponibilidade distribuído: DAG
  • Nome de domínio: Contoso

Criar pontos de extremidade

Use T-SQL (Transact-SQL) para criar pontos de extremidade, tanto nas duas instâncias de origem (OnPremNode1, OnPremNode2) como nas instâncias do SQL Server de destino (SQLVM1, SQLVM2).

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

Para criar seus pontos de extremidade, execute este script T-SQL em servidores de origem e 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 

As contas de domínio têm acesso automaticamente 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 para a conexão. Para conceder manualmente à conta de serviço do SQL Server permissão de conexão com o ponto de extremidade, execute o seguinte script T-SQL em ambos os servidores:

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

Criar AG de origem

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

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

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

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  [Adventureworks]  
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 ingressar a réplica secundária (OnPremNode2) no 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 seu grupo de disponibilidade do 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 T-SQL (Transact-SQL) para criar um grupo de disponibilidade (AzureAG) nas instâncias do SQL Server de destino (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, ingresse a réplica secundária de destino (SQLVM2) no 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ê tiver implantado suas VMs do SQL Server em várias sub-redes, crie seu ouvinte usando Transact-SQL. Se você tiver implantado suas VMs do SQL Server em uma única sub-rede, configure um Azure Load Balancer ou um nome de rede distribuído para o ouvinte.

Para criar seu ouvinte, execute este script na réplica principal do grupo de disponibilidade no Azure.

ALTER AVAILABILITY GROUP [AzureAG]
ADD LISTENER N'AzureAG_LST' (
WITH IP
( (N'<primary replica's secondary ip >', N'<primary mask>'), (N'<secondary replica's secondary ip>', N'<secondary mask>') )
, PORT=<port number you set>);
GO

Criar AG distribuído

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

Use Transact-SQL no primário global do SQL Server de origem (OnPremNode1) e AG (OnPremAG) para criar o grupo de disponibilidade distribuído (DAG).

Para criar o AG distribuído na origem, execute este script no primário global de origem:

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 as versões do SQL Server no destino e na origem são iguais. Se a versão do SQL Server de destino for superior ou o primário global e o encaminhador tiverem nomes de instâncias diferentes, crie o AG distribuído e conecte 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 de destino do SQL Server. Revise as versões de atualização durante a migração para saber mais.

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

Para ingressar a AG de destino no AG distribuído, execute este script no encaminhador de destino:

ALTER AVAILABILITY GROUP [DAG]  
   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 precisar cancelar, pausar ou atrasar a sincronização entre os grupos de disponibilidade de origem e destino (como, por exemplo, problemas de desempenho), execute este script na instância do primário global de origem (OnPremNode1):

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

Para saber mais, revise Cancelar a propagação automática para o encaminhador.

Próximas etapas

Depois que seu grupo de disponibilidade distribuído for criado, você estará pronto para concluir a migração.