Menyiapkan database distribusi replikasi di grup ketersediaan AlwaysOn

Berlaku untuk:SQL Server

Artikel ini menjelaskan cara menyiapkan database distribusi replikasi SQL Server dalam grup ketersediaan AlwaysOn (AG).

SQL Server 2017 CU6 dan SQL Server 2016 SP2-CU3 memperkenalkan dukungan untuk database distribusi replikasi dalam AG melalui mekanisme berikut:

  • AG database distribusi harus memiliki pendengar. Saat penerbit menambahkan distributor, penerbit menggunakan nama pendengar sebagai nama distributor.
  • Pekerjaan replikasi dibuat dengan nama pendengar sebagai nama distributor. Rekam jepret replikasi, pembaca log, dan pekerjaan agen distribusi (langganan push) yang dibuat di server distribusi dibuat pada semua replika sekunder AG untuk Distribusi DB.

Catatan

Pekerjaan agen distribusi untuk susbcripsi penarikan dibuat di server pelanggan dan bukan di server distribusi.

  • Pekerjaan baru memantau status (primer atau sekunder dalam AG) database distribusi dan menonaktifkan atau mengaktifkan pekerjaan replikasi berdasarkan status database distribusi.

Setelah database distribusi di AG dikonfigurasi berdasarkan langkah-langkah yang dijelaskan di bawah ini, konfigurasi replikasi dan pekerjaan run time dapat berjalan dengan benar sebelum dan sesudah kegagalan AG database distribusi.

Skenario yang didukung

  • Mengonfigurasi database distribusi yang akan disertakan dalam AG.
  • Mengonfigurasi replikasi seperti publikasi dan langganan sebelum dan sesudah failover AG.
  • Pekerjaan replikasi berfungsi sebelum dan sesudah failover.
  • Menghapus replikasi di distributor dan penerbit saat database distribusi berada di AG.
  • Menambahkan atau menghapus simpul ke AG database distribusi yang ada.
  • Distributor mungkin memiliki beberapa database distribusi. Setiap database distribusi dapat berada di AG sendiri dan tidak dapat berada di AG apa pun. Beberapa database distribusi dapat berbagi AG.
  • Penerbit dan distributor harus berada di instans SQL Server terpisah.
  • Jika pendengar untuk grup ketersediaan yang menghosting database distribusi dikonfigurasi untuk menggunakan port non-default, maka diperlukan untuk menyiapkan alias untuk pendengar dan port non-default.

Batasan atau pengecualian

  • Distributor Lokal (di mana server Penerbit juga merupakan Distributor) tidak didukung. Penerbit dan Distributor harus berupa instans SQL Server terpisah. Instans ini dapat dihosting pada set node yang sama. Distributor lokal tidak didukung karena alasan berikut:

    • Jika Distributor dikonfigurasi secara lokal, Anda tidak dapat menggunakan pendengar grup ketersediaan untuk merutekan lalu lintas ke Distributor, yang menyebabkan agen replikasi gagal setelah failover.
    • Jika Distributor lokal dikonfigurasi dan kemudian grup ketersediaan Distributor gagal ke sekunder asli, koneksi Penerbit ke Distributor berubah dari lokal ke jarak jauh, yang menyebabkan prosedur dan agen tersimpan replikasi gagal.
  • Penerbit Oracle tidak didukung.

  • Replikasi penggabungan tidak didukung.

  • Replikasi transaksional dengan pelanggan pembaruan segera atau antrean tidak didukung.

  • Replikasi peer to peer tidak didukung sebelum SQL Server 2019 (15.x) CU 17

  • Semua instans SQL Server 2017 yang menghosting replika database distribusi harus SQL Server 2017 CU 6 atau yang lebih baru.

  • Semua replika database distribusi hosting instans SQL Server 2016 harus SQL Server 2016 SP2-CU3 atau yang lebih baru.

  • Semua instans SQL Server yang menghosting replika database distribusi harus versi yang sama, kecuali selama jangka waktu yang sempit saat peningkatan terjadi.

  • Database distribusi harus dalam model pemulihan penuh.

  • Untuk pemulihan dan untuk mengizinkan pemotongan log transaksi, konfigurasikan pencadangan log transaksi dan penuh.

  • AG database distribusi harus memiliki listener yang dikonfigurasi.

  • Replika sekunder dalam database distribusi AG dapat sinkron atau asinkron. Mode sinkron direkomendasikan dan disukai.

  • Replikasi transaksional dua arah tidak didukung.

  • SSMS tidak menampilkan Database Distribusi sebagai disinkronkan/disinkronkan, saat database distribusi ditambahkan ke grup ketersediaan.

    Catatan

    Sebelum menjalankan salah satu prosedur tersimpan replikasi (misalnya - , sp_dropdistpublisher, sp_dropdistributiondb, sp_dropdistributorsp_adddistributiondb, sp_adddistpublisher) pada replika sekunder, pastikan replika sepenuhnya disinkronkan.

  • Semua replika sekunder dalam database distribusi AG harus dapat dibaca. Jika replika sekunder tidak dapat dibaca, properti distributor di SQL Server Management Studio pada replika sekunder tertentu tidak dapat diakses, namun replikasi akan terus berfungsi dengan benar.

  • Semua simpul dalam database distribusi AG perlu menggunakan akun domain yang sama untuk menjalankan SQL Server Agent, dan akun domain ini harus memiliki hak istimewa yang sama pada setiap simpul.

  • Jika ada agen replikasi yang berjalan di bawah akun proksi, akun proksi harus ada di setiap simpul dalam AG database distribusi dan memiliki hak istimewa yang sama pada setiap simpul.

  • Buat perubahan pada properti database distributor atau distribusi di semua replika yang berpartisipasi dalam AG database distribusi.

  • Buat perubahan pekerjaan replikasi melalui prosedur tersimpan msdb atau SQL Server Management Studio di semua replika yang berpartisipasi dalam AG database distribusi.

  • Jika menggunakan profil kustom untuk agen apa pun, profil tersebut harus dibuat secara manual pada semua replika sekunder dengan menggunakan prosedur sp_add_agent_profile. Profil harus memiliki id yang sama pada semua replika.

  • Mengonfigurasi distributor pada penerbit perlu dilakukan dengan skrip. Panduan replikasi tidak dapat digunakan. Panduan replikasi dan lembar properti untuk tujuan lain didukung.

  • Mengonfigurasi AG untuk database distribusi hanya dapat dilakukan melalui skrip.

  • Menyiapkan database distribusi di AG harus menjadi konfigurasi replikasi baru. Mengalihkan database distribusi yang ada ke AG tidak didukung. Juga setelah database distribusi diambil AG, database tidak dapat lagi berfungsi sebagai database distribusi yang valid dan harus dihilangkan.

Arsitektur konfigurasi

Nama dan pengaturan server berikut digunakan dalam contoh dalam artikel ini.

  • DIST1, DIST2, DIST3 adalah server distributor;
  • PUB adalah server penerbit;
  • Setelah database distribusi AG terbentuk, nama pendengarnya adalah DISTLISTENER;
  • DIST1 dimaksudkan untuk menjadi replika utama awal database distribusi AG.

Mengonfigurasi distributor, database distribusi, dan penerbit

Contoh ini mengonfigurasi distributor dan penerbit baru dan menempatkan database distribusi dalam AG.

Alur kerja distributor

  1. Konfigurasikan DIST1, DIST2, DIST3 sebagai distributor dengan sp_adddistributor @@servername. Tentukan kata sandi untuk distributor_admin melalui @password. @password harus identik di DIST1, DIST2, DIST3.

  2. Buat database distribusi di DIST1 dengan sp_adddistributiondb. Nama database distribusi adalah distribution. Ubah model distribution pemulihan database dari sederhana ke penuh.

  3. Buat AG untuk distribution database dengan replika di DIST1, DIST2, dan DIST3. Sebaiknya semua replika sinkron. Konfigurasikan replika sekunder agar dapat dibaca atau izinkan dibaca. Saat ini, database distribusi adalah AG, DIST1 adalah replika utama, dan DIST2 dan DIST3 adalah replika sekunder.

  4. Konfigurasikan listener bernama DISTLISTENER untuk AG.

  5. Untuk pemulihan dan untuk mengizinkan pemotongan log transaksi, konfigurasikan pencadangan log transaksi dan penuh.

  6. Pada DIST2 dan DIST3, jalankan:

    EXEC sys.sp_adddistributiondb @database = 'distribution';
    
  7. Untuk menambahkan PUB sebagai penerbit di DIST1, jalankan:

    EXEC sys.sp_adddistpublisher @publisher = 'PUB', @distribution_db = 'distribution', @working_directory = '<network path>';
    

    Nilai @working_directory harus berupa jalur jaringan yang independen dari DIST1, DIST2, dan DIST3.

  8. Pada DIST2 dan DIST3, jika replika dapat dibaca sebagai sekunder, jalankan:

    EXEC sys.sp_adddistpublisher @publisher = 'PUB', @distribution_db = 'distribution', @working_directory = '<network path>';
    

    Jika replika tidak dapat dibaca sebagai sekunder, lakukan failover sedih sehingga replika menjadi yang utama, dan jalankan

    EXEC sys.sp_adddistpublisher @publisher = 'PUB', @distribution_db = 'distribution', @working_directory = '<network path>';
    

    Nilai @working_directory harus sama dengan langkah sebelumnya.

Alur kerja Publisher

Untuk menambahkan distribution pendengar AG database sebagai distributor, di PUB, jalankan:

EXEC sys.sp_adddistributor @distributor = 'DISTLISTENER', @password = '<distributor_admin password>' ;

Nilai @password harus menjadi yang ditentukan ketika distributor dikonfigurasi dalam alur kerja distributor.

Menghapus distributor dan penerbit

Contoh ini menghapus penerbit dan distributor saat database distribusi berada di AG.

Alur kerja Publisher

Di PUB, hilangkan semua langganan dan publikasi untuk penerbit ini lalu panggil sp_dropdistributor.

Alur kerja distributor

Dalam contoh ini, DIST1 adalah primer distribution AG database saat ini. DIST2 dan DIST3 adalah replika sekunder.

  1. Pada DIST2 dan DIST3, jalankan:

    EXEC sys.sp_dropdistpublisher @publisher = 'PUB', @no_checks = 1;
    
  2. Pada DIST1, jalankan:

    EXEC sys.sp_dropdistpublisher @publisher = 'PUB';
    
  3. Hapus AG.

  4. Pada DIST2 dan DIST3, ubah distribution database ke mode read_write dengan memulihkan database dengan pemulihan.

    RESTORE DATABASE [distribution] WITH RECOVERY, KEEP_REPLICATION;
    
  5. Untuk menghilangkan distribution database dan mempertahankan direktori rekam jepret, jalankan:

    EXEC sys.sp_dropdistributiondb @database = 'distribution' , @former_ag_secondary = 1;
    

Prosedur ini menghapus semua pekerjaan yang menggoreng pada replika ini.

  1. Untuk menghilangkan distribution database di DIST1, jalankan

    EXEC sys.sp_dropdistributiondb @database = 'distribution';
    
  2. Jika tidak ada database distribusi lain di AG, jalankan sp_dropdistributor pada DIST1, DIST2, dan DIST3.

Menambahkan replika ke AG database distribusi

Contoh ini menambahkan distributor baru ke konfigurasi replikasi yang ada dengan database distribusi di AG. Dalam contoh ini, database distribusi yang ada berada dalam AG. DIST1 dan DIST2 adalah distributor, distribution adalah database distribusi di AG, dan PUB adalah penerbit. Tambahkan DIST3 sebagai replika di AG.

Alur kerja distributor

  1. DIST3 harus dikonfigurasi sebagai distributor melalui sp_adddistributor @@servername. Kata sandi untuk distributor_admin harus ditentukan melalui @password parameter. Kata sandi harus sama dengan apa yang ditentukan untuk DIST1 dan DIST2.

  2. Tambahkan DIST3 ke AG untuk database distribusi saat ini.

  3. Pada DIST3, jalankan:

    EXEC sys.sp_adddistributiondb @database = 'distribution';
    
  4. Pada DIST3, jika replika dapat dibaca sebagai sekunder, jalankan:

    EXEC sys.sp_adddistpublisher @publisher = 'PUB', @distribution_db = 'distribution', @working_directory = '<network path>';
    

    Jika replika tidak dapat dibaca sebagai sekunder, lakukan failover sedih sehingga replika menjadi yang utama, dan jalankan:

    EXEC sys.sp_adddistpublisher @publisher = 'PUB', @distribution_db = 'distribution', @working_directory = '<network path>';
    

    Nilai @working_directory harus sama dengan apa yang ditentukan untuk DIST1 dan DIST2.

  5. Di DIST3, Anda harus membuat ulang Server Tertaut ke pelanggan.

Menghapus replika dari AG database distribusi

Contoh ini menghapus distributor dari AG database distribusi saat ini sementara replika lainnya dalam database distribusi AG tidak terpengaruh. Dalam contoh ini, database distribusi ada di AG. DIST1, DIST2, dan DIST3 adalah distributor, distribution adalah database distribusi di AG, dan PUB adalah penerbit. Hapus DIST3 dari AG.

Alur kerja distributor

  1. Pastikan DIST3 adalah sekunder untuk distribution database AG.

  2. Hapus DIST3 dari distribution database AG.

  3. Pada DIST3, ubah database ke distribution mode read_write dengan memulihkan database dengan pemulihan. Misalnya, jalankan perintah berikut:

    RESTORE DATABASE distribution WITH RECOVERY, KEEP_REPLICATION;
    
  4. Untuk menghapus semua pekerjaan yatim piatu pada eksekusi DIST3:

    EXEC sys.sp_dropdistpublisher @publisher = 'PUB', @no_checks = 1;
    
  5. Pada DIST3, jalankan:

    EXEC sys.sp_dropdistributiondb @database = 'distribution', @former_ag_secondary = 1;
    
  6. Pada DIST3, jalankan:

    EXEC sys.sp_dropdistributor;
    

Menghapus penerbit dari AG database distribusi

Contoh ini menghapus penerbit dari AG database distribusi distributor saat ini sementara penerbit lainnya yang dilayani oleh AG database distribusi ini tidak terpengaruh. Dalam contoh ini, konfigurasi yang ada memiliki database distribusi dalam AG. DIST1, DIST2, dan DIST3 adalah distributor, distribution adalah database distribusi di AG, dan PUB1 dan PUB2 adalah penerbit yang dilayani oleh distribution database. Contoh menghapus PUB1 dari distributor ini.

Alur kerja Publisher

Di PUB1, hilangkan semua langganan dan publikasi untuk penerbit ini, lalu panggil sp_dropdistributor.

Alur kerja distributor

DIST1 adalah primer distribution AG database saat ini.

  1. Pada DIST2 dan DIST3, jalankan:

    EXEC sys.sp_dropdistpublisher @publisher = 'PUB1',  @no_checks = 1;
    
  2. Pada DIST1, jalankan:

    EXEC sys.sp_dropdistpublisher @publisher = 'PUB1';
    
  3. Pada titik ini, mungkin ada pekerjaan yatim piatu yang terkait dengan PUB1 di DIST2 atau DIST3. Setiap kali failover terjadi pada DIST2 dan DIST3, pekerjaan yatim piatu yang terkait dengan semua publikasi PUB1 akan dihapus oleh pekerjaan.Monitor and sync replication agent jobs

Tambahkan langganan

Contoh ini adalah tentang mengonfigurasi informasi pelanggan dengan benar di antara distributor. Contoh menambahkan pelanggan. DIST1 adalah replika utama database distribusi saat ini di AG, DIST2 dan DIST3 adalah replika sekunder database distribusi di AG. Nama pelanggan adalah SUB.

Alur kerja Publisher

Di PUB, tambahkan langganan seperti yang biasanya Anda lakukan untuk pelanggan SUB.

Alur kerja distributor

Pada DIST2 dan DIST3, tambahkan server tertaut untuk 'SUB' jika sebelumnya tidak terdaftar di DIST2 atau DIST3. Di bawah ini adalah sampel TSQL untuk pembuatan server tertaut -

EXEC master.dbo.sp_addlinkedserver@server =N'SUB', @srvproduct=N'SQL Server';
/* For security reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin@rmtsrvname = N'SUB', @useself = N'True',@locallogin = NULL,@rmtuser =N ULL,@rmtpassword = NULL;

Menambahkan langganan penarikan

Alur kerja pelanggan

Untuk menambahkan langganan penarikan untuk publikasi dengan database distribusi di AG, gunakan nama pendengar AG dalam @distributor parameter sp_addpullsubscription_agent.

Sampel T-SQL Buat distribusi DB di AG

Skrip berikut ini memungkinkan database distribusi dalam grup ketersediaan.

--- WorkFlow to Enable Distribution Database In AG.

-- SECTION 1 ---- CONFIGURE THE DISTRIBUTOR SERVERS

-- Step1 - Configure the Distribution DB nodes (AG Replicas) to act as a distributor
:Connect SQLNode1
EXEC [sys].[sp_adddistributor]
    @distributor = @@SERVERNAME,
    @password = 'Pass@word1';
GO
:Connect SQLNode2
EXEC [sys].[sp_adddistributor]
    @distributor = @@SERVERNAME,
    @password = 'Pass@word1';
GO

-- Step2 - Configure the Distribution Database
:Connect SQLNode1
USE [master];
EXEC [sys].[sp_adddistributiondb]
    @database = 'DistributionDB',
    @security_mode = 1;
GO
ALTER DATABASE [DistributionDB] SET RECOVERY FULL;
GO
BACKUP DATABASE [DistributionDB] TO DISK = 'NUL';
GO
-- Step 3 - Create AG for the Distribution DB.
:Connect SQLNode1
USE [master];
GO
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

:Connect SQLNode2
USE [master];
GO
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

:Connect SQLNode1
-- Create the Availability Group
CREATE AVAILABILITY GROUP [DistributionDB_AG]
FOR DATABASE [DistributionDB]
REPLICA ON
N'SQLNode1' WITH (ENDPOINT_URL = N'TCP://SQLNode1.contoso.com:5022', 
	 FAILOVER_MODE = AUTOMATIC, 
	 AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, 
	 BACKUP_PRIORITY = 50, 
	 SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL), 
	 SEEDING_MODE = AUTOMATIC),
N'SQLNode2' WITH (ENDPOINT_URL = N'TCP://SQLNode2.contoso.com:5022', 
	 FAILOVER_MODE = AUTOMATIC, 
	 AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, 
	 BACKUP_PRIORITY = 50, 
	 SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL), 
	 SEEDING_MODE = AUTOMATIC);
GO


:Connect SQLNode2
ALTER AVAILABILITY GROUP [DistributionDB_AG] JOIN;
GO  
ALTER AVAILABILITY GROUP [DistributionDB_AG] GRANT CREATE ANY DATABASE;
GO

--STEP4 - Create the Listener for the Availability Group. This is very important.
:Connect SQLNode1

USE [master]
GO
ALTER AVAILABILITY GROUP [DistributionDB_AG]
ADD LISTENER N'DistributionDBList' (
WITH IP
((N'10.0.0.8', N'255.255.255.0')) , PORT=1500);
GO

-- STEP 5 - Enable SQLNode2 also as a Distributor
:Connect SQLNode2
EXEC sys.sp_adddistributiondb @database = 'DistributionDB', @security_mode = 1;
GO

--STEP 6 - On all Distributor Nodes Configure the Publisher Details 
:Connect SQLNode1
EXEC sys.sp_adddistpublisher @publisher = 'SQLNode4', @distribution_db = 'DistributionDB', 
	@working_directory = '\\sqlfileshare\Dist_Work_Directory\';
GO
:Connect SQLNode2
EXEC sys.sp_adddistpublisher @publisher = 'SQLNode4', @distribution_db = 'DistributionDB', 
	@working_directory = '\\sqlfileshare\Dist_Work_Directory\';
GO

-- SECTION 2 ---- CONFIGURE THE PUBLISHER SERVER
:Connect SQLNode4
EXEC sys.sp_adddistributor @distributor = 'DistributionDBList', -- Listener for the Distribution DB.	
	@password = 'Pass@word1';
GO

-- SECTION 3 ---- CONFIGURE THE SUBSCRIBERS 
-- On Publisher, create the publication as one would normally do.
-- On the Secondary replicas of the Distribution DB, add the Subscriber as a linked server.
:Connect SQLNode2
EXEC master.dbo.sp_addlinkedserver @server = N'SQLNODE5', @srvproduct = N'SQL Server';
/* For security reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'SQLNODE5', @useself = N'True',
	@locallogin = NULL,@rmtuser = NULL,@rmtpassword = NULL;

Menerbitkan Objek Data dan Database
Mengamankan Distributor
Menampilkan dan Mengubah Properti Distributor dan Penerbit
Menonaktifkan Penerbitan dan Distribusi
Mengaktifkan Database untuk Replikasi (SQL Server Management Studio)