Bagikan melalui


Menggunakan AG terdistribusi untuk memigrasikan grup ketersediaan

Gunakan grup ketersediaan (AG) terdistribusi untuk memigrasikan database pada grup ketersediaan Always On selagi mempertahankan dukungan ketersediaan tinggi dan pemulihan bencana (HADR) pasca migrasi pada SQL Server Anda di Azure Virtual Machines (VM).

Setelah memvalidasi instans SQL Server sumber Anda memenuhi prasyarat, ikuti langkah-langkah dalam artikel ini untuk membuat ketersediaan terdistribusi antara grup ketersediaan yang ada, dan grup ketersediaan target di SQL Server Anda pada mesin virtual Azure.

Artikel ini ditujukan untuk database yang berpartisipasi dalam grup ketersediaan, dan memerlukan Kluster Failover Server Windows (WSFC) dan pendengar grup ketersediaan. Anda juga dapat memigrasikan database dari instans SQL Server mandiri.

Diagram yang menjelaskan migrasi grup ketersediaan menggunakan grup ketersediaan terdistribusi.

Penyiapan awal

Langkah pertama adalah membuat mesin virtual SQL Server Anda di Azure. Anda dapat melakukannya menggunakan portal Microsoft Azure, Azure PowerShell, atau templat ARM.

Pastikan untuk mengonfigurasi mesin virtual SQL Server Anda berdasarkan prasyarat. Pilih antara penyebaran subnet tunggal, yang bergantung pada Azure Load Balancer atau nama jaringan terdistribusi untuk merutekan lalu lintas ke pendengar grup ketersediaan Anda, atau penyebaran multi-subnet yang tidak memiliki persyaratan seperti itu. Penyebaran multi subnet disarankan. Untuk mempelajari selengkapnya, lihat konektivitas.

Untuk memudahkan, gabungkan mesin virtual SQL Server target ke domain yang sama dengan instans SQL Server sumber Anda. Jika tidak, gabungkan mesin virtual SQL Server target ke domain yang digabungkan dengan domain instans SQL Server sumber Anda.

Untuk menggunakan seeding otomatis untuk membuat grup ketersediaan terdistribusi (DAG), nama instans untuk primer global (sumber) DAG harus sesuai dengan nama instans penerus (target) DAG. Jika ada ketidakcocokan nama instans antara primer global dan penerus, maka Anda harus menggunakan seeding manual untuk membuat DAG, dan menambahkan file database tambahan secara manual di masa mendatang.

Artikel ini menggunakan parameter contoh berikut:

  • Nama database: Adventureworks2022
  • Nama komputer sumber : OnPremNode1 (primer global di DAG), OnPremNode2
  • Nama instans SQL Server sumber: MSSQLSERVER, MSSQLSERVER
  • Nama grup ketersediaan sumber : OnPremAg
  • Nama pendengar grup ketersediaan sumber: OnPremAG_LST
  • Nama komputer virtual SQL Server target: SQLVM1 (penerus di DAG), SQLVM2
  • Targetkan SQL Server pada nama instans Azure VM: MSSQLSERVER, MSSQLSERVER
  • Nama grup ketersediaan target: AzureAG
  • Nama pendengar grup ketersediaan sumber: AzureAG_LST
  • Nama titik akhir: Hadr_endpoint
  • Nama grup ketersediaan terdistribusi: DAG
  • Nama domain: Contoso

Buat titik akhir

Gunakan Transact-SQL (T-SQL) untuk membuat titik akhir pada kedua instans sumber Anda (OnPremNode1, OnPremNode2) dan instans SQL Server target (SQLVM1, SQLVM2).

Jika Anda sudah memiliki grup ketersediaan yang dikonfigurasi pada instans sumber, hanya jalankan skrip ini di kedua instans target tersebut.

Untuk membuat titik akhir Anda, jalankan skrip T-SQL inia pada server sumber dan target:

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

Akun domain secara otomatis memiliki akses ke titik akhir, tetapi akun layanan mungkin tidak secara otomatis menjadi bagian dari grup sysadmin dan mungkin tidak memiliki izin koneksi. Untuk memberikan akun layanan SQL Server izin menyambungkan ke titik akhir, jalankan skrip T-SQL berikut di kedua server:

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

Membuat AG sumber

Karena grup ketersediaan terdistribusi adalah grup ketersediaan khusus yang mencakup dua grup ketersediaan individu, pertama Anda perlu membuat grup ketersediaan di kedua instans SQL Server sumber tersebut.

Jika Anda sudah memiliki grup ketersediaan pada instans sumber Anda, lewati bagian ini.

Gunakan Transact-SQL (T-SQL) untuk membuat grup ketersediaan (OnPremAG) di antara dua instans sumber Anda (OnPremNode1, OnPremNode2) untuk database contoh Adventureworks2022 .

Untuk membuat grup ketersediaan pada instans sumber, jalankan skrip ini pada replika utama sumber (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)
);

Selanjutnya, untuk bergabung dengan replika sekunder (OnPremNode2) ke grup ketersediaan (OnPremAg).

Untuk menggabungkan grup ketersediaan, jalankan skrip ini di replika sekunder sumber:

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

Terakhir, buat listener untuk grup ketersediaan penerus global Anda (OnPremAG).

Untuk membuat pendengar, jalankan skrip ini di replika utama sumber:

USE [master]
GO

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

Membuat target AG

Anda juga harus membuat grup ketersediaan di mesin virtual SQL Server target.

Jika Anda sudah memiliki grup ketersediaan yang dikonfigurasi di antara instans SQL Server Anda di Azure, lewati bagian ini.

Gunakan Transact-SQL (T-SQL) untuk membuat grup ketersediaan (AzureAG) pada instans SQL Server target (SQLVM1 dan SQLVM2).

Untuk membuat grup ketersediaan di target, jalankan skrip ini di replika utama target:

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

Selanjutnya, gabungkan replika sekunder target (SQLVM2) ke grup ketersediaan (AzureAG).

Jalankan skrip ini di replika sekunder target:

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

Terakhir, buat listener (AzureAG_LST) untuk grup ketersediaan target Anda (AzureAG). Jika Anda menyebarkan mesin virtual SQL Server ke beberapa subnet, buat pendengar menggunakan Transact-SQL. Jika Anda menyebarkan mesin virtual SQL Server ke subnet tunggal, konfigurasikan Azure Load Balancer,atau nama jaringan terdistribusi untuk pendengar Anda.

Untuk membuat pendengar Anda, jalankan skrip ini di replika utama grup ketersediaan di 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

Membuat AG terdistribusi

Setelah grup ketersediaan sumber (OnPremAG) dan target (AzureAG) Anda dikonfigurasi, buat grup ketersediaan terdistribusi Anda untuk menjangkau kedua grup ketersediaan individual.

Gunakan Transact-SQL pada sumber SQL Server global primer (OnPremNode1) dan AG (OnPremAG) untuk membuat grup ketersediaan terdistribusi (DAG).

Untuk membuat AG terdistribusi di sumber, jalankan skrip ini di primer global sumber:

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

Catatan

Mode seeding diatur ke AUTOMATIC karena versi SQL Server pada target dan sumber sama. Jika target SQL Server Anda adalah versi yang lebih tinggi, atau jika primer dan penerus global Anda memiliki nama instans yang berbeda, buat ag terdistribusi, dan gabungkan AG sekunder ke ag terdistribusi dengan SEEDING_MODE diatur ke MANUAL. Kemudian, pulihkan database Anda secara manual dari sumber ke instans SQL Server target. Tinjau peningkatan versi selama migrasi untuk mempelajari lebih lanjut.

Setelah AG terdistribusi Anda dibuat, gabungkan target AG (AzureAG) pada instans penerus target (SQLVM1) ke AG terdistribusi (DAG).

Untuk menggabungkan AG target ke AG terdistribusi, jalankan skrip ini pada penerus target:

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

Jika Anda perlu membatalkan, menjeda, atau menunda sinkronisasi antara grup ketersediaan sumber dan target (seperti, misalnya, masalah performa), jalankan skrip ini pada instans utama global sumber (OnPremNode1):

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

Untuk mempelajari lebih lanjut, tinjau membatalkan seeding otomatis ke penerus.