Teilen über


Verwenden von verteilten AGs zum Migrieren der Verfügbarkeitsgruppe

Verwenden sie eine verteilte Verfügbarkeitsgruppe (AG), um Datenbanken in einer Always On-Verfügbarkeitsgruppe zu migrieren, während die Verfügbarkeit und Notfallwiederherstellung (Disaster Recovery, HADR) nach der Migration auf Ihrem SQL Server auf Azure Virtual Machines (VMs) erhalten bleibt.

Nachdem Sie Ihre Quell-SQL Server-Instanzen überprüft haben, die die Voraussetzungen erfüllen, führen Sie die Schritte in diesem Artikel aus, um eine verteilte Verfügbarkeit zwischen Ihrer vorhandenen Verfügbarkeitsgruppe und Ihrer Zielverfügbarkeitsgruppe auf Ihrem SQL Server in Azure-VMs zu erstellen.

Dieser Artikel ist für Datenbanken bestimmt, die an einer Verfügbarkeitsgruppe teilnehmen, und erfordert einen Windows Server-Failovercluster (WSFC) und einen Verfügbarkeitsgruppenlistener. Es ist auch möglich, Datenbanken aus einer eigenständigen SQL Server-Instanz zu migrieren.

Diagramm: Erläuterung der Migration von Verfügbarkeitsgruppen anhand einer verteilten Verfügbarkeitsgruppe.

Ersteinrichtung

Der erste Schritt besteht im Erstellen Ihrer SQL Server-VMs in Azure. Hierfür können Sie das Azure-Portal, Azure PowerShell oder eine ARM-Vorlage verwenden.

Stellen Sie sicher, dass Ihre SQL Server-VMs entsprechend den Voraussetzungen konfiguriert sind. Wählen Sie zwischen einer Bereitstellung mit einem einzelnen Subnetz, bei der ein Azure Load Balancer oder ein verteilter Netzwerkname erforderlich ist, um den Datenverkehr an Ihren Verfügbarkeitsgruppenlistener weiterzuleiten, und einer Bereitstellung mit mehreren Subnetzen, die keine solche Anforderung vorgibt. Die Bereitstellung mit mehreren Subnetzen wird empfohlen. Weitere Informationen finden Sie unter Konnektivität.

Der Einfachheit halber verbinden Sie Ihre SQL Server Ziel-VMs mit derselben Domäne wie Ihre SQL Server Quelle-Instanzen. Andernfalls verbinden Sie Ihre SQL Server Ziel-VM mit einer Domäne, die mit der Domäne Ihrer SQL Server Quell-Instanz zusammengeschlossen ist.

Um das automatische Seeding zur Erstellung Ihrer verteilte Verfügbarkeitsgruppe (DAG) zu verwenden, muss der Instanzname für die globale Primärinstanz (Quelle) der DAG mit dem Instanznamen des Forwarders (Ziel) der DAG übereinstimmen. Wenn ein Instanzname nicht mit dem globalen primären und dem Weitergeleiteten in Konflikt steht, müssen Sie das DAG mithilfe des manuellen Startwerts erstellen und zukünftig alle weiteren Datenbankdateien manuell hinzufügen.

In diesem Artikel werden die folgenden Beispielparameter verwendet:

  • Datenbankname: Adventureworks2022
  • Quellcomputernamen: OnPremNode1 (global primär in DAG), OnPremNode2
  • Namen der SQL Server-Quellinstanz MSSQLSERVER, MSSQLSERVER
  • Name der Quell-Verfügbarkeitsgruppe: OnPremAg
  • Listenername der Quell-Verfügbarkeitsgruppe: OnPremAG_LST
  • Namen der SQL Server Ziel-VM: SQLVM1 (Forwarder in DAG), SQLVM2
  • Namen des SQL Ziel-Servers auf der Azure VM-Instanz: MSSQLSERVER, MSSQLSERVER
  • Name der Ziel-Verfügbarkeitsgruppe: AzureAG
  • Listenername der Quell-Verfügbarkeitsgruppe: AzureAG_LST
  • Endpunkt Name: Hadr_endpoint
  • Name der verteilten Verfügbarkeitsgruppe: DAG
  • Domänenname: Contoso

Erstellen von Endpunkten

Verwenden Sie Transact-SQL (T-SQL), um Endpunkte sowohl für Ihre beiden Quellinstanzen (OnPremNode1, OnPremNode2) als auch für Ziel-SQL Server-Instanzen (SQLVM1, SQLVM2) zu erstellen.

Wenn Sie bereits eine Verfügbarkeitsgruppe für die Quellinstanzen konfiguriert haben, führen Sie dieses Skript nur für die beiden Zielinstanzen aus.

Um Ihre Endpunkte zu erstellen, führen Sie dieses T-SQL-Skript sowohl auf den Quell- als auch auf den Zielservern aus:

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

Domänenkonten haben automatisch Zugriff auf Endpunkte, aber Dienstkonten sind möglicherweise nicht automatisch Teil der sysadmin-Gruppe und verfügen möglicherweise nicht über die Berechtigung zum Verbinden. Führen Sie das folgende T-SQL-Skript auf beiden Servern aus, um dem SQL Server-Dienstkonto manuell eine Verbindungsberechtigung für den Endpunkt zu erteilen:

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

Quell-AG erstellen

Da es sich bei einer verteilten Verfügbarkeitsgruppe um eine spezielle Verfügbarkeitsgruppe handelt, die sich über zwei einzelne Verfügbarkeitsgruppen erstreckt, müssen Sie zuerst eine Verfügbarkeitsgruppe für die beiden SQL Server-Quellinstanzen erstellen.

Wenn Sie bereits über eine Verfügbarkeitsgruppe für Ihre Quellinstanzen verfügen, überspringen Sie diesen Abschnitt.

Verwenden Sie Transact-SQL (T-SQL), um eine Verfügbarkeitsgruppe (OnPremAG) zwischen Ihren beiden Quellinstanzen (OnPremNode1, OnPremNode2) für die Beispiel-Datenbank Adventureworks2022zu erstellen.

Um die Verfügbarkeitsgruppe für die Quellinstanzen zu erstellen, führen Sie dieses Skript für das primäre Replikat der Quelle (OnPremNode1) aus:

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

Verknüpfen Sie anschließend das sekundäre Replikat (OnPremNode2) mit der Verfügbarkeitsgruppe (OnPremAg).

Um der Verfügbarkeitsgruppe beizutreten, führen Sie dieses Skript auf dem sekundären Quellreplikat aus:

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

Erstellen Sie abschließend den Listener für Ihre Verfügbarkeitsgruppe der globalen Weiterleitung (OnPremAG).

Führen Sie zum Erstellen des Listeners dieses Skript für das primäre Quellreplikat aus:

USE [master]
GO

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

Ziel-AG erstellen

Sie müssen auch eine Verfügbarkeitsgruppe auf den SQL Server Ziel-VMs erstellen.

Wenn Sie bereits eine Verfügbarkeitsgruppe zwischen Ihren SQL Server Instanzen in Azure konfiguriert haben, überspringen Sie diesen Abschnitt.

Verwenden Sie Transact-SQL (T-SQL), um eine Verfügbarkeitsgruppe (AzureAG) auf den Ziel-SQL Server-Instanzen (SQLVM1 und SQLVM2) zu erstellen.

Um die Verfügbarkeitsgruppe für das Ziel zu erstellen, führen Sie dieses Skript für das primäre Zielreplikat aus:

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

Als Nächstes verbinden Sie das sekundäre Zielreplikat (SQLVM2) mit der Verfügbarkeitsgruppe (AzureAG).

Führen Sie dieses Skript für das sekundäre Zielreplikat aus:

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

Erstellen Sie abschließend einen Listener (AzureAG_LST) für die Zielverfügbarkeitsgruppe (AzureAG). Wenn Sie Ihre SQL Server-VMs in mehrere Subnetze bereitgestellt haben, erstellen Sie Ihren Listener mit Transact-SQL. Wenn Sie Ihre SQL Server-VM einem einzelnen Subnetz bereitgestellt haben, konfigurieren Sie entweder einen Azure Load Balancer oder einen verteilten Netzwerknamen für Ihren Listener.

Führen Sie zum Erstellen des Listeners dieses Skript für das primäre Replikat der Verfügbarkeitsgruppe in Azure aus.

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

Erstellen einer verteilten AG

Nachdem Sie Ihre Quell- (OnPremAG) und Zielverfügbarkeitsgruppen (AzureAG) konfiguriert haben, erstellen Sie Ihre verteilte Verfügbarkeitsgruppe, die beide individuellen Verfügbarkeitsgruppen umfasst.

Verwenden Sie Transact-SQL auf dem globalen primären Quell-SQL-Server (OnPremNode1) und AG (OnPremAG), um die verteilte Verfügbarkeitsgruppe (DAG) zu erstellen.

Um die verteilte AG für die Quelle zu erstellen, führen Sie dieses Skript für die globale Primärinstanz aus:

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

Hinweis

Der Seeding-Modus ist auf AUTOMATIC eingestellt, da die Version von SQL Server auf dem Ziel und der Quelle dieselbe ist. Wenn Ihr SQL Server-Ziel eine höhere Version ist oder wenn Ihr globaler Primärserver und der Forwarder unterschiedliche Instanznamen haben, erstellen Sie die verteilte AG und verbinden Sie die sekundäre AG mit der verteilten AG mit SEEDING_MODE auf MANUAL. Stellen Sie die Datenbanken dann manuell von der Quell- auf die Ziel-SQL Server-Instanz wieder her. Lesen Sie Versionsupgrades während der Migration für weitere Informationen.

Nachdem die verteilte AG erstellt wurde, verknüpfen Sie die Ziel-AG (AzureAG) auf der Ziel-Forwarderinstanz (SQLVM1) mit der verteilten AG (DAG).

Um die Ziel-AG mit der verteilten AG zu verknüpfen, führen Sie dieses Skript auf dem Ziel-Forwarder aus:

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

Wenn Sie die Synchronisierung zwischen der Quell- und der Zielverfügbarkeitsgruppe abbrechen, anhalten oder verzögern müssen (z. B. bei Leistungsproblemen), führen Sie dieses Skript auf der globalen primären Quellinstanz (OnPremNode1) aus:

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

Weitere Informationen finden Sie unter Automatisches Seeding an Forwarder abbrechen.