Репликация, отслеживание изменений, изменение данных в группах доступности AlwaysOn
Область применения:SQL Server
Репликация SQL Server, сбор измененных данных (CDC) и отслеживание изменений (CT) поддерживаются в группах доступности AlwaysOn. Группы доступности AlwaysOn помогают обеспечить высокий уровень доступности и другие возможности восстановления базы данных.
Общие сведения о репликации с группами доступности
Перенаправление издателя
Когда опубликованная база данных знает о группах доступности AlwaysOn, распространитель, предоставляющий доступ агента к базе данных публикации, настраивается с redirected_publishers записями. Эти записи перенаправляют первоначально настроенные пары «издатель-база данных», позволяя при соединении издателя с базой данных публикации указывать имя прослушивателя группы доступности. Установленные подключения через имя прослушивателя группы доступности завершаются сбоем при отработки отказа. Когда агент репликации перезапускается после отработки отказа, подключение автоматически перенаправляется на новый первичный объект.
В группе доступности (AG) вторичная база данных не может быть издателем. Повторная публикация поддерживается только при сочетании репликации транзакций с группами доступности AlwaysOn.
Если опубликованная база данных является членом группы доступности, а издатель перенаправляется, то он должен перенаправляться на имя прослушивателя группы доступности, связанное с группой доступности. Возможно, перенаправление не осуществляется на явно указанный узел.
Примечание.
После переключения на вторичную реплику после отказа, монитору репликации не удается изменить имя экземпляра публикации SQL Server и он продолжает показывать сведения о репликации под именем изначального основного экземпляра SQL Server. После переключения на резервный сервер невозможно ввести маркер трассировки через монитор репликации, однако маркер трассировки, введенный на новом издателе с помощью Transact-SQL, отображается в мониторе репликации.
Общие изменения агентов репликации для поддержки групп доступности
Три агента репликации были изменены для поддержки групп доступности AlwaysOn. Агенты средства чтения журналов, моментального снимка и слияния теперь опрашивают базу данных распространителя на наличие перенаправленного издателя и используют возвращенное имя прослушивателя группы доступности, если был объявлен перенаправленный издатель, для соединения с издателем базы данных.
По умолчанию, когда агенты запрашивают распространителя, чтобы определить, был ли перенаправлен исходный издатель, соответствие текущего целевого объекта или перенаправления проверяется перед возвратом перенаправленного узла агенту. Рекомендуется использовать именно такое поведение. Однако, если запуск агента происходит часто, накладные расходы, связанные с хранимой процедурой проверки, могут считаться чрезмерно высокими. В агенты чтения журнала, моментальных снимков и слияния добавлен новый параметр командной строки BypassPublisherValidation. Если указан этот параметр, то перенаправляемый издатель сразу возвращается агенту, при этом хранимая процедура проверки не выполняется.
Ошибки, возвращаемые хранимыми процедурами проверки, записываются в журналы агента. Эти ошибки с серьезностью больше или равно 16 приводят к прекращению работы агентов. Агенты имеют специальное средство повтора, которое позволяет им обрабатывать отключение от опубликованной базы данных, когда она перемещается на новый первичный источник.
Изменения агента чтения журналов
Агент чтения журналов имеет следующие изменения.
Консистентность реплицированной базы данных
Когда опубликованная база данных является членом группы доступности, по умолчанию средство чтения журналов не обрабатывает записи журналов, которые еще не были затвердены во всех вторичных репликах группы доступности. Это гарантирует, что при отработке отказа все строки, реплицированные на подписчик, также будут присутствовать в новой базе данных-источнике.
Если у издателя только две реплики доступности (одна первичная и одна вторичная) и происходит отказ, исходная первичная реплика остается недоступной, так как средство чтения журнала не продолжает работу, пока все вторичные базы данных не будут снова в сети или пока вышедшие из строя вторичные реплики не будут удалены из группы доступности. Средство чтения журналов, работающее на вторичной базе данных, не продвигается вперед, так как AG не может зафиксировать какие-либо изменения в любой вторичной базе данных. Чтобы разрешить модулю чтения журналов переместиться вперед и сохранить возможность аварийного восстановления, удалите исходную первичную реплику из группы доступности с помощью инструкции ALTER AVAILABITY GROUP <имя_группы> REMOVE REPLICA. Затем добавьте новую вторичную реплику к группе доступности.
трассировочный флаг 1448
Флаг трассировки 1448 позволяет лог-ридеру репликации продолжать работу, даже если асинхронные вторичные реплики не подтвердили получение изменения. Даже если этот флаг трассировки включен, средство чтения журнала всегда ожидает синхронные вторичные реплики (они могут перейти в асинхронный режим фиксации, как задокументировано здесь, чтобы средство чтения журнала могло двигаться вперед). Читатель журнала не выходит за пределы минимального подтверждения синхронных вторичных реплик. Этот флаг трассировки применяется к экземпляру SQL Server, а не только к группе доступности, базе данных доступности или экземпляру средства чтения журналов. Этот флаг трассировки должен быть включен на экземпляре издателя. Оно вступает в силу немедленно без перезапуска. Он не может быть активирован раньше времени или при сбое асинхронной вторичной реплики.
Хранимые процедуры, поддерживающие группы доступности
sp_redirect_publisher
Хранимая процедура sp_redirect_publisher служит для указания перенаправленного издателя для существующей пары "издатель-база данных". Если база данных издателя входит в группу доступности, то перенаправленный издатель — это имя прослушивателя группы доступности.
sp_get_redirected_publisher
Хранимая процедура sp_get_redirected_publisher используется агентами репликации для опроса распространителя и определения наличия для пары "издатель-база данных" заданного перенаправленного издателя. Эта хранимая процедура служит двум целям. Во-первых, она позволяет агенту определить, был ли перенаправлен исходный издатель. Во-вторых, может быть инициирован запуск проверки с использованием хранимой процедуры на распространителе (sp_validate_redirected_publisher), которая проверяет пригодность целевого узла перенаправления для служения издателем для именованной базы данных.
Для выполнения этой хранимой процедуры необходимо членство в роли сервера sysadmin , роли базы данных db_owner распространителя или в списке доступа к публикации для конкретной публикации, связанной с базой данных издателя.
sp_validate_redirected_publisher
Эта хранимая процедура пытается проверить, что текущий издатель способен к размещению опубликованной базы данных. Ее можно вызвать в любое время, чтобы проверить, способен ли текущий узел поддерживать репликацию.
sp_validate_replicate_hosts_as_publishers
Хотя агенты полезны, чтобы убедиться, что текущий первичный источник может функционировать в качестве издателя репликации для базы данных издателя, для установления допустимости всей топологии репликации в базе данных группы доступности требуется более общая возможность проверки. Хранимая процедура
sp_validate_replica_hosts_as_publishers
предназначена для заполнения этой потребности.Эта хранимая процедура всегда запускается вручную. Для вызова этой процедуры необходимо членство в роли sysadmin на распространителе, роли dbowner базы данных распространителя или в списке доступа к публикации для публикации базы данных издателя. Кроме того, имя входа вызывающего должно быть действительным именем входа для всех узлов реплик доступности и обладать особыми правами для базы данных доступности, связанной с базой данных издателя.
Изменение записи данных
Базы данных, включенные для отслеживания измененных данных (CDC), могут использовать группы доступности AlwaysOn, чтобы гарантировать, что база данных остается доступной в случае сбоя, но изменения в таблицах баз данных продолжают отслеживаться и откладываться в таблицах изменений CDC. Порядок настройки групп доступности CDC и AlwaysOn не важен. Базы данных с поддержкой CDC можно добавить в группы доступности Always On, а базы данных, которые являются членами группы доступности, можно настроить для CDC. В обоих случаях настройка CDC всегда выполняется в текущей или целевой первичной реплике. CDC использует агент чтения журналов и имеет те же ограничения, которые описаны в разделе «Изменения агента чтения журналов» ранее в этой статье.
Сбор изменений для фиксации изменений данных без репликации
Если для базы данных включен CDC, но репликация не включена, процесс захвата, используемый для сбора изменений из журнала и их помещения в таблицы изменений CDC, выполняется на узле CDC в качестве задания собственного SQL агента.
Чтобы возобновить сбор изменений после отработки отказа, хранимую процедуру sp_cdc_add_job необходимо запустить в новой базе данных-источнике и создать локальное задание отслеживания.
В следующем примере создается задание отслеживания.
EXECUTE sys.sp_cdc_add_job @job_type = 'capture';
Извлечение изменений для захвата измененных данных с помощью репликации
Если для базы данных включены функции репликации и отслеживания изменений данных, средство чтения журнала выполняет процесс заполнения таблиц изменений CDC. В этом случае методы, используемые репликацией для использования групп доступности Always On, гарантируют, что изменения продолжают собираться из журнала и помещаются в таблицы изменений CDC после переключения на другой узел. Для CDC в этой конфигурации больше ничего делать не нужно, чтобы обеспечить заполнение таблиц изменений.
Очистка процесса снятия данных об изменении
Чтобы обеспечить соответствующую очистку в новой базе данных-источнике, необходимо также создать локальное задание очистки. В следующем примере создается задание очистки.
EXECUTE sys.sp_cdc_add_job @job_type = 'cleanup';
Примечание.
После отработки отказа следует создать задания в новой первичной реплике. Задания CDC, запущенные в старой базе данных-источнике, должны быть отключены, когда локальная база данных становится базой данных-получателем. Если после этого реплика снова станет первичной, необходимо повторно включить задания CDC в реплике. Чтобы отключить и включить задания, используйте параметр @enabledsp_update_job. Дополнительные сведения о создании заданий CDC см. в sys.sp_cdc_add_job.
Добавление ролей CDC в реплику базы данных-источника
Если таблица включена для CDC, можно связать роль базы данных с экземпляром записи. Если указана роль, то пользователь, который будет использовать функции с табличным значением CDC для доступа к изменениям, должен иметь не только права доступа к столбцам отслеживаемой таблицы, но и быть членом именованной роли. Если указанная роль еще не существует, создается роль. Когда роли базы данных автоматически добавляются в основную базу данных в группе доступности, роли также распространяются во вторичные базы данных группы доступности.
клиентские приложения, обращающиеся к данным изменений CDC и группам доступности,
Клиентским приложениям, которые вызывают функции с табличными значениями или обращаются к связанным серверам, для доступа к данным таблицы изменений также необходима возможность обнаружения соответствующего CDC-хоста после отработки отказа. Имя прослушивателя группы доступности — это механизм, предоставляемый группами доступности AlwaysOn, чтобы прозрачно разрешить перенацеливать подключение на другой узел. Когда имя прослушивателя группы доступности связано с группой доступности, он доступен для использования в строках подключения TCP. Через имя прослушивателя группы доступности поддерживаются два разных сценария соединений.
- Один гарантирует, чтобы запросы на соединение всегда направлялись на активную первичную реплику.
- Второй — чтобы запросы на соединение направлялись на вторичную реплику только для чтения.
При использовании для поиска вторичной реплики в режиме только для чтения необходимо определить список маршрутизации для группы доступности. Дополнительные сведения о маршрутизации доступа к доступным для чтения вторичным файлам см. в разделе Настройка маршрутизации только для чтения для группы доступности AlwaysOn.
Примечание.
Существует некоторая задержка сигнала, связанная с созданием имени прослушивателя группы доступности (availability group) и его использованием клиентскими приложениями для доступа к реплике базы данных группы доступности.
Воспользуйтесь следующим запросом, чтобы определить, было ли имя прослушивателя группы доступности определено для размещения CDC-базы данных группой доступности. Запрос возвращает имя прослушивателя группы доступности, если он был создан.
SELECT dns_name FROM sys.availability_group_listeners AS l INNER JOIN sys.availability_databases_cluster AS d ON l.group_id = d.group_id WHERE d.database_name = N'MyCDCDB';
перенаправление нагрузки запросов на вторичную читаемую реплику
Хотя во многих случаях клиентское приложение всегда хочет подключиться к текущей первичной реплике, это не единственный способ использовать группы доступности AlwaysOn. Если группа доступности определяется с доступными для чтения репликами-получателями, то информацию об изменениях также можно собирать с вторичных узлов.
Во время настройки группы доступности атрибут ALLOW_CONNECTIONS, связанный с SECONDARY_ROLE, используется для указания типа поддерживаемого вторичного доступа. Если настроено как ALL, все подключения ко вторичной системе разрешены, но только те, для которых требуется доступ только для чтения, будут успешными. Если настроено как READ_ONLY, необходимо указать намерение на чтение при подключении ко вторичной базе данных, чтобы подключение прошло успешно. Дополнительные сведения см. в статье Настройка доступа только для чтения к вторичной реплике группы доступности AlwaysOn.
Чтобы определить, требуется ли намерение только для чтения для подключения к вторичной реплике, доступной для чтения, воспользуйтесь следующим запросом.
SELECT g.name AS AG, replica_server_name, secondary_role_allow_connections_desc FROM sys.availability_replicas AS r INNER JOIN sys.availability_groups AS g ON r.group_id = g.group_id WHERE g.name = N'MY_AG_NAME';
Для поиска вторичной реплики можно использовать имя прослушивателя группы доступности или явное имя узла. Если используется имя прослушивателя группы доступности, доступ направляется к любой подходящей вторичной реплике.
Если
sp_addlinkedserver
используется для создания связанного сервера для доступа ко вторичному серверу, параметр @datasrc используется для имени прослушивателя группы доступности или явного имени сервера, а параметр @provstr используется для указания намерения только для чтения.EXECUTE sp_addlinkedserver @server = N'linked_svr', @srvproduct = N'SqlServer', @provider = N'MSOLEDBSQL', @datasrc = N'AG_Listener_Name', @provstr = N'ApplicationIntent=ReadOnly', @catalog = N'MY_DB_NAME';
доступ клиента к данным об изменениях CDC и именам входа в домен
Как правило, следует использовать имена входа домена для доступа клиента для изменения данных, находящихся в базах данных, являющихся членами групп доступности. Чтобы обеспечить постоянный доступ к данным изменений после переключения на резервный сервер, пользователю домена необходимы полномочия доступа ко всем узлам, поддерживающим реплики группы высокой доступности. Если пользователь базы данных добавляется в базу данных первичной реплики и пользователь связан с доменным именем входа, пользователь базы данных распространяется на базу данных-получателя и продолжает быть связанным с указанным доменным именем входа. Если новый пользователь базы данных связан с именем входа проверки подлинности SQL Server, пользователь во вторичных базах данных копируется без имени входа. Хотя связанное имя входа проверки подлинности SQL Server может использоваться для доступа к данным об изменениях в основном месте, где пользователь базы данных был первоначально определен, этот узел является единственным, где будет возможен доступ. Имя входа проверки подлинности SQL Server не сможет получить доступ к данным из любой вторичной базы данных, а также из любых новых первичных баз данных, за исключением исходной базы данных, в которой был определен пользователь базы данных.
отключение записи измененных данных
Если вам нужно отключить Отслеживание Изменений в Данных (CDC) в базе данных, которая является частью группы доступности, и вы используете SQL Server 2016 SP2 или более поздней версии, вам не нужно выполнять дополнительные действия для автоматического усечения журналов. Если вы используете версию, более раннюю чем SQL Server 2016 SP2, и отключаете CDC в базе данных, являющейся частью группы доступности, необходимо выполнить одно из следующих действий, чтобы избежать блокировки усечения журнала после отключения CDC:
Перезапустите службу SQL Server на каждом экземпляре вторичной реплики.
Удалите базу данных из всех экземпляров вторичной реплики группы доступности, а затем добавьте ее обратно в каждый экземпляр реплики группы доступности с помощью автоматического или ручного заполнения.
Отслеживание изменений
База данных с включённым отслеживанием изменений (CT) может быть частью группы доступности. Дополнительная настройка не требуется. Клиентские приложения отслеживания изменений, использующие функции с табличным значением CDC (TVFs) для доступа к данным об изменениях, должны находить первичную реплику после отработки отказа. Если клиентское приложение подключается через имя прослушивателя группы доступности, запросы на подключение всегда направляются в текущую первичную реплику.
Данные отслеживания изменений должны получаться из первичной реплики. Попытка доступа к данным об изменении из вторичной реплики приводит к следующей ошибке:
Msg 22117, Level 16, State 1, Line 1
Для баз данных, входящих в состав вторичной реплики (то есть вторичных баз данных), отслеживание изменений не поддерживается. Вместо выполнения запросов отслеживания изменений в первичной реплике вы можете создать моментальный снимок базы данных группы доступности из вторичной реплики и использовать его для запросов данных об изменениях. Моментальный снимок базы данных — это статическое представление базы данных SQL Server, доступное только для чтения (исходная база данных), и данные отслеживания изменений в моментальном снимке соответствуют моменту времени, когда моментальный снимок был сделан на базе данных группы доступности на вторичной реплике.
Примечание.
При отказе в базе данных с включенным отслеживанием изменений время восстановления новой главной реплики может занять больше времени, чем обычно, поскольку для отслеживания изменений требуется полный перезапуск базы данных.
Предварительные требования, ограничения и рекомендации по использованию репликации
В этом разделе описываются рекомендации по развертыванию репликации с помощью групп доступности AlwaysOn, включая предварительные требования, ограничения и рекомендации.
Необходимые компоненты
При использовании репликации транзакций и базы данных публикации в группе доступности издатель и распространитель должны запускать по крайней мере SQL Server 2012 (11.x). Подписчик может использовать более низкий уровень SQL Server.
При использовании репликации слиянием и базы данных публикации в группе доступности:
Push-подписка: издатель и распространитель должны запускать по крайней мере SQL Server 2012 (11.x).
Подписка по запросу: издатель, распространитель и базы данных подписчиков должны находиться по крайней мере в SQL Server 2012 (11.x). Это связано с тем, что агент слияния на подписчике должен иметь сведения о том, как группа доступности может выполнить отработку отказа на базу данных-получатель.
Экземпляры издателя удовлетворяют всем предварительным требованиям, необходимым для участия в группе доступности. Дополнительные сведения см. в предварительных требованиях, ограничениях и рекомендациях для групп доступности AlwaysOn.
Ограничения
Поддерживаемые сочетания репликации в группах доступности AlwaysOn:
Репликация | Publisher | Распространитель 1 | Подписчик |
---|---|---|---|
Транзакций | Да Примечание. Не включает поддержку двунаправленной и взаимной репликации транзакций. |
Да | Да |
Одноранговая сеть2 | Да | Да 3 | Да |
Слияние | Да | No | No |
Моментальный снимок | Да | No | Да |
обновляемые подписки — для транзакционной репликации | No | No | No |
1 База данных распространителя не поддерживается для использования с зеркальным отображением базы данных.
2 Требуется SQL Server 2019 CU13 и выше.
Для 3 требуется SQL Server 2019 CU 17 или более поздней версии.
Рекомендации
База данных распространителя не поддерживается для использования с зеркальным отображением базы данных, но поддерживается с группами доступности AlwaysOn, при условии определенных ограничений. Дополнительные сведения см. в разделе Настройка группы доступности для распространения. Конфигурация репликации связана с экземпляром SQL Server, где настроен распространитель; поэтому база данных распространителя не может быть зеркально или реплицирована. Кроме того, можно обеспечить высокий уровень доступности распространителя с помощью отказоустойчивого кластера SQL Server. Для получения дополнительной информации см. Always On экземпляры отказоустойчивого кластера (SQL Server).
Отработка отказа подписчика в базу данных-получатель — это ручная процедура для объединения подписчиков репликации. Процедура, по существу, идентична методу, используемому для переключения на зеркальную базу данных подписчика. Подписчики репликации транзакций не нуждаются в специальной обработке при участии в группах доступности AlwaysOn. Подписчики должны работать под управлением SQL Server 2012 (11.x) или более поздней версии для участия в группе доступности. Для получения дополнительной информации см. Подписчики репликации и группы доступности Always On (SQL Server)
Метаданные и объекты, которые существуют вне базы данных, не распространяются на вторичные реплики, включая имена входа, задания, связанные серверы. Если после отработки отказа в базе данных-источнике нужны метаданные и объекты, их необходимо скопировать вручную. Дополнительные сведения см. в статье Управление логинами для заданий в базах данных в группе доступности Always On.
Распределенные группы доступности
Издатель или база данных распространителя в группе доступности не может быть настроена как часть распределенной группы доступности. Для правильной настройки и использования базе данных издателя в группе доступности и базе данных распространителя в группе доступности требуется конечная точка прослушивателя. Однако невозможно настроить конечную точку прослушивателя для распределенной группы доступности.
Связанные задачи
Репликация
- Настройка репликации с помощью групп доступности AlwaysOn
- Управление реплицированной базой данных издателя в составе группы доступности AlwaysOn
- Вопросы и ответы об администрировании репликации
Изменение записи данных
- Включение и отключение записи измененных данных
- администрирование и мониторинг фиксации изменений данных
- работа с измененными данными
Отслеживание изменений
- Включение и отключение Отслеживание изменений (SQL Server)
- Управление Отслеживание изменений (SQL Server)
- Работа с отслеживанием изменений (SQL Server)
Связанное содержимое
- Подписчики репликации и группы доступности Always On (SQL Server)
- предварительные требования, ограничения и рекомендации для групп доступности AlwaysOn
- Что такое группа доступности AlwaysOn?
- группы доступности Always On: интероперабельность (SQL Server)
- экземпляры отказоустойчивого кластера AlwaysOn (SQL Server)
- Что такое запись измененных данных (CDC)?
- Сведения о Отслеживание изменений (SQL Server)
- Репликация SQL Server
- Отслеживание изменений данных (SQL Server)
- sys.sp_cdc_add_job (Transact-SQL)