Delen via


Gebruik een gedistribueerde beschikbaarheidsgroep om een beschikbaarheidsgroep te migreren

Gebruik een gedistribueerde beschikbaarheidsgroep (AG) om databases te migreren in een Always On-beschikbaarheidsgroep en tegelijkertijd hoge beschikbaarheid en ondersteuning voor herstel na noodgevallen (HADR) te behouden na de migratie op uw SQL Server op Azure Virtual Machines (VM's).

Zodra u uw bron-SQL Server-exemplaren hebt gevalideerd aan de vereisten, volgt u de stappen in dit artikel om een gedistribueerde beschikbaarheid te maken tussen uw bestaande beschikbaarheidsgroep en uw doel beschikbaarheidsgroep op uw SQL Server op Azure-VM's.

Dit artikel is bedoeld voor databases die deelnemen aan een beschikbaarheidsgroep en vereist een Windows Server Failover Cluster (WSFC) en een listener voor beschikbaarheidsgroepen. Het is ook mogelijk om databases te migreren van een zelfstandig SQL Server-exemplaar.

Diagram waarin de migratie van beschikbaarheidsgroepen wordt uitgelegd met behulp van een gedistribueerde beschikbaarheidsgroep.

Eerste installatie

De eerste stap is het maken van uw SQL Server-VM's in Azure. U kunt dit doen met behulp van Azure Portal, Azure PowerShell of een ARM-sjabloon.

Zorg ervoor dat u uw SQL Server-VM's configureert volgens de vereisten. Kies tussen één subnetimplementatie, die afhankelijk is van een Azure Load Balancer- of gedistribueerde netwerknaam om verkeer te routeren naar de listener van uw beschikbaarheidsgroep of een implementatie met meerdere subnetten die niet over een dergelijke vereiste beschikt. De implementatie van meerdere subnetten wordt aanbevolen. Zie connectiviteit voor meer informatie.

Voor het gemak voegt u uw doel-SQL Server-VM's toe aan hetzelfde domein als uw bron-SQL Server-exemplaren. Anders voegt u uw doel-SQL Server-VM toe aan een domein dat is gefedereerd met het domein van uw bron-SQL Server-exemplaren.

Als u automatische seeding wilt gebruiken om uw gedistribueerde beschikbaarheidsgroep (DAG) te maken, moet de instantienaam voor de globale primaire (bron) van de DAG overeenkomen met de exemplaarnaam van de doorstuurserver (doel) van de DAG. Als er een exemplaarnaam niet overeenkomt tussen de globale primaire server en het doorstuursysteem, moet u handmatig seeding toepassen om de DAG te maken en in de toekomst handmatig aanvullende databasebestanden toevoegen.

In dit artikel worden de volgende voorbeeldparameters gebruikt:

  • Databasenaam: Adventureworks2022
  • Namen van broncomputers: OnPremNode1 (globale primaire in DAG), OnPremNode2
  • Namen van bron-SQL Server-exemplaren: MSSQLSERVER, MSSQLSERVER
  • Naam van bron beschikbaarheidsgroep: OnPremAg
  • Naam van listener voor bron beschikbaarheidsgroep: OnPremAG_LST
  • Namen van doel-SQL Server-VM's: SQLVM1 (forwarder in DAG), SQLVM2
  • Namen van doel-SQL Server op Azure VM-exemplaren: MSSQLSERVER, MSSQLSERVER
  • Naam van de doel beschikbaarheidsgroep: AzureAG
  • Naam van listener voor bron beschikbaarheidsgroep: AzureAG_LST
  • Eindpuntnaam: Hadr_endpoint
  • Naam van gedistribueerde beschikbaarheidsgroep: DAG
  • Domeinnaam: Contoso

Eindpunten maken

Gebruik Transact-SQL (T-SQL) om eindpunten te maken op zowel uw twee bronexemplaren (OnPremNode1, OnPremNode2) als doel-SQL Server-exemplaren (SQLVM1, SQLVM2).

Als u al een beschikbaarheidsgroep hebt geconfigureerd voor de bronexemplaren, voert u dit script alleen uit op de twee doelexemplaren.

Als u uw eindpunten wilt maken, voert u dit T-SQL-script uit op zowel bron- als doelservers:

CREATE ENDPOINT [Hadr_endpoint]
    STATE = STARTED
    AS TCP (
        LISTENER_PORT = 5022,
        LISTENER_IP = ALL
    )
    FOR DATABASE_MIRRORING (
        ROLE = ALL,
        AUTHENTICATION = WINDOWS NEGOTIATE,
        ENCRYPTION = REQUIRED ALGORITHM AES
    );
GO

Domeinaccounts hebben automatisch toegang tot eindpunten, maar serviceaccounts maken mogelijk niet automatisch deel uit van de sysadmin-groep en hebben mogelijk geen verbindingsmachtiging. Als u het SQL Server-serviceaccount handmatig verbinding wilt laten maken met het eindpunt, voert u het volgende T-SQL-script uit op beide servers:

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

Bron maken

Aangezien een gedistribueerde beschikbaarheidsgroep een speciale beschikbaarheidsgroep is die over twee afzonderlijke beschikbaarheidsgroepen bestaat, moet u eerst een beschikbaarheidsgroep maken op de twee SQL Server-exemplaren van de bron.

Als u al een beschikbaarheidsgroep op uw bronexemplaren hebt, kunt u deze sectie overslaan.

Gebruik Transact-SQL (T-SQL) om een beschikbaarheidsgroep (OnPremAG) te maken tussen uw twee bronexemplaren (OnPremNode1, OnPremNode2) voor de voorbeelddatabase Adventureworks2022 .

Als u de beschikbaarheidsgroep op de bronexemplaren wilt maken, voert u dit script uit op de primaire replica van de bron (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)
);

Vervolgens voegt u de secundaire replica (OnPremNode2) toe aan de beschikbaarheidsgroep (OnPremAg).

Als u lid wilt worden van de beschikbaarheidsgroep, voert u dit script uit op de secundaire bronreplica:

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

Maak ten slotte de listener aan voor de globale forwarder beschikbaarheidsgroep (OnPremAG).

Als u de listener wilt maken, voert u dit script uit op de primaire bronreplica:

USE [master]
GO

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

Maak doel-AG

U moet ook een beschikbaarheidsgroep maken op de doel-SQL Server-VM's.

Als u al een beschikbaarheidsgroep hebt geconfigureerd tussen uw SQL Server-exemplaren in Azure, slaat u deze sectie over.

Gebruik Transact-SQL (T-SQL) om een beschikbaarheidsgroep (AzureAG) te maken op de SQL Server-doelexemplaren (SQLVM1 en SQLVM2).

Als u de beschikbaarheidsgroep op het doel wilt maken, voert u dit script uit op de primaire doelreplica:

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

Voeg vervolgens de secundaire doelreplica (SQLVM2) toe aan de beschikbaarheidsgroep (AzureAG).

Voer dit script uit op de secundaire doelreplica:

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

Maak ten slotte een listener (AzureAG_LST) voor uw beschikbaarheidsgroep (AzureAG). Als u uw SQL Server-VM's hebt geïmplementeerd in meerdere subnetten, maakt u uw listener met behulp van Transact-SQL. Als u uw SQL Server-VM's hebt geïmplementeerd in één subnet, configureert u een Azure Load Balancer of een gedistribueerde netwerknaam voor uw listener.

Als u uw listener wilt maken, voert u dit script uit op de primaire replica van de beschikbaarheidsgroep 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

Gedistribueerde beschikbaarheidsgroep maken

Nadat u de beschikbaarheidsgroepen bron (OnPremAG) en doelAzureAG () hebt geconfigureerd, maakt u uw gedistribueerde beschikbaarheidsgroep om beide afzonderlijke beschikbaarheidsgroepen te omvatten.

Gebruik Transact-SQL op de globale primaire bron SQL Server (OnPremNode1) en AG (OnPremAG) om de gedistribueerde beschikbaarheidsgroep (DAG) te maken.

Als u de gedistribueerde beschikbaarheidsgroep op de bron wilt maken, voert u dit script uit op de globale primaire bron:

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

Opmerking

De seeding-modus is ingesteld op AUTOMATIC, aangezien de versie van SQL Server op zowel het doel als de bron hetzelfde is. Als uw SQL Server-doel een hogere versie is, of als uw globale primaire en doorstuurserver verschillende exemplaarnamen hebben, maakt u de gedistribueerde ag en voegt u de secundaire ag toe aan de gedistribueerde ag met SEEDING_MODE de waarde ingesteld op MANUAL. Herstel vervolgens uw databases handmatig van de bron naar het SQL Server-doelexemplaar. Bekijk de upgradeversies tijdens de migratie voor meer informatie.

Nadat uw gedistribueerde AG is gemaakt, voegt u de doel-AG (AzureAG) op het doelstuurexemplaar (SQLVM1) toe aan de gedistribueerde AG (DAG).

Als u de doelgroep-AG wilt koppelen aan de gedistribueerde AG, voert u dit script uit op de doel forwarder:

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

Als u synchronisatie tussen de bron- en doel beschikbaarheidsgroepen (zoals prestatieproblemen) wilt annuleren, onderbreken of vertragen, voert u dit script uit op het globale primaire bronexemplaren (OnPremNode1):

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

Bekijk voor meer informatie het stopzetten van automatische seeding naar de forwarder.