Обработка файлов cookie сервера LDAP
В LDAP результатом выполнения некоторых запросов являются большие наборы данных. Такие запросы представляют определенные проблемы с Windows Server.
Сбор и создание этих больших результирующих наборов является значительной работой. Многие атрибуты должны быть преобразованы из внутреннего представления в представление подключения LDAP. Для большинства атрибутов преобразование из внутреннего, часто двоичного формата, должно быть выполнено в текстовый формат UTF-8 в период ответа LDAP.
Еще одна проблема заключается в том, что результирующие наборы с десятками тысяч объектов требуют огромных объемов дискового пространства, легко нескольких сотен мегабайтов. Затем для них требуется много виртуального адресного пространства. Передача по сети сталкивается с проблемами, так как все усилия теряются при прерывании сеанса TCP при передаче.
Эти проблемы емкости и логистики призвали разработчиков Microsoft LDAP создать расширение LDAP, известное как Paged Query. Paged Query реализует элемент управления LDAP, чтобы разделить один огромный запрос на блоки небольших результирующих наборов. Paged Query — это стандарт RFC: RFC 2696.
Обработка файлов cookie на клиенте
Метод paged Query использует размер страницы, заданный клиентом или с помощью политики LDAP (MaxPageSize). Клиент всегда должен включить разбиение по страницам, отправив элемент управления LDAP.
При работе с запросом с большим количеством результатов в определенный момент достигается максимальное разрешенное количество объектов. Сервер LDAP упаковывает ответное сообщение и добавляет файл cookie, который содержит сведения, необходимые для продолжения поиска позднее.
Клиентское приложение должно обрабатывать файл cookie как непрозрачный большой двоичный объект. Он может получить количество объектов в ответе и продолжить поиск на основе наличия файла cookie. Чтобы продолжить поиск. Клиент отправляет тот же запрос на сервер LDAP, включая значение cookie из предыдущего ответа.
Если количество объектов не заполняет страницу, запрос LDAP завершен, а ответ не содержит файла cookie страницы. Если сервер не возвращает файл cookie, клиент должен учесть успешное выполнение поиска по страницам.
Если сервер возвращает ошибку, клиент должен считать поиск по страницам неудачным. Повторите результаты поиска при перезапуске поиска с первой страницы.
Обработка файлов cookie на стороне сервера
Windows Server возвращает клиенту файлы cookie и иногда сохраняет на сервере информацию, относящуюся к этим файлам. Данные хранятся на сервере в кэше, и к ним могут применяться определенные ограничения.
В этом случае файлы cookie, отправленные сервером клиенту, также используются сервером для просмотра сведений из кэша на сервере. Когда клиент продолжает поиск по страницам, Windows Server использует файл cookie клиента и все связанные сведения из кэша файлов cookie сервера для продолжения поиска. Если сервер не может найти связанные сведения о файлах cookie из кэша сервера из-за какой-либо причины, поиск прекращается и ошибка возвращается клиенту.
Управление пулом файлов cookie
Очевидно, что сервер LDAP обслуживает несколько клиентов одновременно. Кроме того, несколько клиентов одновременно могут запускать запросы, требующие использования кэша файлов cookie сервера. Поэтому в реализации Windows Server существует отслеживание использования пула файлов cookie и ограничений, поэтому пул файлов cookie не занимает слишком много ресурсов. Администраторы могут задавать ограничения с помощью следующих параметров в политике LDAP. Ниже приведены значения по умолчанию и объяснения.
MinResultSets: 4
Сервер LDAP не смотрит на максимальный размер пула, если в кэше файлов cookie сервера меньше записей MinResultSets.
MaxResultSetSize: 262 144 байт
Общий размер кэша файлов cookie на сервере не должен превышать максимальное значение MaxResultSetSize в байтах. Если значение превышено, файлы cookie, начиная с самого старого, будут удаляться до тех пор, пока размер пула не станет меньше значения MaxResultSetSize или меньше размера файлов cookie MinResultSets, находящихся в пуле. При использовании параметров по умолчанию сервер LDAP считает пул 450 КБ ОК, если хранится только 3 файла cookie.
MaxResultSetsPerConn: 10
Для каждого LDAP-подключения в пуле сервер LDAP не допускает количество файлов cookie, превышающее значение MaxResultSetsPerConn.
Обработка удаленных файлов cookie
Удаление сведений об файлах cookie из кэша сервера LDAP не приводит к немедленной ошибке для приложений во всех случаях. Приложения могут перезапустить страничный поиск с начала и выполнить его при следующей попытке. Некоторые приложения располагают подобным механизмом повтора для дополнительной надежности.
Некоторые приложения могут выполнять поиск страницы и никогда не завершайте его. Этот незавершенный поиск может оставить записи в кэше файлов cookie сервера LDAP, которые обрабатываются с помощью механизма, описанного ранее. Этот механизм необходим для освобождения памяти на сервере для активного поиска LDAP.
Что происходит при удалении такого файла cookie на сервере, и клиент продолжает поиск с помощью этого дескриптора cookie? Сервер LDAP не находит файл cookie в кэше файлов cookie сервера и возвращает ошибку для запроса. Ответ на ошибку аналогичен следующему:
00000057: LdapErr: DSID-xxxxxxxx, comment: Error processing control, data 0, v1db1
Примечание.
Шестнадцатеричное значение за dsID зависит от версии сборки двоичных файлов сервера LDAP.
Отчеты о пуле файлов cookie
Сервер LDAP имеет возможность регистрировать события через категорию 16 Ldap Interface
в диагностика ключа NTDS. Если для этой категории 2
задано значение, можно получить следующие события:
Log Name: Directory Service
Source: Microsoft-Windows-ActiveDirectory_DomainService
Event ID: 2898
Task Category: LDAP Interface
Level: Information
Description:
Internal event: The LDAP server has reached the limit of the number of Result Sets it will maintain for a single connection. A stored Result Set will be discarded. This will result in a client being unable to continue a paged LDAP search.
Maximum number of Result Sets allowed per LDAP connection:
10
Current number of Result Sets for this LDAP connection:
11
User Action
The client should consider a more efficient search filter. The limit for Maximum Result Sets per Connection may also be increased.
Log Name: Directory Service
Source: Microsoft-Windows-ActiveDirectory_DomainService
Event ID: 2899
Task Category: LDAP Interface
Level: Information
Description:
Internal event: The LDAP server has exceeded the limit of the LDAP Maximum Result Set Size. A stored Result Set will be discarded. This will result in a client being unable to continue a paged LDAP search.
Number of result sets currently stored:
4
Current Result Set Size:
263504
Maximum Result Set Size:
262144
Size of single Result Set being discarded:
40876
User Action
The client should consider a more efficient search filter. The limit for Maximum Result Set Size may also be increased.
События указывают, что хранимый файл cookie был удален. Это не означает, что клиент видел ошибку LDAP, но только то, что сервер LDAP достиг ограничений администрирования для кэша. В некоторых случаях в клиенте LDAP может быть отменен страничный поиск и ошибка никогда не возникнет.
Мониторинг пула файлов cookie
Если в вашем домене никогда не возникают ошибки поиска LDAP, отслеживать пул файлов cookie поиска страниц сервера LDAP не потребуется. Если в среде отображаются ошибки, связанные со страничным поиском LDAP, может возникнуть проблема ограничения заданного администратором размера пула файлов cookie.
События 2898 и 2899 являются единственными способами, позволяющими узнать о достижении сервером LDAP ограничений, установленных администратором. При возникновении ошибки запросов LDAP из-за ошибки обработки элементов управления следует рассмотреть возможность увеличения ограничений на один или несколько параметров политики LDAP. Ограничения можно найти в разделе "Управление пулом файлов cookie" в зависимости от того, какое событие вы получаете.
Если на сервере DC/LDAP отображается событие 2898, рекомендуется задать значение MaxResultSetsPerConn равным 25. Более 25 параллельных поисковых запросов на одном подключении LDAP не обычно. Если вы продолжаете видеть событие 2898, рассмотрите возможность изучения клиентского приложения LDAP, которое сталкивается с ошибкой. Подозрение будет в том, что он каким-то образом зависает, извлекая более страничные результаты, оставляет файл cookie ожидающим и перезапускает новый запрос. Узнайте, будет ли приложение в какой-то момент иметь достаточно файлов cookie для своих целей. Кроме того, можно увеличить значение MaxResultSetsPerConn за пределами 25. При появлении событий 2899, зарегистрированных на контроллерах домена, план будет отличаться. Если сервер DC/LDAP работает на компьютере с достаточной памятью (несколько ГБИТ/с бесплатной памятью), рекомендуется задать maxResultsetSize на сервере >LDAP значение =250 МБ. Это ограничение является достаточным для хранения больших объемов страничных поисков LDAP даже в очень крупных каталогах.
Если вы по-прежнему видите события 2899 с пулом 250 МБ или более, скорее всего, у вас есть множество клиентов с очень большим количеством возвращаемых объектов, запрашиваемых часто. Данные, которые можно собрать с помощью набора сборщиков данных Active Directory, помогут найти повторяющиеся запросы страниц, которые помогут вам оставить занятую серверы LDAP. Эти запросы отображаются с рядом возвращаемых записей, которые соответствуют размеру используемой страницы.
Если это возможно, следует просмотреть проект приложения и реализовать другой подход с более низкой частотой, объемом данных и/или меньшим количеством экземпляров клиента, запрашивающих эти данные. Если у вас есть приложения, для которых у вас есть доступ к исходному коду, см. статью "Создание эффективных приложений с поддержкой AD " для понимания оптимального способа доступа приложений к AD.
Если поведение запроса не может быть изменено, один из подходов также добавляет более реплицированные экземпляры контекстов именования, необходимых и для распространения клиентов. Репликация экземпляра и распространение клиента может снизить нагрузку на отдельные серверы LDAP.