Condividi tramite


Eseguire la migrazione con un gruppo di disponibilità distribuito

Usare un gruppo di disponibilità distribuito per eseguire la migrazione dei database in un gruppo di disponibilità AlwaysOn mantenendo al contempo la disponibilità elevata e il ripristino di emergenza (HADR) dopo la migrazione in SQL Server in azure Macchine virtuali (VM).

Dopo aver convalidato le istanze di SQL Server di origine soddisfano i prerequisiti, seguire i passaggi descritti in questo articolo per creare una disponibilità distribuita tra il gruppo di disponibilità esistente e il gruppo di disponibilità di destinazione in SQL Server nelle macchine virtuali 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 di database da un'istanza autonoma di 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 di SQL Server in Azure. È possibile farlo usando il portale di Azure, Azure PowerShell o il modello di ARM.

Assicurarsi di configurare le macchine virtuali di 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 questo requisito. È consigliabile eseguire la distribuzione con più subnet. Per altre informazioni, vedere Connettività

Per semplicità, aggiungere le macchine virtuali di SQL Server di destinazione allo stesso dominio delle istanze di SQL Server di origine. In caso contrario, aggiungere la macchina virtuale di SQL Server di destinazione 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 il database primario globale (origine) del dag deve corrispondere al nome dell'istanza del server d'inoltro (destinazione) del dag. Se c’è una mancata corrispondenza del nome di istanza tra il server primario globale e il server d'inoltro, è necessario usare il seeding manuale per creare il dag e aggiungere manualmente eventuali file di database aggiuntivi in futuro.

Questo articolo usa i parametri di esempio seguenti:

  • Nome database: Adventureworks2022
  • Nomi computer di origine: OnPremNode1 (primario globale in DAG), OnPremNode2
  • Nome dell'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
  • Nome della macchina virtuale di SQL Server di destinazione SQLVM1 (server d'inoltro in DAG), SQLVM2
  • SQL Server di destinazione nel nome dell'istanza di VM 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 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 istanze di SQL Server di destinazione (SQLVM1, SQLVM2).

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

Per creare gli endpoint, eseguire questo script T-SQL nei server di origine e 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 far parte automaticamente del gruppo sysadmin e non disporre dell'autorizzazione di connessione. Per concedere manualmente all'account del servizio SQL Server l'autorizzazione di connessione 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 di esempio Adventureworks2022.

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 [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)
);

Creare un join della 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 d'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à destinazione

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

Se è già stato configurato un gruppo di disponibilità 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 and 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

Infine, creare un listener (AzureAG_LST) per il gruppo di disponibilità di destinazione (AzureAG). Se le macchine virtuali di SQL Server sono state distribuite in più subnet, creare il listener usando Transact-SQL. Se le macchine virtuali di SQL Server sono state distribuite in una singola subnet, configurare un servizio di bilanciamento del carico di Azure o un nome di rete distribuita 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_secondary_ip>', N'<primary_mask>'),
        (N'<secondary replica_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 di destinazione (AzureAG), creare il gruppo di disponibilità distribuito per estendersi su entrambi i singoli gruppi di disponibilità.

Usare Transact-SQL nell'istanza primaria globale di SQL Server di origine (OnPremNode1)e nel gruppo di disponibilità (OnPremAG) di origine 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 di SQL Server è una versione successiva o se il server primario globale e il server d'inoltro hanno 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. Per ulteriori informazioni, vedere l'aggiornamento delle versioni durante la migrazione .

Dopo aver creato il gruppo di disponibilità distribuito, aggiungere il gruppo di disponibilità di destinazione (AzureAG) nell'istanza del server d'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 d'inoltro di destinazione:

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 è necessario annullare, sospendere o ritardare la sincronizzazione tra i gruppi di disponibilità di origine e di destinazione, ad esempio 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 al server d'inoltro.