Репликация данных каталога
Для поддержания данных в актуальном и непротиворечивом состоянии на всех контроллерах домена Эллес используется репликация: когда какой-либо объект создается, изменяется или удаляется в службе каталогов, данные о нем реплицируются с одних контроллеров домена на другие таким образом, чтобы на всех контроллерах они были одинаковыми.
Реплицируемые данные
Примерами реплицируемых данных могут служить изменения в данных пользователей, групп, групповых политик, схемы каталога, записей DNS, а также информация о добавлении и удалении контроллеров домена, компьютеров и устройств в домене, перемещении объектов по иерархии каталогов, изменении паролей и т. д.
Все объекты в службе каталогов представляют собой экземпляры классов, состоящих из наборов атрибутов. Классы и атрибуты описываются в схеме каталога. В определениях атрибутов задается признак возможности их изменения с помощью инструментов администрирования. Данные о неизменяемых атрибутах не обновляются и поэтому не подлежат репликации. Большинство объектов службы каталогов имеют атрибуты, значения которых могут изменяться.
Объекты группируются в логические категории, которые соответствуют разделам (партициям) каталога. Контроллеры домена хранят полные (все атрибуты объектов) или частичные (только часто используемые атрибуты объектов) реплики разделов, обновление которых выполняется следующим образом:
| Раздел (партиция) каталога | Уровень (лес/домен) | Объекты | Особенности репликации |
|---|---|---|---|
Раздел конфигурации |
Один раздел на лес |
Сайты, разделы каталога, сервисы, расширенные полномочия и т. д. |
Реплицируется на все контроллеры домена в лесу |
Раздел схемы |
Один раздел на лес |
Определения классов и атрибутов для всех объектов службы каталогов |
Реплицируется на все контроллеры домена в лесу |
Доменный раздел |
Один раздел на домен |
Пользователи, компьютеры, подразделения, группы и т. д. |
Реплицируется только на контроллеры в рамках домена |
Доменный раздел (глобальный каталог) |
Один раздел на домен |
Частичный набор атрибутов из разделов каталога, относящихся к разным доменам |
Реплицируется на контроллеры домена, выступающие в качестве серверов глобального каталога, в лесу |
Раздел приложений |
Произвольное количество разделов |
Данные приложений и служб; зоны DNS уровня леса ( |
Реплицируются на определенные контроллеры домена в лесу; данные о зонах DNS реплицируются на серверы DNS на всех контроллерах домена в лесу ( |
Принципы репликации
Передача данных между участвующими в репликации контроллерами домена выполняется в соответствии со следующими базовыми принципами:
-
равноправие участников репликации (multimaster-репликация);
Все контроллеры домена принимают LDAP-запросы на внесение изменений в атрибуты объектов службы каталогов, которые относятся к их зоне ответственности, с учетом действующих ограничений безопасности. Каждое исходящее изменение реплицируется на один и более контроллеров домена, которые фиксируют его как полученное в результате репликации.
Полные реплики разделов каталога могут быть доступны как для записи и чтения, так и только для чтения. Недоступность любой из реплик не блокирует процесс репликации. Изменения, внесенные в одну реплику, распространяются на все остальные реплики.
-
репликация по запросу (pull-репликация);
При возникновении изменений в данных контроллер домена уведомляет о них своих партнеров по репликации. В ответ партнеры запрашивают у него изменения.
-
репликация в режиме «сохрани и передай»;
Контроллеры домена сохраняют изменения, запрошенные ими у партнеров по репликации, и передают эти изменения другим контроллерам домена. Таким образом, контроллеру домена, являющемуся источником изменений, не требуется самостоятельно уведомлять о них все остальные контроллеры домена, которым они должны быть переданы.
-
репликация с учетом текущего состояния.
При репликации учитывается разница между текущим состоянием (то есть текущими значениями всех атрибутов) реплики раздела каталога на исходном и целевом контроллерах домена. Состояние описывается метаданными, которые используются при разрешении конфликтов и позволяют избежать необходимости передавать полную реплику в каждом цикле репликации.
Процесс репликации
На контроллере домена Эллес за процесс репликации отвечают:
-
сервис построения топологии репликации (КСС, Knowledge Consistency Checker);
-
сервис репликации (drepl).
Сервис построения топологии репликации (KCC)
На каждом контроллере домена Эллес выполняется процесс KCC (Knowledge Consistency Checker), который формирует две взаимосвязанные топологии репликации: топологию репликации между контроллерами домена внутри одного сайта и топологию репликации между сайтами (в роли ISTG, Intersite Topology Generator).
Топология репликации внутри сайта
При взаимодействии контроллеров домена внутри одного сайта KCC обеспечивает:
-
автоматическое построение топологии репликации, в том числе в гетерогенных сайтах с контроллерами домена на базе Microsoft Active Directory Domain Services и Эллес, работающими в режиме RWDC или RODC, независимо от очередности, в которой контроллеры становятся функционально доступными;
-
автоматическое создание и перестроение топологии при добавлении, перемещении и удалении контроллеров домена таким образом, чтобы:
-
репликационные соединения между контроллерами домена с доступными для записи репликами разделов каталога образовывали двунаправленное кольцо;
-
ни один контроллер домена в сайте не располагался на расстоянии более чем трех переходов от любого другого контроллера домена в том же сайте;
-
-
корректное выполнение репликации при наличии в сайте контроллера домена, работающего в режиме RODC, включая построение топологии для RODC при добавлении его в сайт или перемещении из другого сайта;
-
корректное изменение данных о партнерах по репликации, которые должны получать уведомления об изменениях (значение атрибута
repsTo), при перемещении контроллера домена в другой сайт.
Топология репликации между сайтами
В рамках взаимодействия контроллеров домена в разных сайтах KCC обеспечивает:
-
переназначение роли ISTG работоспособному контроллеру домена в сайте в случае недоступности текущего владельца роли;
-
выбор сервера с ролью bridgehead, через который будет проходить весь репликационный трафик при синхронизации с другими сайтами и далее распространяться по остальным контроллерам в сайте, исходя из заданных предпочтений и работоспособности контроллеров домена;
-
выбор нового сервера с ролью bridgehead в сайте при выводе текущего из эксплуатации или изменении настроек связей сайтов;
-
создание входящих репликационных соединений для bridgehead-серверов сайта, включая пересоздание соединений и удаление ненужных соединений при изменении состава bridgehead-серверов в связанных сайтах;
-
конфигурирование репликационных соединений между bridgehead-серверами с учетом настроек, заданных в связи сайтов (интервал репликации, расписание репликации, опции);
-
изменение репликационных соединений между сайтами с учетом изменения администратором стоимости, интервала репликации и опций в настройках связи сайтов;
-
создание репликационного соединения между сайтами с учетом текущей конфигурации связей и работоспособности контроллеров в случае его удаления администратором;
-
учет созданных или измененных администратором репликационный соединений при расчете топологии.
Сервис репликации (drepl)
Сервис репликации (drepl) реализует:
-
механизм репликации на основе уведомлений об изменениях;
В рамках механизма:
-
Контроллер домена уведомляет об изменениях в своей базе данных другие контроллеры домена, являющиеся целевыми в рамках исходящей репликации (перечисляются в атрибуте
repsToреплики раздела каталога), с заданной периодичностью. -
При получении уведомления о наличии изменений целевые контролеры инициируют запросы (pull request) для их репликации с контроллера-источника.
-
-
механизм репликации на основе опроса об изменениях.
В рамках механизма:
-
Контроллер домена опрашивает другие контроллеры, являющиеся источниками данных в рамках входящей репликации (перечисляются в атрибуте
repsFromреплики раздела каталога), о наличии изменений в их базах данных с момента последней репликации с заданной периодичностью. -
В случае наличия изменений контроллер домена инициирует запрос (pull request) для их репликации с контроллера-источника.
-
Данные механизмы не являются взаимоисключающими и используются как для репликации внутри сайта, так и для репликации между сайтами.
Настройка репликации
Для настройки процесса репликации доступны:
-
конфигурационные параметры Эллес, управляющие работой сервиса построения топологии репликации (KCC);
-
конфигурационные параметры Эллес, управляющие работой сервиса репликации (drepl);
-
подкоманды утилиты
samba-toolдля работы с сайтами, подсетями, связями сайтов, мостами связей сайтов, серверами в сайте, соединениями между серверами и связанными опциями.
Настройка работы сервиса построения топологии репликации (KCC)
Для построения и перестроения топологии репликации используется скрипт samba_kcc (полный путь к скрипту после установки пакета inno-samba — /app/inno-samba/sbin/samba_kcc). Данный скрипт запускается автоматически с определенной периодичностью, а также он может вызываться вручную.
Для настройки работы скрипта могут использоваться следующие конфигурационные параметры в файле smb.conf (в примере приводятся значения, используемые по умолчанию; все значения задаются в секундах):
[global]
...
kccsrv:periodic_startup_interval = 15
kccsrv:periodic_interval = 300
kccsrv:script timeout = 140
...
Описание параметров:
-
kccsrv:periodic_startup_interval— задержка (в секундах) перед первой итерацией построения топологии репликации после запуска службыinno-samba(значение по умолчанию —15); -
kccsrv:periodic_interval— периодичность (в секундах) запуска скрипта для перестроения топологии репликации (значение по умолчанию —300);Следует учитывать, что сервис построения топологии репликации и сервис репликации работают независимо друг от друга и для каждого из них может быть задана своя периодичность запуска (по умолчанию — 5 (300) и 15 (900) минут (секунд) соответственно).
Поэтому существует незначительная вероятность того, что, например, при выводе контроллера из домена соответствующие репликационные соединения могут быть не удалены сервисом построения топологии репликации до момента очередного запуска периодической репликации. В этом случае в логах фиксируется ошибка
WERR_FILE_NOT_FOUND.При этом — чем реже происходят итерации сервиса построения топологии репликации и чем чаще выполняется периодическая репликации, тем большее количество ошибок данного типа будет фиксироваться в логах.
При очередном запуске сервиса построения топологии репликации неактуальные репликационные соединения удаляются, после чего запуск периодической репликации не будет сопровождаться фиксацией ошибки
WERR_FILE_NOT_FOUNDв логах.Таким образом, ошибки
WERR_FILE_NOT_FOUNDдолжны перестать фиксироваться в логах через интервал, не превышающий интервал запуска сервиса построения топологии репликации. Если они продолжают фиксироваться, это указывает на наличие неисправности. -
kccsrv:script timeout— параметр, которым ограничивается время выполнения скриптаsamba_kcc.Значение данного параметра может быть скорректировано, например, при появлении в логах сообщений о завершении работы скрипта по достижении установленного времени выполнения.
Настройка работы сервиса репликации (drepl)
Для настройки механизмов уведомления и опроса об изменениях в данных, реализуемых сервисом репликации (drepl), могут использоваться следующие конфигурационные параметры в файле smb.conf (в примере приводятся значения, используемые по умолчанию):
[global]
...
dreplsrv:periodic_startup_interval = 15
dreplsrv:notify_interval = 5
dreplsrv:periodic_interval = 300
dreplsrv:process_replica_sync_for_unlisted_dsa = false
...
Описание параметров:
-
параметры для настройки периодичности запуска:
-
dreplsrv:periodic_startup_interval— задержка (в секундах) перед первой попыткой репликации после запуска службыinno-samba(значение по умолчанию —15); -
dreplsrv:notify_interval— периодичность (в секундах) отправки контроллером домена уведомлений о наличии изменений в его базе данных другим контроллерам домена, являющимся его партнерами по репликации (значение по умолчанию —5); -
dreplsrv:periodic_interval— периодичность (в секундах) опроса контроллером домена других контроллеров домена, являющихся его партнерами по репликации, о наличии изменений в их базах данных с момента последней репликации между ними (значение по умолчанию —300).Если данные параметры явно заданы в конфигурации Эллес, они применяются при репликации как внутри сайта, так и между сайтами для всех протоколов репликации и всех разделов каталога.
Если параметры явно не заданы в конфигурации Эллес, при выполнении репликации внутри сайта используются настройки расписания, заданные в значении атрибута
scheduleобъектаnTDSSiteSettingsсайта, и значение атрибутаmsDS-Replication-Notify-First-DSA-Delayдля каждого раздела каталога, а при выполнении репликации между сайтами — значения атрибутовreplIntervalиscheduleобъектаsiteLink.
-
-
dreplsrv:process_replica_sync_for_unlisted_dsa— управление обработкой запросов на синхронизацию определенного раздела каталога (функцияDsReplicaSync) с контроллерами домена, которые отсутствуют в значении атрибутаrepsFromданного раздела; возможные значения:-
false(по умолчанию) — запросы на синхронизацию не обрабатываются; -
true— запросы на синхронизацию обрабатываются.
-
Настройка репликации внутри сайта
Если в конфигурации Эллес явно не задан параметр dreplsrv:notify_interval, при формировании уведомлений об изменениях в базе данных контроллера домена в рамках исходящей репликации учитывается атрибут msDS-Replication-Notify-First-DSA-Delay. Его значение определяет задержку отправки уведомления об изменениях первому контроллеру домена — партнеру по репликации.
Атрибут может быть настроен отдельно для каждого раздела каталога. По умолчанию задержка составляет 15 секунд. Минимальное значение — 5 секунд.
Если в конфигурации Эллес явно не задан параметр dreplsrv:periodic_interval, контроллер домена опрашивает партнеров по репликации о наличии изменений в их базах данных и запрашивает репликацию таких изменений исходя из настроек расписания, заданных в атрибуте schedule объекта nTDSSiteSettings сайта.
Настройка репликации между сайтами
Эллес предоставляет следующие возможности для настройки репликации между сайтами:
-
создание связей между сайтами (
siteLink) и настройка их атрибутов (см. «Управление связями сайтов»), включая:-
интервал репликации (атрибут
replIntervalобъектаsiteLink) — определяет периодичность, с которой сервер с ролью bridgehead в сайте опрашивает серверы с той же ролью в других сайтах, включенных в связь, о наличии реплицируемых изменений (значение по умолчанию —180минут; минимальное значение — 15 минут);Если в конфигурации Эллес явно задан параметр dreplsrv:periodic_interval, его значение используется в качестве интервала репликации. -
относительная стоимость связи (атрибут
costобъектаsiteLink) — определяет приоритет связи между сайтами при использовании в процессе репликации: чем ниже стоимость, тем выше вероятность того, что данная связь будет использована для создания репликационного соединения (значение по умолчанию —100); -
опции репликации (атрибут
optionsобъектаsiteLink):-
USE_NOTIFY— если опция включена, то в дополнение к репликации по расписанию реализуется репликация по уведомлению (по умолчанию опция не включена);Если на контроллерах домена в сайте произошли изменения, сервер с ролью bridgehead отправляет уведомление об этих изменениях bridgehead-серверам других сайтов, которые, в свою очередь, запрашивают получение измененных данных.
-
TWOWAY_SYNC— если опция включена, после завершения репликации через данное соединение в одну сторону немедленно инициируется репликация в обратную сторону;По умолчанию репликация в обратном направлении не инициируется.
-
DISABLE_COMPRESSION— если опция включена, отключается сжатие данных при репликации между сайтами.По умолчанию при репликации между сайтами объекты данных передаются с предварительным сжатием.
-
-
-
создание мостов между связями сайтов (
siteLinkBridge; см. «Управление мостами между связями сайтов»); -
назначение контроллера домена (сервера) в качестве приоритетного на роль bridgehead в сайте (см. «Управление серверами в сайте»);
-
включение/выключение опции Bridge All Site Links, разрешающей репликацию между любыми двумя сайтами, даже если они не имеют прямой связи (см. «Управление опцией Bridge All Site Links»);
-
управление соединениями между серверами (см. «Управление соединениями между серверами»);
-
управление ролью ISTG в сайте (см. «Управление ролью Inter-Site Topology Generator (ISTG)»).
Разрешение конфликтов репликации
Эллес гарантирует, что после завершения репликации значение измененного атрибута является одинаковым на всех контроллерах домена. Для устранения возможных конфликтов операции добавления, изменения, перемещения и удаления выстраиваются в последовательность, для чего каждое исходное обновление получает глобальную уникальную метку (на уровне объекта и на уровне атрибута) в момент выполнения соответствующей операции. Эта метка реплицируется вместе с измененным значением.
Каждая метка состоит из трех компонентов:
-
версия — числовое значение, которое увеличивается инкрементально при каждом изменении, подлежащем репликации;
-
время — время внесения изменения с точностью до секунды в соответствии с системным временем контроллера домена, на котором выполняется исходная операция изменения;
-
контроллер домена — значение
invocationIDконтроллера домена, на котором выполняется исходная операция изменения.
Сравнение меток осуществляется в следующем порядке: версия –> время –> контроллер домена.
Если две метки имеют одинаковые версии, выбирается изменение с наибольшим значением времени. В крайне редких случаях, когда один и тот же атрибут изменяется на двух контроллерах домена с разницей во времени менее секунды, случайным образом выбирается один из двух контроллеров и реплицируется выполненное на нем изменение.
Использование меток позволяет разрешать следующие типы конфликтов:
| Конфликт репликации | Описание | Способ разрешения |
|---|---|---|
Конфликт значения атрибута |
На одном контроллере домена в рамках операции изменения устанавливается новое значение для атрибута. Одновременно на другом контроллере домена для того же самого атрибута задается другое значение |
На всех контроллерах домена атрибут принимает значение с наибольшим номером версии в метке |
Добавление или перемещение объекта в удаленный контейнер, удаление неконечного объекта |
В результате операции добавления или перемещения объект становится дочерним объектом другого родительского объекта (контейнера). Одновременно с этим на другом контроллере домена выполняется операция удаления соответствующего родительского объекта (контейнера) |
Родительский объект (контейнер) удаляется на всех контроллерах домена, а дочерний объект помещается в специальный контейнер |
Конфликт относительного DN-имени объекта |
В результате операции добавления или перемещения дочерний объект получает имя в рамках родительского объекта (контейнера). Одновременно с этим на другом контроллере домена в результате операции добавления или перемещения в том же самом родительском объекте (контейнере) создается другой дочерний объект с тем же именем, в результате чего в рамках родительского объекта появляется два дочерних объекта с одинаковыми относительными DN-именами |
Дочерний объект, атрибут имени которого имеет больший номер версии в метке, сохраняет полученное имя. Дочерний объект, чей атрибут с относительным DN-именем (например, |