Поделиться через


Подписчики репликации и группы доступности AlwaysOn (SQL Server)

Если происходит переключение группы доступности AlwaysOn, содержащей базу данных, являющуюся подписчиком репликации, подписка репликации может завершиться ошибкой. Для подписчиков транзакционной репликации, агент распределения будет продолжать репликацию автоматически после переключения на резервную систему, если подписка была создана с использованием имени прослушивателя группы доступности. Для подписчиков извлечения транзакционной репликации агент распространения будет автоматически продолжать процесс репликации после аварийного переключения, если подписка была создана с использованием имени прослушивателя группы доступности, а исходный сервер подписчика остается в рабочем состоянии. Это объясняется тем, что задания агента распространения создаются только на исходном подписчике (первичной реплике группы доступности, AG). Для подписчиков объединения администратор репликации должен вручную перенастроить подписчика, создав подписку заново.

Что поддерживается

Репликация SQL Server поддерживает автоматическое переключение на резервный сервер издателя, автоматическое переключение на резервный сервер подписчиков транзакций и переключение на резервный сервер подписчиков слияния вручную. Отработка отказа распространителя в базе данных доступности не поддерживается. AlwaysOn нельзя сочетать с сценариями Websync и SQL Server Compact.

Переключение подписки на вытягивающее слияние

Подписка на вытягивание завершается сбоем при отработке отказа группы доступности, так как агент извлечения не может найти задания, хранящиеся в базе данных msdb экземпляра сервера, на котором размещена первичная реплика; значение недоступно из-за сбоя экземпляра сервера.

Переключение при отказе в подписке на слияние с push-обновлением

Сбой подписки push возникает при переключении группы доступности, поскольку агент push больше не может подключиться к исходной базе данных подписки на исходном подписчике.

Как создать транзакционную подписку в среде AlwaysOn

Для репликации транзакций выполните следующие действия, чтобы настроить и отработку отказа группы доступности подписчика:

  1. Перед созданием подписки добавьте базу данных подписчика в соответствующую группу доступности AlwaysOn.

  2. Добавьте прослушиватель группы доступности подписчика в качестве связанного сервера ко всем узлам группы доступности. Этот шаг гарантирует, что все потенциальные партнеры по отказоустойчивости осведомлены и могут подключаться к слушателю.

  3. Используя скрипт в разделе "Создание принудительной подписки репликации транзакций" , создайте подписку с помощью имени прослушивателя группы доступности подписчика. После отработки отказа имя прослушивателя всегда останется допустимым, в то время как фактическое имя сервера подписчика будет зависеть от фактического узла, который стал новым первичным.

    Замечание

    Подписка должна быть создана с помощью скрипта Transact-SQL и не может быть создана с помощью Management Studio.

  4. При создании подписки с вытягиванием:

    1. В Management Studio на основном узле подписчика откройте дерево агента SQL Server.

    2. Определите задание агента распространителя по запросу и измените задание.

    3. На шаге задания запуска агента проверьте -Publisher и -Distributor параметры. Убедитесь, что эти параметры содержат правильные имена прямых серверов и экземпляров издателя и сервера распространителя.

    4. Измените параметр -Subscriber на имя прослушивателя группы доступности подписчика.

Когда вы создаёте свою подписку, следуя этим шагам, тогда после отработки отказа вам не придется ничего делать.

Создание принудительной подписки репликации транзакций

-- commands to execute at the publisher, in the publisher database:  
use [<publisher database name>]  
EXEC sp_addsubscription @publication = N'<publication name>',   
       @subscriber = N'<availability group listener name>',   
       @destination_db = N'<subscriber database name>',   
       @subscription_type = N'Push',   
       @sync_type = N'automatic', @article = N'all', @update_mode = N'read only', @subscriber_type = 0;  
GO  
  
EXEC sp_addpushsubscription_agent @publication = N'<publication name>',   
       @subscriber = N'<availability group listener name>',   
       @subscriber_db = N'<subscriber database name>',   
       @job_login = null, @job_password = null, @subscriber_security_mode = 1;  
GO  

Возобновление агентов слияния после отработки отказа группы доступности подписчика

Для слияния репликаций администратор репликации должен вручную перенастроить подписчика следующим образом:

  1. Выполните sp_subscription_cleanup, чтобы удалить старую подписку подписчика. Выполните это действие на новой первичной реплике (которая ранее была вторичной репликой).

  2. Повторно создайте подписку, создав новую подписку, начиная с нового моментального снимка.

Замечание

Текущий процесс неудобен для подписчиков слияния, однако основной сценарий использования репликации слиянием — это отключённые пользователи (настольные компьютеры, ноутбуки, карманные устройства), которые не будут использовать группы доступности AlwaysOn на стороне подписчика.