設定 Always On 可用性群組的複寫
適用於︰SQL Server - 僅限 Windows
設定 SQL Server 複寫和 AlwaysOn 可用性群組包含七個步驟。 下列各節將詳細說明每個步驟。
1. 設定資料庫出版物和訂閱
設定發行者
發行資料庫不能與 SQL Server 2012 和 SQL Server 2014 一起放置於可用性群組中。 SQL 2016 和更新版本支援將散發資料庫放置到可用性群組內,但用於合併、雙向或點對點複寫拓撲的分散式資料庫除外。 如需詳細資訊,請參閱 在 Always On 可用性群組中設定複寫散發資料庫。
在散發者端設定散發。 如果要將預存程式用於組態,請執行
sp_adddistributor
使用 @password 參數來識別遠端發行者連接到散發者時將使用的密碼。 設定遠端散發者時,每個遠端發行者也需要此密碼。USE master; GO EXECUTE sys.sp_adddistributor @distributor = 'MyDistributor', @password = '**Strong password for distributor**';
在散發者端建立散發資料庫。 如果要將預存程式用於設定,請執行
sp_adddistributiondb
USE master; GO EXECUTE sys.sp_adddistributiondb @database = 'distribution', @security_mode = 1;
設定遠端發行者。 如果使用預存程式來設定散發者,請執行
sp_adddistpublisher
。@security_mode 參數用來決定從復寫代理程式執行的發行者驗證預存程式,將如何連線到目前的主伺服器。 如果設定為 1,就會使用 Windows 驗證來連接到目前主要複本。 如果設定為 0,就會使用 SQL Server 驗證搭配指定的 @login 和 @password 值。 在每個次要複本上指定的登入和密碼必須有效,才能讓驗證預存程序成功連接到該複本。注意
如果任何修改的複寫代理程式在散發者以外的電腦上執行,則使用 Windows 驗證來連接到主要複本時,就必須針對複本主機電腦之間的通訊設定 Kerberos 驗證。 使用 SQL Server 登入來連接到目前主要複本時,不需要 Kerberos 驗證。
USE master; GO EXECUTE sys.sp_adddistpublisher @publisher = 'AGPrimaryReplicaHost', @distribution_db = 'distribution', @working_directory = '\\MyReplShare\WorkingDir', @login = 'MyPubLogin', @password = '**Strong password for publisher**';
如需詳細資訊,請參閱 sp_adddistpublisher。
在原始的發行者處設定發行者
設定遠端散發。 如果在設定發行者時使用預存程序,請執行
sp_adddistributor
,並設定 @password 的值與在散發者端執行sp_adddistrbutor
設定發行時所用的值相同,以完成發行的設定。EXECUTE sys.sp_adddistributor @distributor = 'MyDistributor', @password = 'MyDistPass';
啟用資料庫進行複寫。 如果要使用預存程序來設定發行者,請執行
sp_replicationdboption
;如果要為資料庫設定交易式和合併式複製,則必須啟用每個複製功能。USE master; GO EXECUTE sys.sp_replicationdboption @dbname = 'MyDBName', @optname = 'publish', @value = 'true'; EXECUTE sys.sp_replicationdboption @dbname = 'MyDBName', @optname = 'merge publish', @value = 'true';
建立複寫發行集、發行項和訂閱。 如需有關如何設定複寫的詳細資訊,請參閱<發行資料和資料庫物件>。
2.設定可用性群組
在預期的主要複本上,建立具有已發行 (或即將發行) 資料庫做為成員資料庫的可用性群組。 如果使用可用性群組精靈,您就可以允許精靈一開始同步處理次要複本資料庫,也可以使用備份和還原來手動執行初始化。
針對可用性群組建立複寫代理程式將用來連接到目前主要複本的 DNS 接聽程式。 指定的接聽程式名稱將當做原始發行者/已發行資料庫配對的重新導向目標使用。 例如,如果您使用 DDL 來設定可用性群組,下列程式代碼範例可用來為名為 MyAG
的現有可用性群組指定可用性群組接聽程式:
ALTER AVAILABILITY GROUP 'MyAG'
ADD LISTENER 'MyAGListenerName' (WITH IP (('10.120.19.155', '255.255.254.0')));
如需詳細資訊,請參閱建立及設定可用性群組 (SQL Server)。
3.確定所有次要複本主機都已設定為複寫
在每個次要複本主機上,確認 SQL Server 已經設定為支援複寫。 您可以在每個次要複本主機上執行下列查詢,以便判斷是否已安裝複寫:
USE master;
GO
DECLARE @installed AS INT;
EXECUTE @installed = sys.sp_MS_replication_installed;
SELECT @installed;
如果 @installed 為 0,您就必須將複寫新增到 SQL Server 安裝。
4.將次要複本主機設定為復寫發行者
次要複本不能作為複寫發行者或再發行者,但必須配置複寫,確保次要複本能在故障移轉後接手。 在散發者端,設定每個次要複本主機的散發。 請指定當原始發行者加入至散發者時指定的相同散發資料庫和工作目錄。 如果您使用預存程序來設定分發,請使用 sp_adddistpublisher
將遠端發行者與分發者關聯。 如果 @login 和 @password 已用於原始發行者,請在您加入次要複本主機做為發行者時,針對每個項目指定相同的值。
EXECUTE sys.sp_adddistpublisher
@publisher = 'AGSecondaryReplicaHost',
@distribution_db = 'distribution',
@working_directory = '\\MyReplShare\WorkingDir',
@login = 'MyPubLogin',
@password = '**Strong password for publisher**';
在每個次要複本主機上,設定散發。 您可以將原始發行者的散發者識別為遠端散發者。 請使用最初在分發者端運行 sp_adddistributor
時所使用的相同密碼。 如果使用預存程式來設定散發,則會使用 sp_adddistributor
的 @password 參數來指定密碼。
EXECUTE sp_adddistributor
@distributor = 'MyDistributor',
@password = '**Strong password for distributor**';
在每個次要複本主機上,確定資料庫發行集的發送訂閱者顯示成連結的伺服器。 如果使用預存程式來設定遠端發行者,請使用 sp_addlinkedserver
將訂閱者(如果尚未存在)新增為發行者的連結伺服器。
EXECUTE sys.sp_addlinkedserver @server = 'MySubscriber';
5. 將原始出版者重新導向到 AG 收聽器名稱
在散發者端的散發資料庫中,執行預存程式 sp_redirect_publisher
,將原始發行者和已發佈的資料庫與可用性群組的可用性群組接聽程式名稱產生關聯。
USE distribution;
GO
EXECUTE sys.sp_redirect_publisher
@original_publisher = 'MyPublisher',
@publisher_db = 'MyPublishedDB',
@redirected_publisher = 'MyAGListenerName';
6.執行複寫驗證預存程序來驗證組態
在散發者端的散發資料庫中,執行預存程式 sp_validate_replica_hosts_as_publishers
,確認所有複製副本主機當前設置為作為已發行資料庫的發佈者。
USE distribution;
GO
DECLARE @redirected_publisher AS sysname;
EXECUTE sys.sp_validate_replica_hosts_as_publishers
@original_publisher = 'MyPublisher',
@publisher_db = 'MyPublishedDB',
@redirected_publisher = @redirected_publisher OUTPUT;
預存程式 sp_validate_replica_hosts_as_publishers
應該從每個可用性群組複本主機具有足夠授權的登入執行,以查詢可用性群組的相關信息。 不同於 sp_validate_redirected_publisher
,它會使用呼叫者的身份驗證,而且不會使用保留在 msdb.dbo.MSdistpublishers
中的登入來連線到可用性組群複本。
驗證次要複本主機時發生錯誤
當 sp_validate_replica_hosts_as_publishers
驗證不允許讀取存取或要求指定讀取意圖的次要複本主機時,發生下列錯誤。
訊息 21899,層級 11,狀態 1,程式
sp_hadr_verify_subscribers_at_publisher
,第 109 行在重新導向的發行者 'MyReplicaHostName' 上用以判斷原始發行者 'MyOriginalPublisher' 的訂閱者是否有 sysserver 項目的查詢失敗,發生錯誤 '976',錯誤訊息為「錯誤 976,層級 14,狀態 1,訊息:目標資料庫 'MyPublishedDB' 正參與可用性群組,目前無法供查詢存取。 數據移動已暫停,或可用性復本未啟用讀取存取。 若要允許唯讀存取可用性群組中的這個資料庫和其他資料庫,請啟用群組中一個或多個次要可用性複本的讀取存取。 如需詳細資訊,請參閱《SQL Server 在線叢書》中的 ALTER AVAILABILITY GROUP 語句。
複本主機 'MyReplicaHostName' 發生了一個或多個發行者驗證錯誤。
這是預期行為。 您必須直接在主機上查詢 sysserver 項目,藉以確認訂閱者伺服器項目是否存在這些次要複本主機上。
7.將原始發行者新增至復寫監視器
在每個可用性群組複本上,將原始發行者加入至複寫監視器。
相關工作
複製
建立和設定可用性群組
- 使用可用性群組精靈 (SQL Server Management Studio)
- 使用新增可用性群組對話方塊 (SQL Server Management Studio)
- 建立可用性群組 (Transact-SQL)
- 建立可用性群組 (SQL Server PowerShell)
- 在加入或修改可用性複本時指定端點 URL (SQL Server)
- 針對 AlwaysOn 可用性群組建立資料庫鏡像端點 (SQL Server PowerShell)
- 將次要複本聯結至可用性群組 (SQL Server)
- 針對可用性群組手動準備次要資料庫 (SQL Server)
- 將次要資料庫聯結至可用性群組 (SQL Server)
- 建立或設定可用性群組接聽程式 (SQL Server)