Настройка репликации в группах доступности Always On

Применимо к:SQL Server в Windows

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

1. Настройка публикаций и подписок базы данных

Настройка распространителя

Базу данных распространителя нельзя поместить в группу доступности с SQL Server 2012 и SQL Server 2014. Размещение базы данных распределения в группу доступности поддерживается с помощью SQL Server 2016 и выше, за исключением баз данных распределений, используемых в топологиях слияния, двунаправленной или одноранговой репликации. Дополнительные сведения см. в разделе Настройка базы данных распространителя репликации в группе доступности Always On.

  1. Настройте дистрибуцию у дистрибьютора. Если хранимые процедуры используются для настройки, выполните sp_adddistributor. Используйте параметр @password для идентификации пароля, который будет использоваться при подключении удаленного издателя к распространителю. Кроме того, пароль понадобится для каждого удаленного издателя при настройке удаленного распространителя.

    USE master;
    GO
    
    EXECUTE sys.sp_adddistributor
        @distributor = 'MyDistributor',
        @password = '**Strong password for distributor**';
    
  2. Создайте базу данных распространения на сервере-распространителе. Если хранимые процедуры используются для настройки, запустите sp_adddistributiondb

    USE master;
    GO
    
    EXECUTE sys.sp_adddistributiondb
        @database = 'distribution',
        @security_mode = 1;
    
  3. Настройка удаленного издателя. Если хранимые процедуры используются для настройки распространителя, запустите sp_adddistpublisher. Параметр @security_mode используется для определения, как хранимая процедура проверки издателя, запускаемая агентами репликации, подключается к текущему основному источнику. Если значение равно 1, то для подключения к текущей первичной реплике будет использоваться проверка подлинности Windows. Если значение равно 0, используется проверка подлинности службы SQL Server с предоставленными значениями @login и @password. Указанные имя входа и пароль должны быть действительными на каждой вторичной реплике, чтобы хранимая процедура проверки могла успешно подключиться к соответствующей реплике.

    Примечание.

    Если какие-либо изменённые агенты репликации выполняются на компьютере, отличном от дистрибьютора, то для использования проверки подлинности Windows при подключении к основному серверу потребуется настроить проверку подлинности Kerberos для взаимодействия между узлами размещения реплик. Использование учетной записи SQL Server для подключения к текущему основному экземпляру не потребует аутентификации Kerberos.

    USE master;
    GO
    
    EXECUTE sys.sp_adddistpublisher
        @publisher = 'AGPrimaryReplicaHost',
        @distribution_db = 'distribution',
        @working_directory = '\\MyReplShare\WorkingDir',
        @login = 'MyPubLogin',
        @password = '**Strong password for publisher**';
    

Дополнительные сведения см. в разделе sp_adddistpublisher.

Настройте издателя у исходного издателя

  1. Настройка удаленного распространения. Если хранимые процедуры используются для настройки издателя, запустите sp_adddistributor и укажите то же значение для @password, которое использовалось при запуске sp_adddistrbutor на дистрибьюторе для настройки распределения.

    EXECUTE sys.sp_adddistributor
        @distributor = 'MyDistributor',
        @password = 'MyDistPass';
    
  2. Включите базу данных для репликации. Если хранимые процедуры используются для настройки издателя, запустите sp_replicationdboption. Если для базы данных необходимо настроить как репликацию транзакций, так и объединённую репликацию, необходимо включить каждую из них.

    USE master;
    GO
    
    EXECUTE sys.sp_replicationdboption
        @dbname = 'MyDBName',
        @optname = 'publish',
        @value = 'true';
    
    EXECUTE sys.sp_replicationdboption
        @dbname = 'MyDBName',
        @optname = 'merge publish',
        @value = 'true';
    
  3. Создайте публикацию репликации, статьи и подписки. Дополнительные сведения о том, как настроить репликацию, см. в разделе «Публикация данных и объектов базы данных».

2. Настройка группы доступности

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

Создайте DNS-приемник для группы доступности, который будет использоваться агентами репликации для подключения к текущему основному экземпляру. Указанное имя прослушивателя будет использоваться в качестве объекта перенаправления для исходной пары «издатель/публикуемая база данных». Например, если для настройки группы доступности используется DDL, можно использовать следующий пример кода для указания прослушивателя группы доступности для существующей группы доступности с именем MyAG:

ALTER AVAILABILITY GROUP 'MyAG'
    ADD LISTENER 'MyAGListenerName' (WITH IP (('10.120.19.155', '255.255.254.0')));

Дополнительные сведения см. в статье Создание и настройка групп доступности (SQL Server).

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

На каждом узле вторичной реплики убедитесь, что SQL Server настроен для поддержки репликации. Следующий запрос можно запустить на каждом узле вторичной реплики, чтобы определить, установлена ли репликация:

USE master;
GO

DECLARE @installed AS INT;

EXECUTE @installed = sys.sp_MS_replication_installed;

SELECT @installed;

Если параметр @installed имеет значение 0, то к установке SQL Server необходимо добавить репликацию.

4. Настройте хосты вторичной реплики в качестве издателей репликации

Вторичная реплика не может выступать в качестве издателя или переиздателя репликации, но репликация должна быть настроена так, чтобы вторичная реплика могла взять на себя в случае отказа. На распространителе настройте распространение для каждого узла, размещающего вторичную реплику. Укажите ту же базу данных распространителя и рабочий каталог, что и при добавлении первоначального издателя к распространителю. Если вы используете хранимые процедуры для настройки распространения, используйте sp_adddistpublisher для связывания удаленных издателей с распространителем. Если @login и @password использовались для первоначального издателя, укажите те же значения каждого из этих параметров при добавлении узлов вторичной реплики в качестве издателей.

EXECUTE sys.sp_adddistpublisher
    @publisher = 'AGSecondaryReplicaHost',
    @distribution_db = 'distribution',
    @working_directory = '\\MyReplShare\WorkingDir',
    @login = 'MyPubLogin',
    @password = '**Strong password for publisher**';

На каждом узле вторичной реплики настройте распространение. Укажите распространителя оригинального издателя в качестве удаленного распространителя. Используйте тот же пароль, который был использован при первоначальном запуске sp_adddistributor у дистрибьютора. Если хранимые процедуры используются для настройки распределения, для указания пароля используется параметр @passwordsp_adddistributor.

EXECUTE sp_adddistributor
    @distributor = 'MyDistributor',
    @password = '**Strong password for distributor**';

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

EXECUTE sys.sp_addlinkedserver @server = 'MySubscriber';

5. Перенаправьте исходного издателя на имя слушателя AG

На распространителе в базе данных распределения запустите хранимую процедуру sp_redirect_publisher, чтобы связать исходного издателя и опубликованную базу данных с именем прослушивателя группы доступности.

USE distribution;
GO

EXECUTE sys.sp_redirect_publisher
    @original_publisher = 'MyPublisher',
    @publisher_db = 'MyPublishedDB',
    @redirected_publisher = 'MyAGListenerName';

6. Выполните хранимую процедуру проверки репликации, чтобы проверить конфигурацию.

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

USE distribution;
GO

DECLARE @redirected_publisher AS sysname;

EXECUTE sys.sp_validate_replica_hosts_as_publishers
    @original_publisher = 'MyPublisher',
    @publisher_db = 'MyPublishedDB',
    @redirected_publisher = @redirected_publisher OUTPUT;

Хранимая процедура sp_validate_replica_hosts_as_publishers должна выполняться под учетной записью с достаточными полномочиями на каждом узле реплики группы доступности для запроса сведений о группе доступности. В отличие от sp_validate_redirected_publisher, он использует учетные данные вызывающего и не использует учетные данные, сохраненные в msdb.dbo.MSdistpublishers, для подключения к репликам группы доступности.

Ошибка при проверке хостов вторичной реплики

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

Сообщение 21899, Уровень 11, Состояние 1, Процедура sp_hadr_verify_subscribers_at_publisher, Строка 109

Запрос на перенаправленном издателе «MyReplicaHostName» для определения того, имеются ли записи sysserver для подписчиков исходного издателя «MyOriginalPublisher» , завершился с ошибкой «976»; сообщение об ошибке: «Ошибка 976, уровень 14, состояние 1, сообщение: Целевая база данных «MyPublishedDB» участвует в группе доступности и в настоящее время недоступна для запросов. Либо перемещение данных приостановлено, либо реплика доступности не активирована для доступа на чтение. Чтобы разрешить доступ только для чтения к этой и другим базам данных в группе доступности, включите доступ на чтение для одной или нескольких вторичных реплик доступности в этой группе. Дополнительные сведения см. в электронной документации SQL Server в разделе, посвященном оператору ALTER AVAILABILITY GROUP.

Обнаружена одна или несколько ошибок при проверке издателя для хоста реплики «MyReplicaHostName».

Это ожидаемое поведение. Необходимо проверить наличие записей сервера подписчика на данных узлах вторичной реплики, выполнив запрос записей sysserver непосредственно на узле.

7. Добавление исходного издателя в монитор репликации

На каждой реплике группы доступности добавьте исходного издателя в Монитор репликации.

Репликация

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