Управление застарелыми объектами репликации (lingering objects)
Для обнаружения и удаления застарелых объектов (lingering objects) на контроллере домена «Эллес» с помощью утилиты samba-tool используется подкоманда drs verifyobjects.
Возникновение и обработка застарелых объектов в «Эллес»
Застарелые объекты — это объекты каталога, которые остаются на контроллере домена после их удаления во всем лесу. Такое состояние возникает, когда контроллер домена длительное время не участвует в репликации, а затем вновь подключается к инфраструктуре. Если в этот период объект был полностью удален на других контроллерах и это изменение не было реплицировано на отключенный узел, то локальная копия объекта становится «застарелой».
При удалении объекта в каталоге создается tombstone-объект — минимальная версия удаляемого объекта, содержащая только ключевые атрибуты. Все остальные контроллеры домена получают его через репликацию и удаляют соответствующий исходный объект. Tombstone-объект хранится в течение периода, заданного атрибутом tombstoneLifetime (по умолчанию — 180 дней; подробнее см. в разделе
«Управление периодами хранения и очисткой объектов после удаления»).
По истечении этого срока tombstone-объект окончательно удаляется. Ожидается, что за это время все репликационные партнеры получат уведомление об удалении.
В «Эллес» по умолчанию включен механизм обеспечения строгой согласованности репликации (Strict Replication Consistency): при обнаружении застарелого объекта в рамках входящей репликации контроллер домена автоматически отклоняет такие изменения. Он не принимает объект в локальный каталог, не восстанавливает его и не реплицирует обратно в лес. При этом общая репликация между контроллерами не прерывается: отклоняются только конкретные некорректные изменения, связанные с застарелыми объектами.
| См. подробнее о механизме в разделе «Настройка обработки застарелых объектов (lingering objects)». |
Таким образом, застарелые объекты не удаляются и не восстанавливаются автоматически — они остаются в локальном каталоге до тех пор, пока не будут обнаружены и устранены администратором. Для этого используется подкоманда samba-tool drs verifyobjects, которая сравнивает состояние объектов на целевом контроллере с эталонным и записывает все несоответствия в файл linobj.csv без внесения изменений.
Файл содержит:
-
заголовок с информацией о типе операции (застарелый объект обнаружен/удален), целевом и эталонном контроллерах домена, а также разделе каталога, к которому относится объект, в формате:
Found|Deleted lingering objects;DC FQDN;reference DC FQDN;NC DN
-
по одной строке на каждый обнаруженный или удаленный застарелый объект в формате:
<GUID объекта>;<DN>
Пример записи:
Found lingering objects;gc2.elles.inno.tech;dc2.elles.inno.tech;DC=elles,DC=inno,DC=tech 123e4567-e89b-12d3-a456-426614174000;CN=Deleted User,CN=Deleted Objects,DC=elles,DC=inno,DC=tech
Если необходимо устранить несоответствие, администратор может запустить команду с опцией --removal-mode. Это приведет к локальному удалению застарелых объектов с целевого контроллера. В обоих случаях (при обнаружении и при удалении) изменения не реплицируются обратно в лес. Это гарантирует, что застарелые объекты не восстанавливаются и не распространяются, а их обработка остается исключительно под контролем администратора.
Логирование событий
В процессе работы подкоманды drs verifyobjects в лог-файле «Эллес» (по умолчанию: /app/inno-samba/var/log.samba) фиксируются события, связанные с выполняемой операцией. Уровень детализации соответствует информационным сообщениям (log level = 3 в файле smb.conf).
Сообщения генерируются непосредственно на целевом контроллере и отражают полный цикл операции, от начала до завершения. Записи в лог-файле не содержат дополнительных тегов или префиксов и представляют собой строки с идентификатором события (EventId) и ключевыми параметрами операции.
Фиксируются следующие события:
-
начало проверки (режим обнаружения) —
EventId 1938:EventId 1938: Starting the lingering objects checking procedure with dc2.elles.inno.tech as reference DC.
-
начало удаления (режим исправления) —
EventId 1937:EventId 1937: Starting the lingering objects deleting procedure with dc2.elles.inno.tech as reference DC.
-
завершение проверки —
EventId 1942, с указанием количества найденных объектов:EventId 1942: Finishing the lingering objects checking procedure with dc2.elles.inno.tech as reference DC. Found 2 object(s).
-
завершение удаления —
EventId 1939, с указанием количества удаленных объектов:EventId 1939: Finishing the lingering objects deleting procedure with dc2.elles.inno.tech as reference DC. Deleted 2 object(s).
-
обнаружение застарелого объекта —
EventId 1946:EventId 1946: Object CN=Deleted User,CN=Deleted Objects,DC=elles,DC=inno,DC=tech [123e4567-e89b-12d3-a456-426614174000] exists on server but doesn't exist on dc2.elles.inno.tech
-
удаление застарелого объекта — нет отдельного
EventId.Удаление застарелых объектов при использовании
--removal-modeвыполняется без записи в лог.
Аудит удаления осуществляется только через файл linobj.csv, который содержит список всех обнаруженных объектов (включая удаленные). СобытиеEventId 1946фиксирует факт обнаружения объект, независимо от того, будет он удален или нет.
Записи о событиях содержат:
-
EventId— идентификатор события (1937–1939,1942,1946); -
целевой контроллер — где выполнена операция;
-
эталонный контроллер — источник актуальных данных репликации;
-
тип операции:
-
checking— проверка; -
deleting— удаление;
-
-
количество обработанных объектов — только в завершающих событиях (
1942,1939); -
GUID и DN застарелого объекта и эталонного контроллера домена — в событии
1946.
Логирование реализовано на уровне DRSUAPI-операций и не дублирует содержимое файла linobj.csv. Оно предназначено исключительно для аудита и диагностики, обеспечивая прозрачность действий администратора без избыточной детализации объектов в логах.
Возможные причины длительных разрывов репликации
Длительные разрывы в репликации могут возникать в следующих ситуациях:
-
администратор отключил контроллер домена от сети и поместил его на хранение;
-
контроллер домена был предварительно подготовлен и отправлен в удаленное местоположение, но срок жизни tombstone-объектов истек до его подключения;
-
контроллер не может подключиться к WAN в течение длительного срока;
-
системные часы контроллера домена были переведены некорректно (вперед или назад) — например, после сбоя питания, неправильной настройки NTP или ручного вмешательства;
-
администратор намеренно изменил системное время для ускорения сборки мусора или продления срока действия резервной копии.
Признаки наличия застарелых объектов
Наличие застарелых объектов может не проявляться явно, но потенциально вызывает:
-
повторное появление удаленных учетных записей пользователей или компьютеров;
-
ошибки создания объектов с теми же именами или UPN;
-
нарушения в работе приложений, зависящих от уникальности идентификаторов объектов.
Застарелые объекты могут оставаться незамеченными, если:
-
никто не пытается обновить или использовать этот объект;
-
никто не пытается создать новый объект с тем же именем или UPN;
-
никакие службы или приложения не обращаются к этому объекту.
Проверка и очистка застарелых объектов репликации
Формат вызова:
samba-tool drs verifyobjects <DC|all-dc|all-gc> <referenceDC> <NC> [options]
Подкоманда проверяет наличие застарелых объектов (lingering objects) в указанном разделе каталога (NC) на целевом контроллере домена (DC), всех контроллерах домена (опция all-dc) или только на контроллерах домена с ролью сервера глобального каталога (опция all-gc) путем сравнения их состояния с эталонным контроллером (referenceDC). Застарелые объекты — это объекты, которые существуют на целевом контроллере, но были удалены на эталонном и не были реплицированы из-за длительного разрыва связи.
Если объекты обнаружены, они записываются в файл linobj.csv в каталоге логов «Эллес». При использовании опции --removal-mode застарелые объекты автоматически удаляются с целевого контроллера домена без репликации этого действия.
Обязательные аргументы:
-
первый аргумент может принимать одно из следующих значений:
-
имя или FQDN целевого контроллера домена, на котором проводится проверка (например,
dc1.elles.inno.tech); -
all-dc— в этом случае проверка будет выполнена для всех контроллеров в домене, включая эталонный; -
all-gc— в этом случае проверка будет выполнена для всех контроллеров домена с ролью сервера глобального каталога;
-
-
<referenceDC>— имя, FQDN или NTDS GUID эталонного контроллера, служащего источником актуальных данных о репликации; -
<NC>— DN раздела каталога (например,DC=elles,DC=inno,DC=tech), в котором выполняется проверка.
Подкоманда используется для диагностики и исправления репликационных инцидентов, вызванных отключением контроллера на срок, превышающий время жизни застарелых объектов (обычно 180 дней). Не рекомендуется использовать --removal-mode без предварительной проверки содержимого файла linobj.csv.
|
Параметры
Параметры вызова:
-
all-dc— выполнить проверку наличия застарелых объектов для всех контроллеров в домене, не включая эталонный; -
all-gc— выполнить проверку наличия застарелых объектов для всех контроллеров домена с ролью сервера глобального каталога, не включая эталонный; -
--removal-mode— включает режим удаления застарелых объектов с целевого контроллера домена.Без этой опции объекты только обнаруживаются и записываются в linobj.csv. При использовании этой опции объекты удаляются без репликации, что является необратимой операцией.
Примеры
Примеры демонстрируют использование подкоманды для обнаружения и удаления застарелых объектов (lingering objects) в домене.
Проверка на указанном контроллере домена без удаления
Пример проверки застарелых объектов в доменном разделе каталога на конкретном контроллере домена без удаления:
samba-tool drs verifyobjects dc1.elles.inno.tech dc2.elles.inno.tech "DC=elles,DC=inno,DC=tech" Replica verify objects on dc1.elles.inno.tech successful. For Elles see results in the file linobj.csv in the logs directory. For another directory service see results according to its rules.
В логе целевого контроллера (dc1.elles.inno.tech) зафиксированы события:
EventId 1938: Starting the lingering objects checking procedure with dc2.elles.inno.tech as reference DC. EventId 1946: Object CN=Deleted User,CN=Deleted Objects,DC=elles,DC=inno,DC=tech [123e4567-e89b-12d3-a456-426614174000] exists on server but doesn't exist on dc2.elles.inno.tech EventId 1942: Finishing the lingering objects checking procedure with dc2.elles.inno.tech as reference DC. Found 1 object(s).
Файл /app/inno-samba/var/linobj.csv содержит список обнаруженных застарелых объектов:
Found lingering objects;dc1.elles.inno.tech;dc2.elles.inno.tech;DC=elles,DC=inno,DC=tech 123e4567-e89b-12d3-a456-426614174000;CN=Deleted User,CN=Deleted Objects,DC=elles,DC=inno,DC=tech
Проверка на всех контроллерах домена без удаления
Пример проверки застарелых объектов на всех контроллерах домена, включая эталонный, без удаления:
samba-tool drs verifyobjects all-dc dc2.elles.inno.tech "DC=elles,DC=inno,DC=tech" Replica verify objects on dc1.elles.inno.tech successful. For Elles see results in the file linobj.csv in the logs directory. For another directory service see results according to its rules. Replica verify objects on dc2.elles.inno.tech successful. For Elles see results in the file linobj.csv in the logs directory. For another directory service see results according to its rules.
В логе каждого проверяемого контроллера (не включая dc2.elles.inno.tech) зафиксированы события:
EventId 1938: Starting the lingering objects checking procedure with dc2.elles.inno.tech as reference DC. EventId 1946: Object CN=Deleted User,CN=Deleted Objects,DC=elles,DC=inno,DC=tech [123e4567-e89b-12d3-a456-426614174000] exists on server but doesn't exist on dc2.elles.inno.tech EventId 1942: Finishing the lingering objects checking procedure with dc2.elles.inno.tech as reference DC. Found 1 object(s).
Файл /app/inno-samba/var/linobj.csv формируется на каждом контроллере домена и содержит только объекты, найденные на конкретном контроллере.
Проверка на всех контроллерах домена с ролью сервера глобального каталога без удаления
Пример проверки застарелых объектов на всех контроллерах с ролью сервера глобального каталога без удаления:
samba-tool drs verifyobjects all-gc dc2.elles.inno.tech "DC=elles,DC=inno,DC=tech" Replica verify objects on gc1.elles.inno.tech successful. For Elles see results in the file linobj.csv in the logs directory. For another directory service see results according to its rules. Replica verify objects on gc2.elles.inno.tech successful. For Elles see results in the file linobj.csv in the logs directory. For another directory service see results according to its rules.
В логе каждого контроллера домена с ролью сервера глобального каталога (не включая dc2.elles.inno.tech) зафиксированы события:
EventId 1938: Starting the lingering objects checking procedure with dc2.elles.inno.tech as reference DC. EventId 1946: Object CN=Deleted User,CN=Deleted Objects,DC=elles,DC=inno,DC=tech [123e4567-e89b-12d3-a456-426614174000] exists on server but doesn't exist on dc2.elles.inno.tech EventId 1942: Finishing the lingering objects checking procedure with dc2.elles.inno.tech as reference DC. Found 1 object(s).
Файл /app/inno-samba/var/linobj.csv формируется на каждом контроллере домена с ролью сервера глобального каталога и содержит только объекты, найденные на конкретном контроллере.
Проверка на указанном контроллере домена с удалением
Пример проверки и немедленного удаления застарелых объектов:
samba-tool drs verifyobjects dc1.elles.inno.tech dc2.elles.inno.tech "DC=elles,DC=inno,DC=tech" --removal-mode Replica verify objects on dc1.elles.inno.tech successful. For Elles see results in the file linobj.csv in the logs directory. For another directory service see results according to its rules.
В логе целевого контроллера (dc1.elles.inno.tech) зафиксированы события:
EventId 1937: Starting the lingering objects deleting procedure with dc2.elles.inno.tech as reference DC. EventId 1946: Object CN=Deleted User,CN=Deleted Objects,DC=elles,DC=inno,DC=tech [123e4567-e89b-12d3-a456-426614174000] exists on server but doesn't exist on dc2.elles.inno.tech EventId 1939: Finishing the lingering objects deleting procedure with dc2.elles.inno.tech as reference DC. Deleted 1 object(s).
Файл /app/inno-samba/var/linobj.csv содержит список удаленных застарелых объектов:
Deleted lingering objects;dc1.elles.inno.tech;dc2.elles.inno.tech;DC=elles,DC=inno,DC=tech 123e4567-e89b-12d3-a456-426614174000;CN=Deleted User,CN=Deleted Objects,DC=elles,DC=inno,DC=tech
В результате выполнения с параметром --removal-mode застарелые объекты удаляются локально с целевого контроллера, и это удаление не реплицируется на другие контроллеры домена.
Примеры ошибок
Пример ошибки отсутствия раздела на целевом контроллере домена:
samba-tool drs verifyobjects dc1.elles.inno.tech dc2.elles.inno.tech "DC=wrong,DC=domain" Error: DC dc1.elles.inno.tech doesn't host NC DC=wrong,DC=domain
Файл linobj.csv не создается.
Пример ошибки отсутствия раздела на эталонном контроллере домена:
samba-tool drs verifyobjects dc1.elles.inno.tech dc3.elles.inno.tech "DC=elles,DC=inno,DC=tech" Error: reference DC dc3.elles.inno.tech doesn't host NC DC=elles,DC=inno,DC=tech
Файл linobj.csv не создается.
Обновлено: