Usare il gruppo di disponibilità distribuito per eseguire la migrazione del gruppo di disponibilità

Usare un gruppo di disponibilità distribuito (AG) per eseguire la migrazione dei database in un gruppo di disponibilità Always On mantenendo la disponibilità elevata e il ripristino di emergenza (HADR) supportano dopo la migrazione nei SQL Server in Azure Macchine virtuali (VM).

Dopo aver convalidato le istanze di origine SQL Server soddisfare i prerequisiti, seguire la procedura descritta in questo articolo per creare una disponibilità distribuita tra il gruppo di disponibilità esistente e il gruppo di disponibilità di destinazione nei SQL Server di Azure.

Questo articolo è destinato ai database che partecipano a un gruppo di disponibilità e richiede un cluster di failover di Windows Server (WSFC) e un listener del gruppo di disponibilità. È anche possibile eseguire la migrazione dei database da un'istanza autonoma SQL Server.

Diagramma che illustra la migrazione del gruppo di disponibilità usando un gruppo di disponibilità distribuito

Configurazione iniziale

Il primo passaggio consiste nel creare le macchine virtuali SQL Server in Azure. È possibile farlo usando il portale di Azure, il Azure PowerShell o un modello di Resource Manager.

Assicurarsi di configurare le macchine virtuali SQL Server in base ai prerequisiti. Scegliere tra una distribuzione con subnet singola, che si basa su Azure Load Balancer o un nome di rete distribuita per instradare il traffico al listener del gruppo di disponibilità o una distribuzione con più subnet che non ha tale requisito. È consigliabile eseguire la distribuzione con più subnet. Per altre informazioni, vedere Connettività.

Per semplicità, aggiungere le macchine virtuali di destinazione SQL Server allo stesso dominio delle istanze di SQL Server di origine. In caso contrario, aggiungere la macchina virtuale di destinazione SQL Server a un dominio federato con il dominio delle istanze di SQL Server di origine.

Per usare il seeding automatico per creare il gruppo di disponibilità distribuito (DAG), il nome dell'istanza per l'istanza primaria globale (origine) del daG deve corrispondere al nome dell'istanza del server di inoltro (destinazione) dell'istanza di daG. Se è presente una mancata corrispondenza tra il nome dell'istanza globale e il server di inoltro, è necessario usare il seeding manuale per creare il gruppo dati e aggiungere manualmente eventuali file di database aggiuntivi in futuro.

Questo articolo usa i parametri di esempio seguenti:

  • Nome database: Adventureworks
  • Nomi di computer di origine : OnPremNode1 (primario globale in DAG), OnPremNode2
  • Nomi di istanza di SQL Server di origine: MSSQLSERVER, MSSQLSERVER
  • Nome del gruppo di disponibilità di origine : OnPremAg
  • Nome del listener del gruppo di disponibilità di origine: OnPremAG_LST
  • Destinazione SQL Server nomi delle macchine virtuali: SQLVM1 (forwarder in DAG), SQLVM2
  • Destinazione SQL Server nei nomi delle istanze di macchine virtuali di Azure: MSSQLSERVER, MSSQLSERVER
  • Nome del gruppo di disponibilità di destinazione: AzureAG
  • Nome del listener del gruppo di disponibilità di origine: AzureAG_LST
  • Nome endpoint: Hadr_endpoint
  • Nome del gruppo di disponibilità distribuito: DAG
  • Nome di dominio: Contoso

Creare endpoint

Usare Transact-SQL (T-SQL) per creare endpoint in entrambe le istanze di origine (OnPremNode1, OnPremNode2) e le istanze di destinazione SQL Server (SQLVM1,SQLVM2).

Se si dispone già di un gruppo di disponibilità configurato nelle istanze di origine, eseguire questo script solo nelle due istanze di destinazione.

Per creare gli endpoint, eseguire questo script T-SQL sia nei server di origine che di destinazione:

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 

Gli account di dominio hanno automaticamente accesso agli endpoint, ma gli account del servizio potrebbero non essere automaticamente parte del gruppo sysadmin e potrebbero non disporre dell'autorizzazione di connessione. Per concedere manualmente l'autorizzazione di connessione dell'account del servizio SQL Server all'endpoint, eseguire lo script T-SQL seguente in entrambi i server:

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

Creare un gruppo di disponibilità di origine

Poiché un gruppo di disponibilità distribuito è un gruppo di disponibilità speciale che si estende su due singoli gruppi di disponibilità, è prima necessario creare un gruppo di disponibilità nelle due istanze di SQL Server di origine.

Se si dispone già di un gruppo di disponibilità nelle istanze di origine, ignorare questa sezione.

Usare Transact-SQL (T-SQL) per creare un gruppo di disponibilità (OnPremAG) tra le due istanze di origine (OnPremNode1, OnPremNode2) per il database Adventureworks di esempio.

Per creare il gruppo di disponibilità nelle istanze di origine, eseguire questo script nella replica primaria di origine (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));	 

Successivamente, per aggiungere la replica secondaria (OnPremNode2) al gruppo di disponibilità (OnPremAg).

Per aggiungere il gruppo di disponibilità, eseguire questo script nella replica secondaria di origine:

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

Creare infine il listener per il gruppo di disponibilità del server di inoltro globale (OnPremAG).

Per creare il listener, eseguire questo script nella replica primaria di origine:

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

Creare un gruppo di disponibilità di destinazione

È anche necessario creare un gruppo di disponibilità anche nelle macchine virtuali di destinazione SQL Server.

Se si dispone già di un gruppo di disponibilità configurato tra le istanze di SQL Server in Azure, ignorare questa sezione.

Usare Transact-SQL (T-SQL) per creare un gruppo di disponibilità (AzureAG) nelle istanze di SQL Server di destinazione (SQLVM1 e SQLVM2).

Per creare il gruppo di disponibilità nella destinazione, eseguire questo script nella replica primaria di destinazione:

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 

Aggiungere quindi la replica secondaria di destinazione (SQLVM2) al gruppo di disponibilità (AzureAG).

Eseguire questo script nella replica secondaria di destinazione:

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

Creare infine un listener (AzureAG_LST) per il gruppo di disponibilità di destinazione (AzureAG). Se sono state distribuite le macchine virtuali SQL Server in più subnet, creare il listener usando Transact-SQL. Se le macchine virtuali SQL Server sono state distribuite in una singola subnet, configurare un Azure Load Balancer o un nome di rete distribuito per il listener.

Per creare il listener, eseguire questo script nella replica primaria del gruppo di disponibilità in 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

Creare un gruppo di disponibilità distribuito

Dopo aver configurato i gruppi di disponibilità di origine (OnPremAG) e target (AzureAG), creare il gruppo di disponibilità distribuito per estendere entrambi i singoli gruppi di disponibilità.

Usare Transact-SQL nell'origine SQL Server primario globale (OnPremNode1) e ag (OnPremAG) per creare il gruppo di disponibilità distribuito (DAG).

Per creare il gruppo di disponibilità distribuito nell'origine, eseguire questo script nel database primario globale di origine:

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

La modalità di seeding è impostata su AUTOMATIC come versione di SQL Server nella destinazione e l'origine è la stessa. Se la destinazione SQL Server è una versione superiore o se il server di inoltro globale ha nomi di istanza diversi, creare il gruppo di disponibilità distribuito e aggiungere il gruppo di disponibilità secondario al gruppo di disponibilità distribuito con SEEDING_MODE impostato su MANUAL. Ripristinare quindi manualmente i database dall'origine all'istanza di SQL Server di destinazione. Esaminare le versioni di aggiornamento durante la migrazione per altre informazioni.

Dopo aver creato il gruppo di disponibilità distribuito, aggiungere il gruppo di disponibilità di destinazione (AzureAG) all'istanza del server di inoltro di destinazione (SQLVM1) al gruppo di disponibilità distribuito (DAG).

Per aggiungere il gruppo di disponibilità di destinazione al gruppo di disponibilità distribuito, eseguire questo script nel server di inoltro di destinazione:

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 è necessario annullare, sospendere o ritardare la sincronizzazione tra i gruppi di disponibilità di origine e di destinazione,ad esempio, i problemi di prestazioni, eseguire questo script nell'istanza primaria globale di origine (OnPremNode1):

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

Per altre informazioni, vedere Annullare il seeding automatico per l'inoltro.

Passaggi successivi

Dopo aver creato il gruppo di disponibilità distribuito, è possibile completare la migrazione.