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


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

Область применения: SQL Server — только Для Windows

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

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

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

Базу данных распространителя нельзя поместить в группу доступности с SQL Server 2012 и SQL Server 2014. Размещение базы данных распространителя в группе доступности поддерживается в SQL 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')));

Дополнительные сведения см. в статье Ссылки на разделы, посвященные созданию и настройке групп доступности Always On.

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» участвует в группе доступности и в настоящее время недоступна для запросов. Либо перемещение данных приостановлено, либо реплика доступности не активирована для доступа на чтение. Чтобы разрешить доступ только для чтения к этой и другим базам данных в группе доступности, задайте доступ для чтения одной или нескольким вторичным репликам доступности в группе. Дополнительные сведения см. в инструкции ALTER AVAILABILITY GROUP в документации SQL Server Books Online.

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

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

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

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

Репликация

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