zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    C#关键字
    委托
    async和await异步编程
    IOC、DI,IoC容器
    数据库脏读、幻读
    关于vue 从零开始的搭建注意事项
    C#.NET WebApi返回各种类型(图片/json数据/字符串)
    win7下IIS配置以及域名映射方法
    18/11月 日常总结
    Js 数组去重的几种方法总结
  • 原文地址:https://www.cnblogs.com/stswordman/p/3252549.html
Copyright © 2011-2022 走看看