Quantcast
Channel: MSDN Blogs
Viewing all articles
Browse latest Browse all 29128

AlwaysOn + Transactional replication

$
0
0

Replication Subscribers and AlwaysOn Availability Groups (SQL Server) http://msdn.microsoft.com/en-us/library/hh882436.aspx

本文将介绍如何实现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进行完全备份: backupdatabase tranPubDB todisk='tranpubdb.bak'withinit
  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高可用性的关键步骤。

    EXECsys.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,将发布设置为运行从备份初始化: EXECsp_changepublication@publication ='tranPublicationTest', @property ='allow_initialize_from_backup', @value ='true';
  4. 连接到新的Denali5. 进入订阅数据库:
    1. 得到当前订阅的LSN: SELECT transaction_timestamp,*FROM MSreplication_subscriptions;
    2. 清除订阅数据库的原数据:EXECsp_subscription_cleanup@publisher ='Denali1', @publisher_db ='tranPubDB'
  5. 连接到发布服务器,将新的primaryserver的数据库指定为订阅:

    EXECsp_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;

       

    执行完这步之后,事务复制就可以正常工作了。


Viewing all articles
Browse latest Browse all 29128

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>