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


Настройка репликации для групп доступности AlwaysOn (SQL Server)

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

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

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

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

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

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

    USE master;  
    GO  
    EXEC 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  
    EXEC sys.sp_adddistpublisher  
        @publisher = 'AGPrimaryReplicaHost',  
        @distribution_db = 'distribution',  
        @working_directory = '\\MyReplShare\WorkingDir',  
        @login = 'MyPubLogin',  
        @password = '**Strong password for publisher**';  
    

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

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

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

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

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

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

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

Создайте прослушиватель 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 int;  
EXEC @installed = sys.sp_MS_replication_installed;  
SELECT @installed;  

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

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

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

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

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

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

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

EXEC sys.sp_addlinkedserver   
    @server = 'MySubscriber';  

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

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

USE distribution;  
GO  
EXEC 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 sysname;  
EXEC 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.

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

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

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

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

Связанные задачи

Репликация

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

См. также

Предварительные требования, ограничения и рекомендации для групп доступности AlwaysOn (SQL Server)
Общие сведения о группах доступности AlwaysOn (SQL Server)
Группы доступности AlwaysOn: взаимодействие (SQL Server)
Репликация SQL Server