Publisher数据的来源
Distributor相当于搬运工
Subscriber复制数据的目地
首先配置Distributor,其次Publisher,最后Subscriber
一、配置Distributor
https://learn.microsoft.com/en-us/sql/relational-databases/replication/configure-distribution-availability-group?view=sql-server-ver17
--1.在每个distributor实例上运行
--这一步会创建1个repl_distributor的linked server,且会在instance上创建一个distributor_admin的sql账号:
use master
exec sp_adddistributor @distributor = @@servername
GO
--2.只在第1个distributor运行
exec sp_adddistributiondb @database = N'distribution'
GO
--上面语句会创建1个叫distribution的数据库,将它的Recovery mode从simple改为full,并马上做一下备份
--将该数据库添加到AG,注意图形界面看不到distributor,只能用命令
USE [master];
GO
ALTER AVAILABILITY GROUP [agccc] ADD DATABASE [distribution];
GO
--3.只在从节点运行:
EXEC sys.sp_adddistributiondb @database = 'distribution';
--4.在所有节点上运行:distributor上面添加publisher:如果publisher是AG,则把AG中的每个instance都加进来。
第一次添加publisher会要求设置Administrative link password的密码,不管之前有没有设置都要再设一次。
同时它会自动把publisher添加到linked server:
重要:distributor主节点上的sql server agent jobs,在没发生主从切换时,你在从节点是看不到。只有当切换时,"监视和同步复制代理作业"自动运行后才会创建出来。
二、配置publisher,subscriber
https://learn.microsoft.com/en-us/sql/database-engine/availability-groups/windows/configure-replication-for-always-on-availability-groups-sql-server?view=sql-server-ver17
将distribution对应的 AG listener 当做distributor, 添加到每个publisher
创建publication,subscription
在创建subscription时,对应的linked server会自动在主节点上创建,publisher和distributor的从节点都需要手动添加subscriber作为linked server。subscriber如果是AG,则直接用subscriber的listener
以下这步很重要,涉及到主从切换AG时,让复制也能工作:
Redirect the original publisher to the AG listener name
USE distribution;
GO
EXECUTE sys.sp_redirect_publisher
@original_publisher = 'MyPublisher',
@publisher_db = 'MyPublishedDB',
@redirected_publisher = 'MyPublisherAGListenerName';
验证一下:
DECLARE @redirected_publisher AS sysname;
EXEC sys.sp_validate_replica_hosts_as_publishers
@original_publisher = 'XMTESTAG1\ERRFIX',
@publisher_db = 'ccc',
@redirected_publisher = @redirected_publisher OUTPUT;
SELECT @redirected_publisher AS [重定向生效的侦听器];
GO