Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Från och med SQL Server 2019 (15.x) CU 13 kan en databas som tillhör en SQL Server Always On-tillgänglighetsgrupp delta som en peer-part i en topologi för peer-to-peer-transaktionsreplikering. Den här artikeln beskriver hur man konfigurerar detta scenario.
Skripten i detta exempel använder T-SQL-lagrade procedurer.
Roller och namn
Detta avsnitt beskriver rollerna och namnen på de olika elementen som deltar i replikationstopologin för denna artikel.
Peer1
- Node1: Replik 1 i tillgänglighetsgruppen MyAG.
- Node2: Replika 2 i tillgänglighetsgruppen MyAG.
- MyAG: Namnet på tillgänglighetsgruppen som du skapar på Nod1 och Nod2.
- MyAGListenerName: Namn på tillgänglighetsgruppens lyssnare.
- Dist1: Namnet på den fjärrutdelande distributörsinstansen.
- MyDBName: Namnet på databasen.
- P2P_MyDBName: Publikationsnamn.
Peer2
- Nod3: En fristående server som hostar en standardinstans av SQL Server.
- Dist2: Namnet på den fjärrutdelade distributörsinstansen.
- MyDBName: Namnet på databasen.
- P2P_MyDBName: Publikationsnamn.
Förutsättningar
Två instanser av SQL Server på separata fysiska eller virtuella servrar för att hosta tillgänglighetsgruppen. Tillgänglighetsgruppen innehåller en likvärdig databas.
En instans av SQL Server för att hosta en annan peer-databas.
Två instanser av SQL Server för att hosta distributörsdatabaserna.
Alla serverinstanser kräver en stödd version – Enterprise edition eller Developer edition.
Alla serverinstanser kräver en stödd version – SQL Server 2019 (15.x) CU13 eller senare.
Tillräcklig nätverksanslutning och bandbredd mellan alla instanser.
Installera SQL Server-replikering på alla instanser av SQL Server.
För att se om replikering är installerad på någon instans, kör följande fråga:
USE master; GO DECLARE @installed int; EXEC @installed = sys.sp_MS_replication_installed; SELECT @installed;Note
För att undvika en enda felpunkt för distributionsdatabasen, använd en fjärrdistributör för varje peer.
För demonstrations- eller testmiljö kan du konfigurera distributionsdatabaserna på en enskild instans.
Konfigurera distributören och fjärrpublicisten (Peer1)
Kör
sp_adddistributorför att konfigurera distribution på Dist1. Använd@password =för att ange ett lösenord som den fjärrutgivaren använder för att ansluta till distributören. Använd detta lösenord hos varje fjärrutgivare när du konfigurerar fjärrdistributören.USE master; GO EXEC sys.sp_adddistributor @distributor = 'Dist1', @password = '<Strong password for distributor>';Skapa distributionsdatabasen hos distributören.
USE master; GO EXEC sys.sp_adddistributiondb @database = 'distribution', @security_mode = 1;Konfigurera Nod1 och Nod2 som fjärrutgivare.
@security_modeavgör hur replikeringsagenterna ansluter till den aktuella primärservern.-
1= Windows-autentisering. -
0= SQL Server-autentisering. Kräver@loginoch@password. Inloggningen och lösenordet som anges måste vara giltiga vid varje sekundär replik.
Note
Om några modifierade replikeringsagenter körs på en annan dator än distributören, använd Windows authentication för anslutningen till primären, kräver Kerberos-autentisering för kommunikationen mellan replikavärddatorerna. Använd en SQL Server-inloggning för anslutning till den nuvarande primära datorn kräver ingen Kerberos-autentisering.
USE master; GO EXEC sys.sp_adddistpublisher @publisher = 'Node1', @distribution_db = 'distribution', @working_directory = '\\MyReplShare\WorkingDir', @security_mode = 1 USE master; GO EXEC sys.sp_adddistpublisher @publisher = 'Node2', @distribution_db = 'distribution', @working_directory = '\\MyReplShare\WorkingDir', @security_mode = 1-
Konfigurera utgivaren på den ursprungliga utgivaren (Node1)
Konfigurera fjärrdistribution för ursprunglig utgivare (Node1). Ange samma värde för
@passwordsom det som användes närsp_adddistributordet kördes hos distributören för att sätta upp distribution.exec sys.sp_adddistributor @distributor = 'Dist1', @password = '<Password used when running sp_adddistributor on distributor server>'Aktivera databasen för replikering.
USE master; GO EXEC sys.sp_replicationdboption @dbname = 'MyDBName', @optname = 'publish', @value = 'true';
Konfigurera den sekundära replikavärden som replikeringsutgivare (Nod2)
Konfigurera distribution på varje sekundär replikvärd. Ange samma värde för @password som det värde du använder när du kör sp_adddistributor hos distributören för att sätta upp distribution.
EXEC sys.sp_adddistributor
@distributor = 'Dist1',
@password = '<Password used when running sp_adddistributor on distributor server>'
Gör databasen till en del av tillgänglighetsgruppen och skapa lyssnaren (Peer1)
På den avsedda primärrepliken skapar du tillgänglighetsgruppen med databasen som medlemsdatabas.
Skapa en DNS-lyssnare för tillgänglighetsgruppen. Replikationsagenten kopplas till den aktuella primära repliken genom att använda lyssnaren. Följande exempel skapar en lyssnare som heter
MyAGListername.ALTER AVAILABILITY GROUP 'MyAG' ADD LISTENER 'MyAGListenerName' (WITH IP (('<ip address>', '<subnet mask>') [, PORT = <listener_port>]));Note
I det föregående skriptet är information inom hakparenteser (
[ ... ]) valfri. Använd den för att ange ett icke-standardvärde för TCP-porten. Inkludera inte bracketen.
Omdirigera den ursprungliga utgivaren till AG:s lyssnarnamn (Peer1)
På distributionsservern för Peer1 omdirigerar du den ursprungliga utgivaren till AG-lyssnarens namn.
USE distribution;
GO
EXEC sys.sp_redirect_publisher
@original_publisher = 'Node1',
@publisher_db = 'MyDBName',
@redirected_publisher = 'MyAGListenerName,<port>';
Note
I det föregående skriptet ,<port> är valfritt. Det krävs bara om du använder icke-standardportar. Inkludera inte vinkelfästena <>.
Skapa peer-to-peer-publikation (Peer1) på den ursprungliga utgivaren - Nod1
Följande skript skapar publikationen för Peer1.
exec master..sp_replicationdboption @dbname= 'MyDBName'
,@optname= 'publish'
,@value= 'true'
GO
DECLARE @publisher_security_mode smallint = 1
EXEC [MyDBName].dbo.sp_addlogreader_agent @publisher_security_mode = @publisher_security_mode
GO
DECLARE @allow_dts nvarchar(5) = N'false'
DECLARE @allow_pull nvarchar(5) = N'true'
DECLARE @allow_push nvarchar(5) = N'true'
DECLARE @description nvarchar(255) = N'Peer-to-Peer publication of database MyDBName from Node1'
DECLARE @enabled_for_p2p nvarchar(5) = N'true'
DECLARE @independent_agent nvarchar(5) = N'true'
DECLARE @p2p_conflictdetection nvarchar(5) = N'true'
DECLARE @p2p_originator_id int = 100
DECLARE @publication nvarchar(256) = N'P2P_MyDBName'
DECLARE @repl_freq nvarchar(10) = N'continuous'
DECLARE @restricted nvarchar(10) = N'false'
DECLARE @status nvarchar(8) = N'active'
DECLARE @sync_method nvarchar(40) = N'NATIVE'
EXEC [MyDBName].dbo.sp_addpublication @allow_dts = @allow_dts, @allow_pull = @allow_pull, @allow_push = @allow_push, @description = @description, @enabled_for_p2p = @enabled_for_p2p,
@independent_agent = @independent_agent, @p2p_conflictdetection = @p2p_conflictdetection, @p2p_originator_id = @p2p_originator_id, @publication = @publication, @repl_freq = @repl_freq, @restricted = @restricted,
@status = @status, @sync_method = @sync_method
go
DECLARE @article nvarchar(256) = N'tbl0'
DECLARE @description nvarchar(255) = N'Article for dbo.tbl0'
DECLARE @destination_table nvarchar(256) = N'tbl0'
DECLARE @publication nvarchar(256) = N'P2P_MyDBName'
DECLARE @source_object nvarchar(256) = N'tbl0'
DECLARE @source_owner nvarchar(256) = N'dbo'
DECLARE @type nvarchar(256) = N'logbased'
EXEC [MyDBName].dbo.sp_addarticle @article = @article, @description = @description, @destination_table = @destination_table, @publication = @publication, @source_object = @source_object, @source_owner = @source_owner, @type = @type
go
DECLARE @article nvarchar(256) = N'tbl1'
DECLARE @description nvarchar(255) = N'Article for dbo.tbl1'
DECLARE @destination_table nvarchar(256) = N'tbl1'
DECLARE @publication nvarchar(256) = N'P2P_MyDBName'
DECLARE @source_object nvarchar(256) = N'tbl1'
DECLARE @source_owner nvarchar(256) = N'dbo'
DECLARE @type nvarchar(256) = N'logbased'
EXEC [MyDBName].dbo.sp_addarticle @article = @article, @description = @description, @destination_table = @destination_table, @publication = @publication, @source_object = @source_object,
@source_owner = @source_owner, @type = @type
GO
Gör peer-to-peer-publikationer kompatibla med tillgänglighetsgruppen (Peer1)
På originalutgivaren (Node1), kör följande skript för att göra publikationen kompatibel med tillgänglighetsgruppen:
USE MyDBName
GO
DECLARE @publication sysname = N'P2P_MyDBName'
DECLARE @property sysname = N'redirected_publisher'
DECLARE @value sysname = N'MyAGListenerName,<port>'
EXEC MyDBName..sp_changepublication @publication = @publication, @property = @property, @value = @value
GO
Note
I det föregående skriptet ,<port> är valfritt. Det krävs bara om du använder icke-standardportar. Inkludera inte vinkelfästena <>.
Efter att du har slutfört föregående steg är tillgänglighetsgruppen redo att delta i peer-to-peer-topologi. Nästa steg är att konfigurera en fristående instans av SQL Server (Peer2) för att delta.
Konfigurera distributören och fjärrpublicisten (Peer2)
Konfigurera distribution på distributören.
USE master; GO EXEC sys.sp_adddistributor @distributor = 'Dist2', @password = '**Strong password for distributor**';Skapa distributionsdatabasen hos distributören.
USE master; GO EXEC sys.sp_adddistributiondb @database = 'distribution', @security_mode = 1;Konfigurera Nod3 som fjärrutgivare på distributören Dist2.
USE master; GO EXEC sys.sp_adddistpublisher @publisher = 'Node3', @distribution_db = 'distribution', @working_directory = '\\MyReplShare\WorkingDir2', @security_mode = 1
Konfigurera utgivaren (Peer2)
Konfigurera fjärrdistribution på Node 3.
exec sys.sp_adddistributor @distributor = 'Dist2', @password = '<Password used when running sp_adddistributor on distributor server>'På Node 3, aktivera databasen för replikering.
USE master;
GO
EXEC sys.sp_replicationdboption
@dbname = 'MyDBName',
@optname = 'publish',
@value = 'true';
Skapa peer-to-peer-publikation (Peer2)
På Nod3, kör följande kommando för att skapa peer-to-peer-publikationen.
exec master..sp_replicationdboption @dbname= 'MyDBName'
,@optname= 'publish'
,@value= 'true'
go
DECLARE @publisher_security_mode smallint = 1
EXEC [MyDBName].dbo.sp_addlogreader_agent @publisher_security_mode = @publisher_security_mode
go
-- Make sure that the value for @p2p_originator_id is different from Peer1.
DECLARE @allow_dts nvarchar(5) = N'false'
DECLARE @allow_pull nvarchar(5) = N'true'
DECLARE @allow_push nvarchar(5) = N'true'
DECLARE @description nvarchar(255) = N'Peer-to-Peer publication of database MyDBName from Node3'
DECLARE @enabled_for_p2p nvarchar(5) = N'true'
DECLARE @independent_agent nvarchar(5) = N'true'
DECLARE @p2p_conflictdetection nvarchar(5) = N'true'
DECLARE @p2p_originator_id int = 1
DECLARE @publication nvarchar(256) = N'P2P_MyDBName'
DECLARE @repl_freq nvarchar(10) = N'continuous'
DECLARE @restricted nvarchar(10) = N'false'
DECLARE @status nvarchar(8) = N'active'
DECLARE @sync_method nvarchar(40) = N'NATIVE'
EXEC [MyDBName].dbo.sp_addpublication @allow_dts = @allow_dts, @allow_pull = @allow_pull, @allow_push = @allow_push, @description = @description, @enabled_for_p2p = @enabled_for_p2p, @independent_agent = @independent_agent, @p2p_conflictdetection = @p2p_conflictdetection, @p2p_originator_id = @p2p_originator_id, @publication = @publication, @repl_freq = @repl_freq, @restricted = @restricted, @status = @status, @sync_method = @sync_method
GO
DECLARE @article nvarchar(256) = N'tbl0'
DECLARE @description nvarchar(255) = N'Article for dbo.tbl0'
DECLARE @destination_table nvarchar(256) = N'tbl0'
DECLARE @publication nvarchar(256) = N'P2P_MyDBName'
DECLARE @source_object nvarchar(256) = N'tbl0'
DECLARE @source_owner nvarchar(256) = N'dbo'
DECLARE @type nvarchar(256) = N'logbased'
EXEC [MyDBName].dbo.sp_addarticle @article = @article, @description = @description, @destination_table = @destination_table, @publication = @publication, @source_object = @source_object, @source_owner = @source_owner, @type = @type
GO
DECLARE @article nvarchar(256) = N'tbl1'
DECLARE @description nvarchar(255) = N'Article for dbo.tbl1'
DECLARE @destination_table nvarchar(256) = N'tbl1'
DECLARE @publication nvarchar(256) = N'P2P_MyDBName'
DECLARE @source_object nvarchar(256) = N'tbl1'
DECLARE @source_owner nvarchar(256) = N'dbo'
DECLARE @type nvarchar(256) = N'logbased'
EXEC [MyDBName].dbo.sp_addarticle @article = @article, @description = @description, @destination_table = @destination_table, @publication = @publication, @source_object = @source_object,
@source_owner = @source_owner, @type = @type
GO
Skapa en pushprenumeration från Peer1 till Peer2
Detta steg skapar en push-prenumeration från tillgänglighetsgruppen till den fristående instansen av SQL Server.
Exekvera följande skript på Node1. Detta steg förutsätter att Nod1 kör den primära repliken.
EXEC [MyDBName].dbo.sp_addsubscription
@publication = N'P2P_MyDBName'
, @subscriber = N'Node3'
, @destination_db = N'MyDBName'
, @subscription_type = N'push'
, @sync_type = N'replication support only'
GO
EXEC [MyDBName].dbo.sp_addpushsubscription_agent
@publication = N'P2P_MyDBName'
, @subscriber = N'Node3'
, @subscriber_db = N'MyDBName'
, @job_login = null
, @job_password = null
, @subscriber_security_mode = 1
, @frequency_type = 64
, @frequency_interval = 1
, @frequency_relative_interval = 1
, @frequency_recurrence_factor = 0
, @frequency_subday = 4
, @frequency_subday_interval = 5
, @active_start_time_of_day = 0
, @active_end_time_of_day = 235959
, @active_start_date = 0
, @active_end_date = 0
, @dts_package_location = N'Distributor'
GO
Skapa en push-prenumeration från Peer2 till tillgänglighetsgruppens lyssnare
För att skapa en push-prenumeration från Peer2 till tillgänglighetsgruppens lyssnare, kör följande kommando på Nod3.
Important
Följande skript specificerar namnet på tillgänglighetsgruppens lyssnare för abonnenten.
@subscriber = N'MyAGListenerName,<port>'
EXEC [MyDBName].dbo.sp_addsubscription
@publication = N'P2P_MyDBName'
, @subscriber = N'MyAGListenerName,<port>'
, @destination_db = N'MyDBName'
, @subscription_type = N'push'
, @sync_type = N'replication support only'
GO
EXEC [MyDBName].dbo.sp_addpushsubscription_agent
@publication = N'P2P_MyDBName'
, @subscriber = N'MyAGListenerName,<port>'
, @subscriber_db = N'MyDBName'
, @job_login = null
, @job_password = null
, @subscriber_security_mode = 1
, @frequency_type = 64
, @frequency_interval = 1
, @frequency_relative_interval = 1
, @frequency_recurrence_factor = 0
, @frequency_subday = 4
, @frequency_subday_interval = 5
, @active_start_time_of_day = 0
, @active_end_time_of_day = 235959
, @active_start_date = 0
, @active_end_date = 0
, @dts_package_location = N'Distributor'
GO
Konfigurera länkade servrar
På varje värd för sekundär replik kontrollerar du att pushprenumeranter för publikationer finns med som länkade servrar.
EXEC sys.sp_addlinkedserver
@server = 'MySubscriber';