Настройка сервера глобального каталога

«Эллес» реализует механизм готовности глобального (Global Catalog, GC) каталога и предоставляет конфигурационные параметры для управления им.

См. также описание доступных инструментов администрирования роли глобального каталога с помощью утилиты samba-tool в разделе «Администрирование роли глобального каталога».

Механизм готовности глобального каталога

После назначения роли сервера GC контроллер домена «Эллес» не включает функциональность GC немедленно. Вместо этого применяется многоэтапный механизм, управляемый параметрами конфигурации и внутренними IRPC-вызовами, который гарантирует, что GC будет объявлен готовым к работе только после достижения достаточного уровня репликации данных или по истечении заданного времени.

Механизм работает следующим образом:

  1. При запуске LDAP-сервиса проверяется, является ли локальный контроллер домена сервером GC. Если да, то инициализируется внутренний контекст, содержащий параметры готовности, включая уровень заполненности разделов, задержку объявления и флаг принудительного включения.

  2. Система проверяет наличие и состояние реплицируемых разделов каталога (Partial Attribute Sets, PAS). Для этого выполняется анализ структуры доменных разделов, определяется, какие из них уже доступны локально, а какие требуют репликации с других контроллеров домена.

  3. Если обнаруживаются незавершенные репликации, система инициирует внутренние вызовы (IRPC) к сервисам KCC и drepl:

    • KCC обновляет топологию репликации, создавая соединения для получения недостающих разделов;

    • drepl запускает процесс репликации для загрузки недостающих данных;

    • после завершения репликации вызывается сервис для регистрации SRV-записей в DNS.

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

  5. Готовность GC объявляется только после выполнения одного из условий:

    • достигнут уровень заполненности, заданный параметром gc_partition_occupancy (от 0 до 6), соответствующий степени завершенности репликации всех разделов в лесу или локальном сайте;

    • истек таймаут, заданный параметром gc_delay_advertisement, после которого GC объявляется готовым, даже если репликация не завершена;

    • установлен флаг gc_promotion_complete = yes, что немедленно активирует GC без каких-либо проверок.

  6. При объявлении готовности:

    • атрибут isGlobalCatalogReady устанавливается в базе данных в значение TRUE;

    • записи SRV и A для GC регистрируются в DNS;

    • LDAP-сервис открывает прослушивание портов 3268 и 3269 для обслуживания запросов клиентов.

Если GC объявлен готовым до полной синхронизации (через gc_delay_advertisement или gc_promotion_complete), в логах генерируются предупреждения (сообщения с идентификаторами 1578 или 1119), указывающие на потенциальную несогласованность данных (cм. «Логирование событий глобального каталога»).

«Эллес» также реализует механизм обнаружения доступных GC в лесу через сервис disco, который периодически опрашивает другие контроллеры домена через CLDAP и DNS, чтобы поддерживать актуальный список доступных GC для клиентских запросов (см. «Настройка клиента глобального каталога»).

Управление уровнем заполненности разделов каталога

Для обеспечения целостности и согласованности глобального каталога «Эллес» использует параметр ldap_server:gc_partition_occupancy, который определяет минимальный уровень заполненности реплицируемых разделов каталога, необходимый для включения роли сервера глобального каталога.

Параметр принимает целочисленные значения от 0 до 6, соответствующие стадиям завершения репликации:

  • уровень 0 — нет требований к заполненности, сервер глобального каталога может быть включен немедленно;

  • уровень 1 — хотя бы для одного частичного раздела каталога начата репликация;

  • уровень 2 — хотя бы один частичный раздел каталога полностью синхронизирован;

  • уровень 3 — для всех частичных разделов каталога, расположенных в локальном сайте, начата репликация;

  • уровень 4 — все частичные разделы каталога, расположенные в локальном сайте, полностью синхронизированы;

  • уровень 5 — для всех частичных разделов каталога в лесу начата репликация;

  • уровень 6 — все частичные разделы каталога в лесу полностью синхронизированы.

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

Пример настройки:

[global]
    ...
    ldap_server:gc_partition_occupancy = 4
    ...

При достижении уровня заполненности или принудительном включении (через gc_delay_advertisement) устанавливается атрибут isGlobalCatalogReady в базе данных и регистрируется SRV-запись в DNS.

Установка задержки перед включением роли сервера глобального каталога

По умолчанию при запуске контроллер домена «Эллес» не устанавливает атрибут isGlobalCatalogReady и не регистрирует в DNS SRV-запись для обнаружения его в качестве сервера глобального каталога до тех пор, пока не будет завершена синхронизация всех частично реплицируемых разделов каталога.

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

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

При необходимости принудительно включить роль сервера глобального каталога через определенное время после запуска используйте конфигурационный параметр ldap_server:gc_delay_advertisement в разделе [global] файла smb.conf на контроллере домена «Эллес».

Параметр задает период в секундах, по истечении которого контроллер домена устанавливает атрибут isGlobalCatalogReady и регистрирует в DNS SRV-запись для обнаружения его в качестве сервера глобального каталога, независимо от текущего уровня заполненности разделов каталога.

По умолчанию период не установлен (ldap_server:gc_delay_advertisement = 2147483647), и роль сервера глобального каталога включается только после достижения уровня заполненности, заданного параметром ldap_server:gc_partition_occupancy (по умолчанию — уровень 6).

Параметр ldap_server:gc_delay_advertisement имеет приоритет над уровнем заполненности, но не отменяет его. Если gc_delay_advertisement истек, а уровень заполненности ниже заданного gc_partition_occupancy, сервер глобального каталога будет объявлен, но в логах появится предупреждение (EventId 1578) о несоответствии требований к репликации.

Пример изменения значения параметра:

[global]
    ...
    ldap_server:gc_delay_advertisement = 30
    ...

Принудительное немедленное включение роли сервера глобального каталога

В дополнение к параметру ldap_server:gc_delay_advertisement, который управляет временем ожидания перед объявлением сервера глобальным каталогом, «Эллес» предоставляет параметр ldap_server:gc_promotion_complete, позволяющий немедленно и безусловно активировать роль сервера глобального каталога при запуске службы inno-samba, игнорируя все проверки репликации и уровень заполненности разделов.

При установке значения yes параметр ldap_server:gc_promotion_complete заставляет LDAP-сервер сразу установить атрибут isGlobalCatalogReady в базе данных и зарегистрировать SRV-запись в DNS, даже если ни один частичный раздел каталога не синхронизирован. Это эквивалентно немедленному включению роли сервера глобального каталога без ожидания завершения процессов KCC, репликации или проверок целостности.

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

По умолчанию параметр не установлен (имеет значение no).

Пример изменения значения параметра:

[global]
    ...
    ldap_server:gc_promotion_complete = yes
    ...

При включении параметра:

  • параметр ldap_server:gc_partition_occupancy игнорируется;

  • параметр ldap_server:gc_delay_advertisement игнорируется;

  • в логах появляется сообщение EventId 1119: This domain controller is now a global catalog, указывающее на немедленное включение роли (см. раздел «Логирование событий глобального каталога»);

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

Для обеспечения согласованности рекомендуется использовать gc_promotion_complete = yes только в сочетании с предварительной ручной синхронизацией всех разделов каталога или в средах, где репликация не требуется.

Управление повторными IRPC-вызовами

Для управления повторными внутренними RPC-вызовами (Internal Remote Procedure Call, IRPC), совершаемыми LDAP-сервером при включении функциональности глобального каталога, используются параметры:

  • ldap_server:gc_irpc_retry_period_msec (по умолчанию — 60000):

    • задает интервал в миллисекундах для повторной попытки неуспешного IRPC-вызова;

    • также используется в качестве начальной задержки для первого вызова KCC;

  • ldap_server:gc_irpc_max_retries (по умолчанию — 30) — задает максимальное количество попыток повторения IRPC-вызова.

Если в процессе включения функциональности глобального каталога обнаруживается, что не все доменные разделы доступны локально, LDAP-сервер (сервис ldap_server) совершает несколько IRPC-вызовов:

  1. Вызывает сервис KCC (kccsrv) для обновления топологии репликации.

  2. Вызывает сервис репликации (dreplsrv).

  3. После завершения репликации — вызывает сервис обновления записей DNS (dnsupdate).

  4. Опционально вызывает сам себя для нотификации рабочих процессов.

Заданные по умолчанию значения параметров позволяют обеспечить корректное совершение описанной последовательности вызовов при включении функциональности глобального каталога.

В текущей версии «Эллес» эти параметры влияют только на вызовы KCC. Изменять их не требуется.

Сохранение размера файлов базы данных для LMDB-бэкенда

Если при присоединении сервера к домену с помощью команды samba-tool domain join в качестве базы данных указывается LMDB-бэкенд (--backend-store=mdb), для корректного создания файлов частичных доменных разделов каталога также должен быть задан достаточный для этого размер файлов базы данных (--backend-store-size).

Чтобы заданное при присоединении значение --backend-store-size было доступно функциональности глобального каталога, оно сохраняется в отдельном конфигурационном параметре — ldb_backend:store size.

Этот параметр добавляется автоматически в файл конфигурации smb.conf процедурой join. Изменять его значение вручную не требуется.

Обновлено: