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


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

Область применения:SQL Server

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

Поддерживаемые возможности

Репликация SQL Server поддерживает автоматическую отработку отказа издателя и автоматическую отработку отказа подписчиков транзакций. Подписчики слияния могут быть частью группы доступности. Однако для настройки нового подписчика после переключения на резерв требуются действия вручную. Группы доступности не могут сочетаться с сценариями WebSync и SQL Server Compact.

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

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

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

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

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

    Примечание.

    Чтобы создать подписку, необходимо использовать скрипт Transact-SQL. Вы не можете использовать Management Studio.

  4. Создание подписки по запросу.

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

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

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

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

-- commands to execute at the publisher, in the publisher database:
USE [<publisher database name>];
GO

EXEC sp_addsubscription @publication = N'<publication name>',
    @subscriber = N'<AG 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'<AG listener name>',
    @subscriber_db = N'<subscriber database name>',
    @job_login = NULL,
    @job_password = NULL,
    @subscriber_security_mode = 1;
GO

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

-- commands to execute at the subscriber, in the subscriber database:
USE [<subscriber database name>];
GO

EXEC sp_addpullsubscription @publisher = N'<publisher name>',
    @publisher_db = N'<publisher database name>',
    @publication = N'<publication name>',
    @subscription_type = N'pull';
GO

EXEC sp_addpullsubscription_agent @publisher = N'<publisher name>',
    @subscriber = N'<AG listener name or alias>',
    @distributor = N'<distributor AG listener name>', -- this parameter should only be used if the distribution database is part of an AG.
    @publisher_db = N'<publisher database name>',
    @publication = N'<publication name>',
    @job_login = NULL,
    @job_password = NULL,
    @subscriber_security_mode = 1;
GO

Требования к слушателю группы доступности

При запуске sp_addpullsubscription_agent для подписчика, который является частью группы доступности, необходимо передать значение параметра @subscriber в хранимую процедуру как имя прослушивателя группы доступности. Если вы запускаете SQL Server 2016 (13.x) и более ранние версии или SQL Server 2017 (14.x) до накопительного обновления 16, то хранимая процедура не ссылается на имя слушателя доступной группы (AG). Он создает подписку с именем сервера подписчика, на котором выполняется команда. Чтобы устранить эту проблему, вручную обновите параметр @subscriber на агенте распределения репликации, используя значение имени прослушивателя группы доступности.

Если прослушиватель группы доступности подписчика использует нестандартный порт, то указание номера порта в составе имени прослушивателя группы доступности в параметре @subscriber не поддерживается в Windows. В качестве обходного решения можно создать псевдоним прослушивателя и порта на издателе, распространителю и сервере подписчика с помощью псевдонимов (SQL Server Configuration Manager) или средства клиентской сетевой программы SQL Server (cliconfg) для SQL Server 2022 (16.x) и более поздних версий и передать псевдоним в качестве @subscriber значения параметра.

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

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

  1. Для удаления старой подписки подписчика выполните процедуру sp_subscription_cleanup. Запустите действие на новой первичной реплике (которая раньше была вторичной репликой).

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

Примечание.

Процесс является неудобным для подписчиков слияния репликаций. Однако основным сценарием репликации слиянием являются отключенные пользователи (настольные компьютеры, ноутбуки, мобильные устройства), которые не используют группы доступности на стороне подписчика.