Setting up Replication on a database that is part of an AlwaysOn Availability Group


This blog post gives detailed steps on setting up Transactional replication on a database that is part of an AlwaysOn availability Group. The below technet article lists the same with T-SQL statements:

http://technet.microsoft.com/en-us/library/hh710046.aspx

In this blog, I am going to list out the steps and screenshots too, wherever applicable. This blog doesn't include the steps to setup AlwaysOn AG.

 

What is Supported?

1) SQL Server replication supports the automatic failover of the publisher, the automatic failover of transactional subscribers, and the manual failover of merge subscribers. The failover of a distributor on an availability database is not supported.

2) In an AlwaysOn availability group a secondary database cannot be a publisher. Re-publishing is not supported when replication is combined with AlwaysOn Availability Groups.

 

 

 

 

Environment

AlwaysOn

SRV1: Synchronous Replica          - Current Primary

SRV2: Synchronous Replica

SRV3: Asynchronous Replica

Availability Group  :MyAvailabilityGroup

AG database        : MyNorthWind

AG Listener          : AGListener

 

 

Below is the environment we will be building at the end of this blog:

SRV1: Original Publisher

SRV2: Publisher Replica

SRV3: Publisher Replica

SRV4: Distributor and Subscriber (You can choose a completely new server to be the distributor as well, however do not have a distributor on any of the publishers in this case as the failover of a distributor is not supported in this case).

Overview

The following sections build the environment described above:

- Configure a remote distributor

- Configure the Publisher at the original Publisher

- Configure Remote distribution on possible publishers

- Configure the Secondary Replica Hosts as Replication Publishers

- Redirect the Original Publisher to the AG Listener Name

- Run the Replication Validation Stored Procedure to verify the Configuration

- Create a Subscription

 

1. Configure a remote distributor

The distributor should not be on the current (or intended) replica of the availability group of which the publishing database is part of. This just means that Distributor in our case, should not be on SRV1, SRV 2, SRV3 because these servers are part of the AG that has the publishing database (MyNorthWind).

We can have a dedicated server (which is not part of the AG) acting as a distributor or we can have the distributor on the subscriber (provided subscriber is not part of an AG).

 Let's configure distribution on SRV4.

  • Right click on Replication and select "Configure Distribution". The below screen comes up.

 

 

  • We'll select the first option as we want SRV4 as a distributor.

 

  •  Specify the snapshot folder location.

 

 

  • We'll go with the default distribution database folder.

 

 

 

  • In the below screen, we need to specify SRV1, SRV2 and SRV3 as publishers. Click on Add and then Add SQL Server Publisher. Connect to the 3 servers that can act as publishers. Note that SRV4 already exists in the list and you can choose to leave it that way.

.

 

 

  • This is how it should look like with all publishers added.

 

 

  • Enter in the password that the remote publishers will use to connect to the distributor.

 

 

  • Click on Next and then "Configure Distribution" and then next.
  • Click on Finish and now, the distribution is successfully set up.

 

2. Configure the Primary Replica as the original Publisher

Define SRV1 as the original publisher as it is currently the primary replica. You can have any of the AG replica as the original publisher, as long as it is the current primary replica.

 

  • In SQL Server Management Studio, use Object Explorer to connect to SRV1 and drill into Replication and then Local Publications.

 

  • Right click Local Publications and choose New Publication. Click Next.
  • In the Distributor dialog, choose the option 'Use the following server as the Distributor', click the Add button and add SRV4. Click Next.
  • Enter the same password that was used in Step 7 of "Configure the distributor".

 

 

  • Select the database to be published: MyNorthWind

 

  •  We'll be setting up Transactional Publication.

 

 

  • In the Articles and Filter Table rows dialogs, make your selections.
  • In the Snapshot dialog, for now, choose the 'Create a snapshot immediately..' and click Next.
  • In the Agent Security dialog box, specify the account under which Snapshot Agent and Log Reader Agent will run. You can also use the SQL Server Agent account to run the Snapshot Agent and Log Reader Agent.
  • In the Wizard Actions dialog, select 'Create the publication' and click Next.
  • Give the publication a name and click Finish in the Complete the Wizard dialog.

 

 

3) Configure Remote distribution on possible publishers

For the possible publishers and secondary replicas: SRV2 and SRV3, we'll have to configure the distribution as a remote distribution that we created on SRV1.

  • Launch SQL Server Management Studio. Using Object Explorer, connect to SRV2 and right click the Replication tab and choose Configure Distribution. Choose 'Use the following server as the Distributor' and click Add. Select SRV4 as the distributor.

 

 

  • In the Administrator Password dialog, specify the same password to connect to the Distributor.

 

  • In the Wizard Actions dialog, accept the default and click Finish.
  • Click finish and follow the same steps on SRV3 to configure the distribution as SRV4.

 

4) Configure the Secondary Replica Hosts as Replication Publishers

 In the event that a secondary replica transitions to the primary role, it must be configured so that the secondary can take over after a failover. All possible publishers will connect to the subscriber using a linked server. To create a linked server to the subscriber, SRV4 , run the below query on the possible publishers: SRV2 and SRV3.

EXEC sys.sp_addlinkedserver

@server = 'SRV4';

 

5) Redirect the Original Publisher to the AG Listener Name

We have already created an AG listener named AGListener. At the distributor (Connect to SRV4) , in the distribution database, run the stored procedure sp_redirect_publisher to associate the original publisher and the published database with the availability group listener name of the availability group.

 

USE distribution;

GO

EXEC sys.sp_redirect_publisher

@original_publisher = 'SRV1,

@publisher_db = 'MyNorthWind',

@redirected_publisher = 'AGListener';

 

6) Run the Replication Validation Stored Procedure to verify the Configuration

At the distributor (SRV4), in the distribution database, run the stored procedure sp_validate_replica_hosts_as_publishers to verify that all replica hosts are now configured to serve as publishers for the published database.

 

USE distribution;

GO

DECLARE @redirected_publisher sysname;

EXEC sys.sp_validate_replica_hosts_as_publishers

@original_publisher = 'SRV1',

@publisher_db = 'MyNorthWind',

@redirected_publisher = 'AGListener';

 

The stored procedure sp_validate_replica_hosts_as_publishers should be run from a login with sufficient authorization at each availability group replica host to query for information about the availability group. Unlike sp_validate_redirected_publisher, it uses the credentials of the caller and does not use the login retained in msdb.dbo.MSdistpublishers to connect to the availability group replicas.

 

7) Create a subscription

  • Right click on the publication: Publication_AlwaysOn and select New Subscriptions.

 

  •  Select the publication on SRV1.

 

 

  • We'll create a push Subscription, however a pull subscription will work as well.

 

 

  • Select the subscriber instance as SRV4 and a subscriber database

 

 

  • Select the SQL Server Agent credentials to run the Distribution Agent.

 

 

 

  • Select "Initialize at First Synchronisation" on the subscriber SRV4.

 

  • Select the subscriber instance as SRV4 and a subscriber database.

 

How to use the Replication Monitor ?

After failover to a secondary replica, Replication Monitor is unable to adjust the name of the publishing instance of SQL Server and will continue to display replication information under the name of the original primary instance of SQL Server. After failover, a tracer token cannot be entered by using the Replication Monitor, however a tracer token entered on the new publisher by using Transact-SQL, is visible in Replication Monitor.

At each availability group replica, add the original publisher to Replication Monitor.

 

Publisher failover Demonstration

In this section, we'll failover the Availability Group from the current primary replica and replication publisher: SRV1 to secondary replica and possible publisher:SRV2. This will not impact the working of Replication in any way.

 

  • The Failover Availability Group Wizard comes up.

 

  • Select the secondary replica you want to failover the AG to, in this case, SRV2.

 

 

  • Connect to SRV2 which is the SQL instance acting as the secondary replica.

 

 

  • Click on Finish and the failover to SRV2 should complete successfully.
  • We can also failover to asynchronous secondary replica and possible publisher, SRV3 in the same way.

 

 

  • This will cause data loss as SRV3 is an Asynchronous Replica.

 

  • Click on Finish.
  • However, after the failover to a Asynchronous secondary replica, the data movemnet on the AG database, MyNorthWinds is paused on the 2 secondary replicas-SRV1 and SRV2.
  • The database state will show "Not Synchronizing" on SRV2 and SRV1.

 

 

  • Right-click the availability database, MyNorthwind under AlwaysOn High Availability drop-down and select "Resume Data Movement". Follow the same on SRV1.

 

  • We can go with the default selection "Continue executing after error".

 

 

 

  • Resume data movemnet on SRV1 as well and AlwaysOn database MyNorthWind will show as "Synchronizing" instead of "Synchronized" as SRV3 is the primary replica now and it was et as an Asynchronous Replica initially.
  • After making these changes, Replication will function as usual.

 

 

Prabhjot Kaur

SQL Server AlwaysOn Support Team


Comments (28)

  1. CJ Logan says:

    Why can the distributor not be on the current (or intended) replica of the availability group of which the publishing database is part of ? what is the reasoning behind this requirement ?

  2. Logan

    Having the distribution database on any of the replicas of the AG is not a good design. If any of those replicas was to go down, replication would fail as the Distribution DB will be inaccessible.

    So, it is recommended to have the distribution DB outside of the AG. You can also think of having the distribution DB on a SQL FCI.

  3. Alfonso Valencia says:

    Thx Prabhjot Kaur, this was very helpful, BTW snapshot, p2p and merge are replication options to configure for an AG db? or only Transactional?

  4. Glad it helped Alfonso.  Transactional, Snapshot and Merge replication are supported within an AG.

  5. nice work

    but when i am gonna create an AG the following error shown

    > the following folder locations do not exist on the server instance that hosts secondary replica

    cdn.imghack.se/…/e1111ce11e21144ac7c99baf05fe6429.jpg ??

  6. Helmy

    You are seeing that error because the database file locations are not the same on all your replicas.

    The AG creation wizard checks for the same path on all the secondary replicas you are trying to add if you select the Full synchronization method, and if the data and log file paths are not the same across all the replicas, throws up the error you mentioned.

    The workarounds to this error are:

    1) Detach and attach the database to have the same file paths across all the replicas. This would mean you can use the full synchronization method to restore the copy of database on the secondary.

    2) Use the "Join Only" method and do the database restore manually on the secondary replicas. This will skip the database file location check while creating the AG.

    HTH!

  7. Jim says:

    Excellent article.. really helped getting it set up.  When we failed over we had an issue with authentication between the distributor and secondary.  Turned out to be that the secondary didn't have the distributor as a linked server.  I think in the example it gets lost because the distributor and subsciber are the same box.  So maybe a step 4a for add linked server to the distributor if it is seperate would be a good addition.

  8. Yasser says:

    If we can't setup AG for the Distributor, what are the options for a distributor to failover "DR Site" to a remote site that is the destination for Publishers & Subscribers replicas?

  9. Patrick Purviance says:

    If you choose to configure pull subscriptions to spread the replication load across multiple agents/hosts, do you still need the linked servers configured?  In the case of Merge Replication with potentially hundreds of subscribers, that seems like a nasty list of linked servers to maintain.  Thanks in advance!

  10. Pablo Lin says:

    can you give more details of the linked server that is needed to be created in each secondary replica? linked server is needed for both push and pull replication? what kind of data flows from publisher to subscribers thru linked servers? and what are the minimum security settings needed

    thanks

  11. AlwaysOn Freshman says:

    If SRV1 is totally power off, will the data replication be suspended?

  12. Rajeev Chaudhary says:

    Thanks for the procedure to setup replication with AGs! Replication worked for me as well after the primary replica fails over to secondary server. However, once the original primary server was taken offline(shutdown), replication stopped working completely. The log reader did not even pick up transactions from the secondary replica(which becomes primary when the original primary goes down) publisher.

    Taking the example in this article, after MyNorthWind DB is failed over from SRV1 to SRV2 replication keeps working only until SRV1 is online. Once SRV1 is taken offline, replication stops syncing data between SRV2 and SRV4.

  13. Kevin Lobo says:

    Hello Prabhjot,

    Thank you for the amazingly detailed article – great help. My question, our current SQL2008-physical FCI is the publisher and distributor.

    If the primary node-SRV1 is made the distributor, other than being the single point of failure, are there any technical road blocks in terms of smooth functioning of the SQL Server?

    Thank you,

  14. Manu KApoor says:

    Great Article, exactly what I was looking for !

  15. coppershep says:

    I have the same issues Rajeev Chaudhary, we can failover and things still work, but when we take the first server down, it stops working.  We can watch the distributer dashboard and the replication agent stays on one server and doesn't fail over to a different AG node when the AG is failed over.

  16. Kokoy says:

    thanks for the article.

    Do you know if the transactional with immediate update is supported. I have a publisher which is not part of AG, and want AG as a subscriber, but some updates are done on the subscriber.

  17. venubabu says:

    Hi,
    while performing the above replication scenario i got the following problems.
    problem 1 : job invocation engine is still running(error no : 311)
    Problem 2 : Engine threats failed to stepto stop after 2 seconds of waiting(error no : 240)

    windows event log :
    ——————
    The application specific permission settings do not grant Local Activation(Error no : 10016)
    can you please help me regarding those errors what i have mentioned above.

    Earlier reply is greatful to me.

    Thanks and Regards,
    venubabu

  18. venubabu says:

    Data is not travelling from original publisher to subscriber.
    Regarding above scenario i got following problems.
    After failover also data is not reflecting from publisher to subscriber.
    problem 1 : job invocation engine is still running(error no : 311)
    Problem 2 : Engine threats failed to stepto stop after 2 seconds of waiting(error no : 240)

    windows event log :
    ——————
    The application specific permission settings do not grant Local Activation(Error no : 10016)
    can you please help me regarding those errors what i have mentioned above.

    Earlier reply is greatful to me.

    Thanks and Regards,
    venubabu

  19. venubabu says:

    Data is not travelling from original publisher to subscriber.
    Regarding above scenario i got following problems.
    After failover also data is not reflecting from publisher to subscriber.
    can you please focus on this issue regardng above scenario.

    windows event log :
    ——————
    The application specific permission settings do not grant Local Activation(Error no : 10016)
    can you please help me regarding those errors what i have mentioned above.

    Earlier reply is greatful to me.

    Thanks and Regards,
    venubabu

  20. Munish Sharma says:

    Can we use local distributor in each node, in Always on Availability group , for replication ?

  21. Yue says:

    Dear Team,

    Would you please give an explanation that if one of the replica is crashed, will the replication work again?
    I did a bunch of tests, only to find it failed. Is it by design and we don’t have other ways to make it work?
    In this way, what’s the usage that we need an AG with replication?

    Thanks

  22. Pankaj says:

    Great article, have one question or has anyone tried to setup transaction replication with secondary set to NOT readable.

    Thanks

  23. MS says:

    Hello,

    While running this section

    USE distribution;
    GO
    DECLARE @redirected_publisher sysname;
    EXEC sys.sp_validate_replica_hosts_as_publishers
    @original_publisher = ‘pub_server’,
    @publisher_db =’pub_db’,
    @redirected_publisher = @redirected_publisher output;

    Getting the below error-

    Msg 21892, Level 16, State 1, Procedure sp_hadr_validate_replica_hosts_as_publishers, Line 99
    Unable to query sys.availability_replicas at the availability group primary associated with virtual network name
    ‘xxx’ for the server names of the member replicas: error = 18456, error message = Error 18456, Level 14, State 1,
    Message: Login failed for user ‘NT AUTHORITY\ANONYMOUS LOGON’..’,

    Please suggest a fix.

  24. MS says:

    Hello,

    While running this section

    USE distribution;
    GO
    DECLARE @redirected_publisher sysname;
    EXEC sys.sp_validate_replica_hosts_as_publishers
    @original_publisher = ‘pub_server’,
    @publisher_db =’pub_db’,
    @redirected_publisher = @redirected_publisher output;

    Getting the below error-

    Msg 21892, Level 16, State 1, Procedure sp_hadr_validate_replica_hosts_as_publishers, Line 99
    Unable to query sys.availability_replicas at the availability group primary associated with virtual network name
    ‘server1 for the server names of the member replicas: error = 18456, error message = Error 18456, Level 14, State 1,
    Message: Login failed for user ‘NT AUTHORITY\ANONYMOUS LOGON’..’,

    Please suggest a fix.

    1. Chris Skorlinski says:

      Msg 21892, Level 16, State 1, Procedure sp_hadr_validate_replica_hosts_as_publishers, Line 99
      Unable to query sys.availability_replicas at the availability group primary associated with virtual network name
      ‘server1 for the server names of the member replicas: error = 18456, error message = Error 18456, Level 14, State 1,
      Message: Login failed for user ‘NT AUTHORITY\ANONYMOUS LOGON’..’,

      To correct this error, run the Validate stored procedure when RDP session connected directly to the Distributor. I’ll update ReplTalk blog with details.

  25. Priyank says:

    Amazing !! Thank you so much. That’s the exact steps required to do it all. Only one issue I faced that my replica server already configured with distribution. after a while I realized that I need to disable them first in order to get configure it again. Otherwise, everything was seamless. thank you ones again.

  26. Jon says:

    Hello,

    Say that I want to fail over to a new node with replication in tact, but decommission the original publisher. Are you able to change the original publisher so that it is view-able from the new primary node in replication monitor?

    This is a great article. I have a highly transactional publication that failed over with no issues.

  27. Peter says:

    Very good and thorough doc. Thanks for such a high-quality document!

Skip to main content