2022年12月22日 星期四

Always On availability group with Replication

 Manage a replicated Publisher database as part of an Always On availability group


1.散發資料庫 distribution database

若規劃將散發資料庫 distribution database放置到AG可用性群組

(1)SQL 2016 和更新的版本支援將散發資料庫放置到可用性群組內

(2)散發者與發行者不能在同一個SQL Server instance,但散發者與散發資料庫可以是在另一組AG

Local distributor is not supported. For example, publisher and distributor must be different SQL Server instances

(3)在發行者上[設定散發者] 與 [將散發資料庫數據庫設定到AG] 需要使用腳本來完成。

(4)不可事前將散發資料庫加入AG

(5)以下功能不支援

    Oracle發行

    合併式複寫

    雙向複寫 

    Transactional replication with immediate or queued updating subscriber

    在SQL Server 2019 CU17之前的點對點複寫

    SQL Server 2017 CU6以下

    SQL Server 2016 SP2-CU3以下

    所有instance必須相同版本,除了短暫時間的升級之外

    散發資料庫比需式完整復原模型

2.管理方式跟單機型的Publication一樣,透過SSMS連接到Primary Node管理Replication,發行會出現在主要副本與次要唯讀副本的Local Publications下面,若發生切換非唯讀副本,則SSMS可能須更新publication才會出現

3.複寫監視器永遠都會在原始發行者底下顯示發行集資訊。 不過,只要在複寫監視器加入原始發行者做為伺服器,您就可以在任何複本的檢視這些資訊。


Set up replication distribution database in Always On availability group

Manage a replicated Publisher database as part of an Always On availability group


設定方法:

範例環境

SQL Server主機: 

    MyDistributor (複寫散發者,此範例是單機型instance,若期望將散發者與散發資料庫放入AG,可以將散發者建置獨立的另一組AG,範例步驟在最下方)

    AGPrimaryReplicaHost (AG節點1,複寫發行者)

    AGSecondaryReplicaHost (AG節點2, failover後可接手的待命複寫發行者)

Alwayson Listener name:

    MyAGListenerName (AG的linster name)


1.設定資料庫發行集與訂閱

(1)設定散發

散發者 (MyDistributor) 使用SSMS wizard或以下的SP,設定散發

USE master;  

GO  

EXEC sys.sp_adddistributor  

    @distributor = 'MyDistributor',  

    @password = '**Strong password for distributor**';

USE master;  

GO  

EXEC sys.sp_adddistributiondb  

    @database = 'distribution',  

    @security_mode = 1;


(2)加入發行者

散發者  (MyDistributor) 使用SSMS wizard或以下的SP,加入發行者

指定alwayson的主要節點為發行者 @publisher = 'AGPrimaryReplicaHost'

USE master;  

GO  

EXEC sys.sp_adddistpublisher  

    @publisher = 'AGPrimaryReplicaHost',  

    @distribution_db = 'distribution',  

    @working_directory = '\\MyReplShare\WorkingDir',  

    @login = 'MyPubLogin',  

    @password = '**Strong password for publisher**';


(3)設定發行者

發行者 (AGPrimaryReplicaHost) 的master db執行以下語法或用SSMS wizard來設定發行者(遠端發行者)

exec sys.sp_adddistributor  

    @distributor = 'MyDistributor',  

    @password = 'MyDistPass'


(4)啟用資料庫複寫

如果需要設定交易式與合併式複寫兩種複寫,則在發行者 (AGPrimaryReplicaHost) 執行以下語法

USE master;  

GO  

EXEC sys.sp_replicationdboption  

    @dbname = 'MyDBName',  

    @optname = 'publish',  

    @value = 'true';  


EXEC sys.sp_replicationdboption  

    @dbname = 'MyDBName',  

    @optname = 'merge publish',  

    @value = 'true';


(5)設定發行集、發行項與訂閱

發行者 (AGPrimaryReplicaHost)  設定發行集、發行項與訂閱


2.設定AG

(1)發行資料庫加入 AG

(2)確定已經建立好 Listener,例如名稱為 MyAGListenerName


3.確保所有次要副本主機都安裝了複寫功能

在每一台AG次要節點,確認已安裝Replication功能

USE master;  

GO  

DECLARE @installed int;  

EXEC @installed = sys.sp_MS_replication_installed;  

SELECT @installed;


4.將次要副本主機配置為複寫發行者

散發者 (MyDistributor) ,加入每一台AG次要待命發行者(AGSecondaryReplicaHost)

EXEC sys.sp_adddistpublisher  

    @publisher = 'AGSecondaryReplicaHost',  

    @distribution_db = 'distribution',  

    @working_directory = '\\MyReplShare\WorkingDir',  

    @login = 'MyPubLogin',  

    @password = '**Strong password for publisher**';

指定的散發資料庫與工作目錄與login和password必須與原始發行者一致(步驟1的(2)加入發行者)


次要待命發行者 (AGSecondaryReplicaHost),確認push訂閱者有顯示在linked server,如果沒有出現,則執行以下語法建立linked server

EXEC sys.sp_addlinkedserver   

    @server = 'MySubscriber';


5.將原始發行者重導向到 AG 監聽器名稱

在散發者  (MyDistributor)  的散發資料庫,執行以下語法

USE distribution;  

GO  

EXEC sys.sp_redirect_publisher   

@original_publisher = 'MyPublisher',  

    @publisher_db = 'MyPublishedDB',  

    @redirected_publisher = 'MyAGListenerName';


6.執行複寫驗證預存程序來驗證配置

在散發者的散發資料庫執行與下語法

USE distribution;  

GO  

DECLARE @redirected_publisher sysname;  

EXEC sys.sp_validate_replica_hosts_as_publishers  

    @original_publisher = 'MyPublisher',  

    @publisher_db = 'MyPublishedDB',  

    @redirected_publisher = @redirected_publisher output;


7.將原始發行者加入到復寫監視器



將散發者與散發資料庫建置在AG

範例步驟

Set up replication distribution database in Always On availability group


沒有留言:

SQL Server Database Mirroring 資料庫鏡像

SQL Server Database Mirroring 資料庫鏡像