Share via


Utilizar o AG distribuído para migrar o grupo de disponibilidade

Utilize um grupo de disponibilidade distribuído (AG) para migrar bases de dados num grupo de disponibilidade AlwaysOn, mantendo o suporte de elevada disponibilidade e recuperação após desastre (HADR) após a migração no seu SQL Server no Azure Máquinas Virtuais (VMs).

Depois de validar a sua origem SQL Server instâncias cumprirem os pré-requisitos, siga os passos neste artigo para criar uma disponibilidade distribuída entre o grupo de disponibilidade existente e o grupo de disponibilidade de destino no seu SQL Server em VMs do Azure.

Este artigo destina-se a bases de dados que participam num grupo de disponibilidade e requer um Cluster de Ativação Pós-falha do Windows Server (WSFC) e um serviço de escuta do grupo de disponibilidade. Também é possível migrar bases de dados de uma instância SQL Server autónoma.

Diagrama a explicar a migração do grupo de disponibilidade com um grupo de disponibilidade distribuído

Configuração inicial

O primeiro passo é criar as VMs SQL Server no Azure. Pode fazê-lo com o portal do Azure, Azure PowerShell ou um modelo do ARM.

Certifique-se de que configura as VMs SQL Server de acordo com os pré-requisitos. Escolha entre uma implementação de sub-rede única, que depende de um Balanceador de Carga do Azure ou do nome da rede distribuída para encaminhar o tráfego para o serviço de escuta do grupo de disponibilidade, ou uma implementação de várias sub-redes, que não exige esse requisito. Recomenda-se a implementação de várias sub-redes. Para saber mais, veja conectividade.

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

Para utilizar a sementeira automática para criar o seu grupo de disponibilidade distribuído (DAG), o nome da instância da principal global (origem) do DAG tem de corresponder ao nome da instância do reencaminhador (destino) do DAG. Se existir um erro de correspondência entre o principal e o reencaminhador global, tem de utilizar a sementeira manual para criar o DAG e adicionar manualmente quaisquer ficheiros de base de dados adicionais no futuro.

Este artigo utiliza os seguintes parâmetros de exemplo:

  • Nome da base de dados: Adventureworks
  • Nomes de máquinas de origem: OnPremNode1 (global primary in DAG), OnPremNode2
  • Nomes de instâncias de SQL Server de origem: MSSQLSERVER, MSSQLSERVER
  • Nome do grupo de disponibilidade de origem: OnPremAg
  • Nome do serviço de escuta do grupo de disponibilidade de origem: OnPremAG_LST
  • Nomes de VMs SQL Server de destino: SQLVM1 (reencaminhador no DAG), SQLVM2
  • SQL Server de destino nos nomes de instâncias da VM do Azure: MSSQLSERVER, MSSQLSERVER
  • Nome do grupo de disponibilidade de destino: AzureAG
  • Nome do serviço de escuta do grupo de disponibilidade de origem: AzureAG_LST
  • Nome do ponto final: Hadr_endpoint
  • Nome do grupo de disponibilidade distribuído: DAG
  • Nome de domínio: Contoso

Criar pontos finais

Utilize Transact-SQL (T-SQL) para criar pontos finais nas duas instâncias de origem (OnPremNode1, OnPremNode2) e instâncias de destino SQL Server (SQLVM1, SQLVM2).

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

Para criar os seus pontos finais, 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 a pontos finais, mas as contas de serviço podem não fazer automaticamente parte do grupo sysadmin e podem não ter permissão de ligação. Para conceder manualmente a permissão de ligação da conta de serviço SQL Server ao ponto final, execute o seguinte script T-SQL em ambos os servidores:

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

Criar AG de origem

Uma vez que um grupo de disponibilidade distribuído é um grupo de disponibilidade especial que se estende por dois grupos de disponibilidade individuais, primeiro tem de criar um grupo de disponibilidade nas duas instâncias de SQL Server de origem.

Se já tiver um grupo de disponibilidade nas instâncias de origem, ignore esta secção.

Utilize Transact-SQL (T-SQL) para criar um grupo de disponibilidade (OnPremAG) entre as duas instâncias de origem (OnPremNode1, OnPremNode2) para a base de dados Adventureworks , por exemplo.

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 associar a réplica secundária (OnPremNode2) ao grupo de disponibilidade (OnPremAg).

Para aderir ao 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 serviço de escuta para o grupo de disponibilidade do reencaminhador global (OnPremAG).

Para criar o serviço de escuta, 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

Também tem de criar um grupo de disponibilidade nas VMs de destino SQL Server.

Se já tiver um grupo de disponibilidade configurado entre as instâncias SQL Server no Azure, ignore esta secção.

Utilize Transact-SQL (T-SQL) para criar um grupo de disponibilidade (AzureAG) nas instâncias de destino 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 serviço de escuta (AzureAG_LST) para o grupo de disponibilidade de destino (AzureAG). Se implementou as suas VMs SQL Server em várias sub-redes, crie o seu serviço de escuta com Transact-SQL. Se implementou as VMs SQL Server numa única sub-rede, configure um Balanceador de Carga do Azure ou um nome de rede distribuído para o seu serviço de escuta.

Para criar o seu serviço de escuta, execute este 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'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 os grupos de disponibilidade de origem (OnPremAG) e de destino (AzureAG), crie o grupo de disponibilidade distribuído para abranger ambos os grupos de disponibilidade individuais.

Utilize Transact-SQL na origem SQL Server principal global (OnPremNode1) e AG (OnPremAG) para criar o grupo de disponibilidade distribuído (DAG).

Para criar o AG distribuído na origem, execute este script na primária 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 

Nota

O modo de propagação está definido como AUTOMATIC a versão do SQL Server no destino e a origem é a mesma. Se o destino SQL Server for uma versão superior ou se o seu principal e reencaminhador global tiverem nomes de instâncias 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 as bases de dados da origem para a instância de destino SQL Server. Reveja a atualização de versões durante a migração para saber mais.

Após a criação do AG distribuído, associe o AG de destino (AzureAG) na instância do reencaminhador de destino (SQLVM1) ao AG distribuído (DAG).

Para associar o AG de destino ao AG distribuído, execute este script no reencaminhador 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 de cancelar, colocar em pausa ou atrasar a sincronização entre os grupos de disponibilidade de origem e de destino (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, veja Cancelar a propagação automática para reencaminhador.

Passos seguintes

Depois de criar o grupo de disponibilidade distribuído, está pronto para concluir a migração.