Tutorial: Mengonfigurasi replikasi transaksional antara Azure SQL Managed Instance dan SQL Server

Aplikasi ke:Azure SQL Managed Instance

Replikasi transaksional memungkinkan Anda mereplikasi data dari satu database ke database lain yang dihosting di SQL Server atau Azure SQL Managed Instance. SQL Managed Instance dapat menjadi penerbit, distributor, atau pelanggan dalam topologi replikasi. Lihat konfigurasi replikasi transaksional untuk konfigurasi yang tersedia.

Dalam tutorial ini, Anda akan mempelajari cara:

  • Mengonfigurasi instans terkelola SQL sebagai penerbit replikasi.
  • Konfigurasikan instans terkelola SQL sebagai distributor replikasi.
  • Konfigurasikan SQL Server sebagai pelanggan.

Diagram memperlihatkan replikasi antara penerbit instans terkelola SQL, distributor instans terkelola SQL, dan pelanggan SQL Server.

Tutorial ini ditujukan untuk audiens berpengalaman dan mengasumsikan pengguna terbiasa menyebarkan dan menyambungkan ke instans terkelola SQL dan SQL Server VM dalam Azure.

Catatan

Artikel ini menjelaskan penggunaan replicasi transaksi dalam Azure SQL Managed Instance. Ini tidak terkait dengan grup failover, fitur Azure SQL Managed Instance yang memungkinkan Anda membuat replika instans individual yang dapat dibaca lengkap. Ada pertimbangan tambahan saat mengonfigurasi replikasi transaksional dengan grup failover.

Prasyarat

Untuk menyelesaikan tutorial ini, pastikan prasyarat berikut dipenuhi:

Nama dan pengaturan jaringan yang diperlukan

Tutorial ini menggunakan nama dan pengaturan sumber daya berikut:

Sumber Daya Nama Catatan
Instans Terkelola SQL Publisher sql-mi-publisher Menambahkan karakter acak untuk keunikan
Penerbit jaringan virtual vnet-sql-mi-publisher Menghosting instans penerbit
Instans terkelola distributor SQL sql-mi-distributor Harus berada di VNet yang sama dengan penerbit
SQL Server VM (pelanggan) sql-vm-subscriber Gunakan versi SQL Server yang didukung sesuai matriks supportabilitas
Jaringan virtual pelanggan berlangganan sql-vm-subscriber-vnet Memerlukan peering jaringan virtual ke jaringan virtual penerbit
zona Private DNS repldns.com Nama acak untuk perutean DNS
Port yang diperlukan 445 (SMB), 1433 (SQL) Harus terbuka pada firewall Azure Firewall dan Windows

Membuat grup sumber daya

Gunakan cuplikan kode PowerShell berikut untuk membuat grup sumber daya baru.

Atur variabel Anda:

$ResourceGroupName = "SQLMI-Repl"
$Location = "East US 2"

Buat grup sumber daya:

New-AzResourceGroup -Name $ResourceGroupName -Location $Location

Verifikasi bahwa grup sumber daya telah dibuat:

Get-AzResourceGroup -Name $ResourceGroupName | Select-Object ResourceGroupName, Location

Membuat dua instans terkelola SQL

Buat dua instans terkelola SQL dalam grup sumber daya baru ini menggunakan portal Azure.

  • Nama instans terkelola penerbit SQL harus sql-mi-publisher (bersama dengan beberapa karakter untuk pengacakan), dan nama jaringan virtual harus vnet-sql-mi-publisher.

  • Nama instans SQL terkelola distributor harus sql-mi-distributor (bersama dengan beberapa karakter untuk pengacakan), dan harus berada di dalam jaringan virtual yang sama dengan instans SQL terkelola penerbit.

    Cuplikan layar memperlihatkan penggunaan penerbit VNet untuk distributor tersebut.

Untuk informasi selengkapnya tentang membuat instans terkelola SQL, lihat Quickstart: Membuat Azure SQL Managed Instance.

Catatan

Untuk kesederhanaan, tutorial ini menempatkan instans terkelola SQL distributor dalam jaringan virtual yang sama dengan penerbit. Namun, Anda dapat membuat distributor di jaringan virtual terpisah dengan peering VNet yang sesuai.

Membuat VM SQL Server

Buat komputer virtual SQL Server menggunakan portal Azure. Komputer virtual SQL Server harus memiliki karakteristik berikut:

  • Nama: sql-vm-subscriber
  • Gambar: versi SQL Server yang mendukung replikasi transaksional dengan Azure SQL Managed Instance, sesuai dengan matriks dukungan
  • Grup sumber daya: sama dengan instans terkelola SQL
  • Jaringan virtual: sql-vm-subscriber-vnet

Untuk informasi selengkapnya tentang menyebarkan VM SQL Server ke Azure, lihat Quickstart: Membuat SQL Server pada komputer virtual Windows di portal Azure.

Mengonfigurasi peering VNet

Konfigurasikan peering VNet untuk mengaktifkan komunikasi antara jaringan virtual dari dua instans terkelola SQL, dan jaringan virtual SQL Server.

Atur variabel Anda:

$SubscriptionId = '<SubscriptionID>'
$resourceGroup = 'SQLMI-Repl'
$pubvNet = 'sql-mi-publisher-vnet'
$subvNet = 'sql-vm-subscriber-vnet'
$pubsubName = 'Pub-to-Sub-Peer'
$subpubName = 'Sub-to-Pub-Peer'

Ambil jaringan virtual:

$virtualNetwork1 = Get-AzVirtualNetwork -ResourceGroupName $resourceGroup -Name $pubvNet
$virtualNetwork2 = Get-AzVirtualNetwork -ResourceGroupName $resourceGroup -Name $subvNet

Konfigurasikan peering VNet dari penerbit ke pelanggan:

Add-AzVirtualNetworkPeering `
  -Name $pubsubName `
  -VirtualNetwork $virtualNetwork1 `
  -RemoteVirtualNetworkId $virtualNetwork2.Id

Konfigurasikan peering VNet dari pelanggan ke penerbit:

Add-AzVirtualNetworkPeering `
  -Name $subpubName `
  -VirtualNetwork $virtualNetwork2 `
  -RemoteVirtualNetworkId $virtualNetwork1.Id

Periksa status peering pada VNet penerbit (harus mengembalikan Connected):

Get-AzVirtualNetworkPeering -ResourceGroupName $resourceGroup -VirtualNetworkName $pubvNet | Select-Object PeeringState

Verifikasi status peering di VNet pelanggan (seharusnya mengembalikan Connected):

Get-AzVirtualNetworkPeering -ResourceGroupName $resourceGroup -VirtualNetworkName $subvNet | Select-Object PeeringState

Setelah peering VNet dibuat, uji konektivitas dengan meluncurkan SQL Server Management Studio (SSMS) pada host SQL Server dan menyambungkan ke kedua instans terkelola SQL. Untuk informasi selengkapnya tentang menyambungkan ke SQL managed instance menggunakan SSMS, lihat Menggunakan SSMS untuk menyambungkan ke SQL Managed Instance.

Cuplikan layar memperlihatkan cara menguji konektivitas ke instans terkelola SQL.

Membuat zona DNS privat

Zona DNS privat memungkinkan perutean DNS antara instans terkelola SQL dan SQL Server.

Membuat zona privat

  1. Masuk ke portal Azure.

  2. Pilih Buat sumber daya untuk membuat sumber daya Azure baru.

  3. Cari private dns zone di Azure Marketplace.

  4. Pilih sumber daya zona DNS pribadi yang dipublikasikan oleh Microsoft, lalu pilih Buat untuk membuat zona DNS.

  5. Pilih langganan dan grup sumber daya dari daftar dropdown.

  6. Berikan nama acak untuk zona DNS Anda, seperti repldns.com.

    Screenshot memperlihatkan buat zona DNS privat di portal Azure.

  7. Pilih Periksa + Buat. Tinjau parameter untuk zona DNS privat Anda, lalu pilih Buat untuk membuat sumber daya Anda.

Membuat rekaman A

  1. Buka zona Private DNS baru Anda dan pilih Ikhtisar.

  2. Pilih + set rekaman untuk membuat rekaman A baru.

  3. Berikan nama VM SQL Server Anda serta alamat IP internal privat.

    Cuplikan layar memperlihatkan cara mengonfigurasi rekaman A.

  4. Pilih OK untuk membuat rekaman A.

  1. Buka zona Private DNS baru Anda dan pilih Tautan jaringan virtual.

  2. Pilih + Tambah.

  3. Berikan nama untuk tautan, seperti Pub-link.

  4. Pilih langganan Anda dari daftar dropdown, lalu pilih jaringan virtual untuk instance SQL terkelola penerbit Anda.

  5. Centang kotak di samping Aktifkan pendaftaran otomatis.

    Cuplikan layar memperlihatkan cara membuat tautan VNet.

  6. Pilih OK untuk menautkan jaringan virtual Anda.

  7. Ulangi langkah-langkah ini guna menambahkan tautan untuk jaringan virtual pelanggan, dengan nama seperti Sub-link.

Membuat akun penyimpanan Azure

Buat akun penyimpanan Azure untuk direktori kerja, lalu buat berbagi file dalam akun penyimpanan.

Nilai konfigurasi penyimpanan

Anda memerlukan nilai berikut saat mengonfigurasi distribusi:

  • Format jalur direktori kerja: \\<storage-account-name>.file.core.windows.net\<file-share-name>
  • Format string koneksi penyimpanan: DefaultEndpointsProtocol=https;AccountName=<Storage-Account-Name>;AccountKey=<key>;EndpointSuffix=core.windows.net

Penting

Gunakan hanya backslash (\) pada jalur direktori kerja. Garis miring (/) menyebabkan kesalahan koneksi.

Contoh nilai yang digunakan dalam tutorial ini:

Pengaturan Contoh nilai
Direktori kerja \\replstorage.file.core.windows.net\replshare
Rangkaian koneksi DefaultEndpointsProtocol=https;AccountName=replstorage;AccountKey=123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ==;EndpointSuffix=core.windows.net

Untuk informasi selengkapnya, lihat Mengelola kunci akses akun penyimpanan.

Membuat basis data

Buat database baru pada instans terkelola SQL penerbit. Untuk melakukannya, ikuti langkah-langkah berikut:

  1. Luncurkan SQL Server Management Studio di SQL Server.
  2. Sambungkan ke SQL managed instance penerbit (sql-mi-publisher).
  3. Buka jendela Kueri Baru , dan jalankan kueri T-SQL berikut.

Hilangkan database jika ada dan buat database baru:

USE [master];
GO

IF EXISTS (SELECT * FROM sys.sysdatabases WHERE name = 'ReplTutorial')
BEGIN
    DROP DATABASE ReplTutorial;
END
GO

CREATE DATABASE [ReplTutorial];
GO

Buat tabel pengujian replikasi:

USE [ReplTutorial];
GO

CREATE TABLE ReplTest (
   ID INT NOT NULL PRIMARY KEY,
   c1 VARCHAR(100) NOT NULL,
   dt1 DATETIME NOT NULL DEFAULT getdate()
);
GO

Sisipkan data sampel:

USE [ReplTutorial];
GO

INSERT INTO ReplTest (ID, c1) VALUES (6, 'pub');
INSERT INTO ReplTest (ID, c1) VALUES (2, 'pub');
INSERT INTO ReplTest (ID, c1) VALUES (3, 'pub');
INSERT INTO ReplTest (ID, c1) VALUES (4, 'pub');
INSERT INTO ReplTest (ID, c1) VALUES (5, 'pub');
GO

Verifikasi bahwa data telah disisipkan:

SELECT * FROM ReplTest;
GO

Output yang diharapkan: 5 baris dengan ID 2, 3, 4, 5, dan 6.

Mengonfigurasi distribusi

Setelah konektivitas dibuat dan Anda memiliki database sampel, Anda dapat mengonfigurasi distribusi pada instans terkelola SQL distributor Anda (sql-mi-distributor).

Parameter konfigurasi distribusi

Kumpulkan nilai berikut sebelum mengonfigurasi distribusi:

Pengaturan Description Example
Nama Distributor DNS FQDN dari instans distributor sql-mi-distributor.b6bf57.database.windows.net
Nama DNS Penerbit FQDN instans penerbit sql-mi-publisher.b6bf57.database.windows.net
@working_directory Azure Files jalur berbagi (gunakan garis miring terbelakang saja) \\replstorage.file.core.windows.net\replshare
@storage_connection_string String koneksi akun penyimpanan DefaultEndpointsProtocol=https;AccountName=replstorage;...
@security_mode Mode autentikasi (0 = Autentikasi SQL) 0
@login / @password Kredensial masuk SQL azureuser

Mengonfigurasi instance distributor

  1. Luncurkan SQL Server Management Studio di SQL Server.
  2. Sambungkan ke instans distributor SQL terkelola (sql-mi-distributor).
  3. Buka jendela Kueri Baru dan jalankan perintah berikut.

Tambahkan distributor:

EXECUTE sp_adddistributor
    @distributor = 'sql-mi-distributor.b6bf57.database.windows.net',
    @password = '<distributor_admin_password>';

Buat database distribusi:

EXECUTE sp_adddistributiondb @database = N'distribution';

Verifikasi bahwa database distribusi telah dibuat:

SELECT name FROM sys.databases WHERE name = 'distribution';

Tambahkan penerbit ke distributor:

EXECUTE sp_adddistpublisher
    @publisher = 'sql-mi-publisher.b6bf57.database.windows.net',
    @distribution_db = N'distribution',
    @security_mode = 0,
    @login = N'azureuser',
    @password = N'<publisher_password>',
    @working_directory = N'\\replstorage.file.core.windows.net\replshare',
    @storage_connection_string = N'DefaultEndpointsProtocol=https;AccountName=replstorage;AccountKey=123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ==;EndpointSuffix=core.windows.net';

Catatan

Hanya gunakan garis miring terbalik (\) untuk parameter @working_directory. Garis miring (/) menyebabkan kesalahan koneksi.

Mendaftarkan distributor di penerbit

  1. Sambungkan ke SQL managed instance penerbit (sql-mi-publisher).
  2. Buka jendela Kueri Baru dan jalankan perintah berikut untuk mendaftarkan distributor:
USE master;
GO

EXECUTE sys.sp_adddistributor
    @distributor = 'sql-mi-distributor.b6bf57.database.windows.net',
    @password = '<distributor_admin_password>';

Verifikasi bahwa distributor terdaftar:

SELECT * FROM sys.servers WHERE is_distributor = 1;

Membuat publikasi

Setelah distribusi dikonfigurasi, Anda dapat membuat publikasi. Untuk melakukannya, ikuti langkah-langkah berikut:

  1. Luncurkan SQL Server Management Studio di SQL Server.

  2. Sambungkan ke SQL managed instance penerbit (sql-mi-publisher).

  3. Di Object Explorer, perluas node Replication dan klik kanan folder Local Publication. Pilih Publikasi Baru....

  4. Pilih Berikutnya untuk berpindah melewati halaman selamat datang.

  5. Pada halaman Database Publikasi, pilih database ReplTutorial yang Anda buat sebelumnya. Pilih Selanjutnya.

  6. Pada halaman Jenis publikasi, pilih Publikasi transaksional. Pilih Selanjutnya.

  7. Pada halaman Artikel, centang kotak di samping Tabel. Pilih Selanjutnya.

  8. Pada halaman Filter Baris Tabel, pilih Berikutnya tanpa menambahkan filter apa pun.

  9. Pada halaman Snapshot Agent, centang kotak di samping Buat rekam jepret segera dan jaga agar rekam jepret tetap tersedia untuk menginisialisasi langganan. Pilih Selanjutnya.

  10. Pada halaman Agent Security, pilih pengaturan keamanan ... . Berikan kredensial masuk SQL Server yang akan digunakan untuk Snapshot Agent dan untuk menyambungkan ke penerbit. Pilih OK untuk menutup halaman Snapshot Agent Keamanan. Pilih Selanjutnya.

    Screenshot yang menunjukkan cara mengonfigurasi keamanan Agent Snapshot.

  11. Pada halaman Tindakan Wizard, pilih Buat publikasi (opsional) pilih untuk Membuat file skrip dengan langkah-langkah untuk membuat publikasi jika Anda ingin menyimpan skrip ini untuk nanti.

  12. Pada halaman Selesaikan Wizard , beri nama publikasi ReplTestAnda, dan pilih Berikutnya untuk membuat publikasi Anda.

  13. Setelah publikasi Anda dibuat, refresh simpul Replication di Object Explorer dan perluas Publikasi Lokal untuk melihat publikasi baru Anda.

Membuat langganan

Setelah publikasi dibuat, Anda bisa membuat langganan. Untuk melakukannya, ikuti langkah-langkah berikut:

  1. Luncurkan SQL Server Management Studio di SQL Server.
  2. Sambungkan ke SQL managed instance penerbit (sql-mi-publisher).
  3. Buka jendela Kueri Baru dan jalankan perintah Transact-SQL berikut. Gunakan nama DNS yang dikonfigurasi di zona DNS privat sebagai bagian dari nama pelanggan.

Parameter langganan

Pengaturan Nilai Description
@subscriber sql-vm-subscriber.repldns.com Nama DNS pelanggan (dari zona DNS privat)
@destination_db ReplSub Database untuk pelanggan
@subscription_type Push Distributor mendorong perubahan pada pelanggan
@sync_type automatic Sinkronisasi awal otomatis

Tambahkan langganan:

USE [ReplTutorial];
GO

EXEC sp_addsubscription
    @publication = N'ReplTest',
    @subscriber = N'sql-vm-subscriber.repldns.com',
    @destination_db = N'ReplSub',
    @subscription_type = N'Push',
    @sync_type = N'automatic',
    @article = N'all',
    @update_mode = N'read only',
    @subscriber_type = 0;

Tambahkan agen langganan push:

EXEC sp_addpushsubscription_agent
    @publication = N'ReplTest',
    @subscriber = N'sql-vm-subscriber.repldns.com',
    @subscriber_db = N'ReplSub',
    @job_login = N'azureuser',
    @job_password = '<Complex Password>',
    @subscriber_security_mode = 0,
    @subscriber_login = N'azureuser',
    @subscriber_password = '<Complex Password>',
    @dts_package_location = N'Distributor';
GO

Verifikasi bahwa langganan telah dibuat:

SELECT * FROM distribution.dbo.MSsubscriptions;

Menguji replikasi

Setelah replikasi dikonfigurasi, Anda dapat mengujinya dengan memasukkan item baru ke penerbit dan melihat perubahan menyebar ke pelanggan.

Menampilkan data awal pada pelanggan

Sambungkan ke pelanggan SQL Server dan jalankan kueri berikut:

USE ReplSub;
GO

SELECT * FROM dbo.ReplTest;

Output yang diharapkan: 5 baris dengan ID 2, 3, 4, 5, dan 6 (data awal dari penerbit).

Menyisipkan data baru pada penerbit

Sambungkan ke SQL instans terkelola penerbit (sql-mi-publisher) dan sisipkan baris baru:

USE ReplTutorial;
GO

INSERT INTO ReplTest (ID, c1) VALUES (15, 'pub');

Verifikasi sisipan pada penerbit:

SELECT * FROM ReplTest WHERE ID = 15;

Memverifikasi replikasi ke pelanggan

Setelah beberapa saat, sambungkan ke pelanggan dan verifikasi baris baru yang direplikasi:

USE ReplSub;
GO

SELECT * FROM dbo.ReplTest WHERE ID = 15;

Output yang diharapkan: 1 baris data dengan ID 15 dan nilai c1 'pub'.

Membersihkan sumber daya

  1. Navigasi ke grup sumber daya Anda di portal Azure.
  2. Pilih instans terkelola SQL, lalu pilih Hapus. Ketik yes dalam kotak teks untuk mengonfirmasi bahwa Anda ingin menghapus sumber daya, lalu pilih Hapus. Proses ini mungkin memakan waktu untuk diselesaikan di latar belakang, dan sampai selesai, Anda tidak akan dapat menghapus kluster virtual atau sumber daya dependen lainnya. Pantau penghapusan di tab Aktivitas untuk mengonfirmasi instans terkelola SQL Anda telah dihapus.
  3. Setelah instans terkelola SQL dihapus, hapus kluster virtual dengan memilihnya di grup sumber daya Anda, lalu pilih Hapus. Ketik yes dalam kotak teks untuk mengonfirmasi bahwa Anda ingin menghapus sumber daya, lalu pilih Hapus.
  4. Hapus sumber daya yang tersisa. Ketik yes dalam kotak teks untuk mengonfirmasi bahwa Anda ingin menghapus sumber daya, lalu pilih Hapus.
  5. Hapus grup sumber daya dengan memilih Hapus grup sumber daya, ketikkan nama grup myResourceGroupsumber daya , lalu pilih Hapus.

Kesalahan yang diketahui

Windows login tidak didukung

Exception Message: Windows logins are not supported in this version of SQL Server.

Agen dikonfigurasi dengan login Windows dan perlu menggunakan login SQL Server sebagai gantinya. Gunakan halaman Agent Security properti Publication untuk mengubah kredensial masuk ke login SQL Server.

Gagal tersambung ke Azure Storage

Connecting to Azure Files Storage '\\replstorage.file.core.windows.net\replshare' Failed to connect to Azure Storage '' with OS error: 53.
2019-11-19 02:21:05.07 Obtained Azure Storage Connection String for replstorage
2019-11-19 02:21:05.07 Connecting to Azure Files Storage '\\replstorage.file.core.windows.net\replshare'
2019-11-19 02:21:31.21 Failed to connect to Azure Storage '' with OS error: 53.

Ini kemungkinan karena port 445 ditutup di firewall Azure, firewall Windows, atau keduanya.

Connecting to Azure Files Storage '\\replstorage.file.core.windows.net\replshare' Failed to connect to Azure Storage '' with OS error: 55.

Menggunakan garis miring alih-alih garis miring terbelakang di jalur file untuk berbagi file juga dapat menyebabkan kesalahan ini.

  • Ini dapat diterima: \\replstorage.file.core.windows.net\replshare
  • Ini dapat menyebabkan kesalahan OS 55: \\replstorage.file.core.windows.net/replshare

Tidak dapat tersambung ke Pengguna

The process could not connect to Subscriber 'SQL-VM-SUBSCRIBER
Could not open a connection to SQL Server [53].
A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections.

Solusi yang bisa dilakukan:

  • Pastikan porta 1433 terbuka.
  • Pastikan TCP/IP diaktifkan pada pelanggan.
  • Pastikan nama DNS digunakan saat membuat pelanggan.
  • Pastikan jaringan virtual Anda ditautkan dengan benar di zona DNS pribadi.
  • Pastikan A record Anda dikonfigurasi dengan benar.
  • Pastikan peering VNet Anda dikonfigurasi dengan benar.

Anda tidak dapat berlangganan ke publikasi mana pun

Saat Anda menambahkan langganan baru menggunakan wizard Langganan Baru , pada halaman Publikasi , Anda mungkin menemukan bahwa tidak ada database dan publikasi yang tercantum sebagai opsi yang tersedia, dan Anda mungkin melihat pesan kesalahan berikut:

There are no publications to which you can subscribe, either because this server has no publications or because you do not have sufficient privileges to access the publications.

Meskipun ada kemungkinan bahwa pesan kesalahan ini akurat, dan benar-benar tidak ada publikasi yang tersedia di penerbit yang Anda sambungkan atau Anda tidak memiliki izin yang memadai, versi SQL Server Management Studio yang lebih lama juga dapat menyebabkan kesalahan ini. Coba tingkatkan ke SQL Server Management Studio 18.0 atau yang lebih baru untuk mengesampingkan ini sebagai akar penyebabnya.