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


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

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

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

Репликация SQL Server поддерживает автоматический переход издателя и подписчиков транзакции и переход подписчиков на публикацию слиянием вручную. Отработка отказа распространителя на базе данных доступности не поддерживается. AlwaysOn нельзя объединять со сценариями Websync и ssNoVersion 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 в подписчике.