暫停 AlwaysOn 可用性組複製以進行故障轉移
我們目前正在實施一個新的軟體包,它的一部分系統使用數據庫複製(但不支持 AlwaysOn 可用性組)從另一個支持 AOAG 的數據庫複製。
目前,他們只支持通過他們的安裝程序進行複制設置,這會一次性在發布者和訂閱者伺服器上創建整個配置。
它使用事務複製,並且有拉訂閱和推訂閱。
安裝程序在發布者上創建分發者,我假設它會在故障轉移後中斷複製,並需要生成新的快照和重新初始化訂閱。
假設我們正在進行計劃中的故障轉移(例如用於作業系統更新檔),希望暫停複製,直到我們可以通過分發伺服器故障轉移回節點。
我是否在正確的軌道上說“暫停”複製的最可靠方法是在故障轉移到(非分發器)節點之前在發布者(對於 PUSH)和訂閱者(對於 PULL)上使用 sp_MSstopdistribution_agent,然後執行sp_MSstartdistribution_agent 在我們再次故障恢復後?
我們在發布者和訂閱者上都使用 SQL 2014。
我認為你在這裡絕對正確:
安裝程序在發布者上創建分發者,我假設它會在故障轉移後中斷複製,並需要生成新的快照和重新初始化訂閱。
將複製與可用性組相關聯的一個好方法是:
主副本是 SP1,輔助副本是 SS2。分發器位於另一台伺服器 SD3 上。複製工作正常。我們使用以下腳本將原始發布者重定向到 AG 偵聽器名稱:
USE distribution; GO EXEC sys.sp_redirect_publisher @original_publisher = 'MyPublisher', @publisher_db = 'MyPublishedDB', @redirected_publisher = 'MyAGListenerName';
您可以在此連結上找到更多詳細資訊:
在 AlwaysOn 可用性組中,輔助數據庫不能是發布者。
不支持可用性數據庫上的分發伺服器故障轉移。
我建議您使用另一台伺服器作為分發伺服器,因為您可能已經這樣做了。
我通常使用另一台伺服器作為分銷商和幾個分銷商數據庫,具體取決於您的出版物的大小和繁忙程度。
我不完全確定推送訂閱,但對於其他內容,您可以查看此連結:
SRV1:原始發布者
SRV2:發布者副本
SRV3:發布者副本
SRV4:分發伺服器和訂閱伺服器(您也可以選擇一個全新的伺服器作為分發伺服器,但是在這種情況下,任何發布伺服器上都沒有分發伺服器,因為在這種情況下不支持分發伺服器的故障轉移)。
也許這不適用於您的情況,但僅供參考:
為 Always On 可用性組配置複製 (SQL Server)
我是否在正確的軌道上說“暫停”複製的最可靠方法是在故障轉移到(非分發器)節點之前在發布者(對於 PUSH)和訂閱者(對於 PULL)上使用 sp_MSstopdistribution_agent,然後執行sp_MSstartdistribution_agent 在我們再次故障恢復後?
我會說在大多數情況下是的,我曾經使用過您在此連結上看到的這些程序(包括腳本):
現在我更喜歡使用以下方法:
-- on the publisher -- this gives you the distributor server name and distributor database name sp_helpdistributor -- now connect to the distributor server and database -- get the job name -- get the distributor job name for the publication you want -- in this example my publication is called 'DEOrder' use distribution go
我的數據庫和出版物
ATOrder
在下面的範例中被呼叫。-- the snapshot agent select job_name=name, publisher_db, publication from distribution.dbo.mssnapshot_agents where publisher_db = N'ATOrder' -- the distributor jon transactional replication select job_name=name, publisher_db, publication from distribution.dbo.MSlogreader_agents where publisher_db = N'ATOrder' -- if it is merge replication select job_name=name, publisher_db, publication from MSmerge_agents where publisher_db = N'ATOrder' -- who are my publishers and who are my subscribers select * from MSsubscriber_info -- just checking dbs select * from MSpublisher_databases -- get the distributor job (log reader) for a specific publication select job_name=name, publisher_db, publication from distribution.dbo.MSlogreader_agents where publisher_db = N'ATOrder' -- take note of the job name --my_publication_server_name_and_instance2-ATOrder-25 -- check that the job is running at the moment - it must be!! sp_runningjobs 'my_publication_server_name_and_instance2-ATOrder-25' --check I am targeting the right job exec msdb.dbo.sp_help_job @job_name = 'my_publication_server_name_and_instance2-ATOrder-25' --stop the job exec msdb.dbo.sp_stop_job @job_name = 'my_publication_server_name_and_instance2-ATOrder-25' --start the job exec msdb.dbo.sp_start_job @job_name = 'my_publication_server_name_and_instance2-ATOrder-25'
欲了解更多資訊,看看一切是否正常,或者誰和什麼變得有點慢,你可以查看這個連結:
我們在發布者和訂閱者上都使用 SQL 2014。
幸運的你