В домене Windows все контроллеры домена являются равноправными. Таким образом, изменения можно вносить на любом из контроллеров домена. Каталоги домена на серверах поддерживают актуальность данных посредством метода репликации с несколькими хозяевами (multimaster replication).
Каждый раз при внесении изменений в каталог Active Directory значение последовательности обновления (USN — Update Sequence Number) на сервере увеличивается на единицу. После этого Active Directory сохраняет новое значение USN, равно как внесенное изменение, которое должно быть реплицировано на все контроллеры домена. Число USN предоставляет ключ для репликации с несколькими хозяевами.
Увеличение значения USN является атомарной операцией, то есть увеличение USN и внесение изменений происходит одновременно. Если один из элементов процесса изменения завершится неудачей, вся операция завершается неудачей (однако значение USN все равно должно быть увеличено). Изменение не может произойти без увеличения USN, благодаря чему обеспечивается сохранность внесенных в AD изменений. Каждый контроллер домена отслеживает номер USN контроллера домена, с которым проводится репликация данных. Эта процедура дает возможность контроллеру домена определить изменения, передаваемые в цикле репликации данных.
В начале цикла каждый сервер проверяет таблицу USN и запрашивает у контроллеров домена, с которыми проводится репликация, наибольшее значение USN.
Контроллер домена B |
Контроллер домена C |
Контроллер домена D |
54 |
23 |
53 |
Сервер A запрашивает значение USN у других контроллеров домена и получает следующую информацию.
Контроллер домена B |
Контроллер домена C |
Контроллер домена D |
58 |
23 |
64 |
На основе этих данных информации сервер A может подсчитать количество внесенных изменений на каждом сервере.
Контроллер домена B |
Контроллер домена C |
Контроллер домена D |
55–58 |
Нет |
54–64 |
Затем контроллер домена A запрашивает у остальных контроллеров необходимые изменения.
Свойства объекта могут изменяться несколько раз. Каждое свойство имеет номер версии, который помогает определить конфликт версий. Номера версий свойств работают аналогично номерам USN: каждый раз при внесении изменений в значение свойства номер версии свойства увеличивается на единицу.
Если несколько раз изменить значение свойства объекта, приоритет получит изменение с самым большим номером версии. Конфликт возникает в том случае, когда для двух или нескольких обновлений свойств совпадают номера версий. При этом для разрешения конфликта используется временной шаблон. Поскольку такой шаблон создается для каждого изменения, контроллеры домена должны иметь одинаковое время. В случае если совпадают номера версий и шаблоны времени, сравнивается двоичный буфер. Приоритет имеет изменение с наибольшим двоичным буфером. Номера версий свойств увеличиваются только при первоначальной записи (при записи репликации увеличения не происходит, в отличии от значений USN) и не зависят от конкретного сервера. Номер версии свойства перемещается вместе со свойством.
Схема распространения–балансировки предупреждает повторное распространение изменений на другие серверы. Каждый сервер поддерживает таблицу актуальных векторов, которые являются наибольшими записями, полученными от каждого контроллера. Векторы имеют следующий формат:
<изменение>,<контроллер домена, первоначально внесший изменение>,<номер USN изменения>
Например:
<object windata, property Password xxx>,Titanic,54
Контроллеры домена отправляют эту информацию вместе с номером USN, позволяя определить, вносятся ли изменения, которые были уже ранее реплицированы на остальные контроллеры домена.