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


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

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

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

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

Перенос подписки слиянием по запросу

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

Перенос принудительной подписки слиянием

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

Создание подписок транзакций в среде 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 в подписчике.