Alwayson+Replication


本文將介紹如何實現Alwayson + Replication ,通過AlwaysOn實現Publicationdatabase的高可用性,使Publicationdatabasefailover 之后事務復制可以正常運行。

   

拓撲如下:

   

   

Publisher primary

Denali1

Publication database

tranPubDB

Publication name

tranPublicationTest

Publisher secondary

Denali3

Distributor

Denali2

  

  

AlwaysOn Availability Group name

Liwei

Listener

liweion

   

   

   

   

首先配置AlwaysOn Availability Group

  1. 登陸Denali1tranPubDB進行完全備份: backup database tranPubDB to disk='tranpubdb.bak' with init
  2. 右鍵點擊AlwaysOn High Availability

  1. 選擇TranPubDb,如果之前不進行備份,Status會顯示'Full backup is required'的提示。

   

  1. 指定Replicas:添加priamry secondary

  1. 添加ListenerListener將會用於后續的操作。

  1. 選擇初始化數據的方式。

  1. 驗證。

   

AlwaysOn的配置就結束了。

   

接下來配置事務復制

(1,2,3步的配置和普通的事務復制完全一致,詳細步驟請您參考http://www.sql-server-performance.com/2010/transactional-replication-2008-r2/)

  1. 連接Denali2:
    1. Denali2配置為distributor .
    2. Denali2里指定Denali1Denali3為發布服務器
  2. 連接Denali3:指定Denali2為分發服務器
  3. 連接Denali1:
    1. 指定Denali2為分發服務器.
    2. 創建發布
  4. 連接Denali2, 在分發數據庫下執行下面的語句. 執行下面的語句之后,logreader就可以通過Listener連接到正在工作的primaryserver了。請注意,這一步是實現Publication database高可用性的關鍵步驟。

    EXEC sys.sp_redirect_publisher 

    @original_publisher = 'Denali1',

    @publisher_db = 'tranPubDB',

    @redirected_publisher = 'liweion';----將之前創建的listener帶入到這個參數

    配置步驟就全部完成了,之后您可以任意添加訂閱,當failover發生之后,事務復制也可以正常工作。

       

       

       

       

    如何配制Subscription database +AlwaysON

    需要說明的是:當subscription database availability group發生failover后,replication是無法自動工作的,我們需要一些手工操作)

    當前拓撲如下

       

Publisher

Denali1

Publication database

tranPubDB

Publication name

tranPublicationTest

Distributor

Denali2

Subscriber  primary

Denali4

Subscriber  secondary

Denali5

Subscription database

subDB

   

   

  1. 假設subscriberAvailabilitygroup發生了failover,此時distrubitonagent是無法工作的。
  2. 切換之后,Denali5成為新的primary
  3. 連接到發布服務器Denali1,進入發布數據庫tranPubDB,將發布設置為運行從備份初始化: EXEC sp_changepublication @publication = 'tranPublicationTest', @property = 'allow_initialize_from_backup', @value = 'true';
  4. 連接到新的Denali5. 進入訂閱數據庫:
    1. 得到當前訂閱的LSN: SELECT transaction_timestamp, * FROM MSreplication_subscriptions;
    2. 清除訂閱數據庫的原數據:EXEC sp_subscription_cleanup @publisher = 'Denali1', @publisher_db = 'tranPubDB'
  5. 連接到發布服務器,將新的primaryserver的數據庫指定為訂閱:

    EXEC sp_addsubscription -- past the LSN before executing

    @publication = 'tranPublicationTest',

    @subscriber = 'Denali5',

    @destination_db = 'subDB',

    @subscription_Type = 'Push',

    @sync_Type = 'initialize from LSN',

    @subscriptionlsn = 0x00000023000000E60003000000000000, ----這個值就是我們在4 a)步驟得到的transaction_timestamp

    @article = 'all',

    @update_mode = 'read only',

    @subscriber_type = 0;

       

    執行完這步之后,事務復制就可以正常工作了。

 

Update 20190104

====

Since SQL Server 2017, it's able to add distribution database to AG group

https://docs.microsoft.com/en-us/sql/relational-databases/replication/configure-distribution-availability-group?view=sql-server-2017

It also support automatic failover on subscriber

https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/replication-subscribers-and-always-on-availability-groups-sql-server?view=sql-server-2017


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM