Cómo se controlan las cookies de servidor LDAP
En LDAP, algunas consultas producen un resultado de gran tamaño. Estas consultas presentan algunos desafíos para Windows Server.
La recopilación y creación de estos grandes conjuntos de resultados suponen mucho trabajo. Muchos de los atributos deben convertirse a partir de una representación interna a la representación de conexión LDAP. Para muchos atributos, una conversión de un formato interno, a menudo binario, debe producirse en un formato UTF-8 basado en texto en el marco de respuesta LDAP.
Otro desafío es que los conjuntos de resultados con decenas de miles de objetos requieren enormes cantidades de espacio de almacenamiento, llegando fácilmente a varios cientos de megabytes. Estos requieren una gran cantidad de espacio de direcciones virtuales. La transferencia a través de la red encuentra problemas, ya que se pierde todo el esfuerzo cuando la sesión TCP se desglosa en tránsito.
Estos problemas logísticos y de capacidad han llevado a los desarrolladores de Microsoft LDAP a crear una extensión LDAP conocida como "Consulta paginada". Consulta paginada implementa un control LDAP para separar una consulta enorme en fragmentos de conjuntos de resultados menores. Consulta paginada es un estándar RFC: RFC 2696.
Control de cookies en el cliente
El método de consulta paginada usa el tamaño de página establecido por el cliente o mediante una directiva LDAP ("MaxPageSize"). El cliente siempre necesita habilitar la paginación mediante el envío de un control LDAP.
Al trabajar en una consulta con muchos resultados, en algún momento se alcanza el número máximo de objetos permitidos. El servidor LDAP empaqueta el mensaje de respuesta y agrega una cookie que contiene la información que necesita para continuar después la búsqueda.
La aplicación cliente debe tratar la cookie como blob opaco. Puede recuperar el recuento de objetos en la respuesta y puede continuar la búsqueda en función de la presencia de la cookie. Para continuar con la búsqueda, el cliente envía la misma consulta al servidor LDAP, incluido el valor de la cookie de la respuesta anterior.
Si el número de objetos no llena una página, la consulta LDAP está completa y la respuesta no contiene cookies de página. Si el servidor no devuelve ninguna cookie, el cliente debe considerar que la búsqueda paginada se ha completado correctamente.
Si el servidor devuelve un error, el cliente debe considerar que la búsqueda paginada es incorrecta. Si se reintenta la búsqueda, esta se reiniciará desde la primera página.
Administración de cookies del lado servidor
Windows Server devuelve la cookie al cliente y a veces almacena información relacionada con la cookie en el servidor. Esta información se almacena en el servidor en una caché y está sujeta a determinadas limitaciones.
En este caso, la cookie enviada al cliente por el servidor también la usa el servidor para buscar la información de la memoria caché en el servidor. Cuando el cliente continúa la búsqueda paginada, Windows Server usa la cookie del cliente, así como cualquier información relacionada de la caché de cookies del servidor para continuar la búsqueda. Si el servidor no encuentra la información relacionada con el cookie en la caché del servidor por cualquier motivo, la búsqueda se detendrá y se devolverá un error al cliente.
Cómo se administra el grupo de cookies
Obviamente, el servidor LDAP atiende más de un cliente a la vez. Además más de un cliente a la vez puede lanzar consultas que requieran el uso de la caché de cookies del servidor. Por consiguiente, en la implementación de Windows Server se realiza un seguimiento del uso del conjunto de cookies y se establecen límites para que el conjunto de cookies no consuma demasiados recursos. Los administradores pueden establecer límites mediante la siguiente configuración de la directiva LDAP. Estos son los valores predeterminados y las explicaciones.
MinResultSets: 4
El servidor LDAP no examina el tamaño máximo del grupo, si hay un valor inferior al número de entradas MinResultSets en la caché de cookies del servidor.
MaxResultSetSize:: 262.144 bytes
El tamaño total de caché de cookies en el servidor no puede superar el valor máximo de MaxResultSetSize en bytes. Si lo hace, se eliminan las cookies empezando por la más antigua hasta que el grupo es menor que MaxResultSetSize bytes o hay menos de MinResultSets cookies en el grupo. Cuando se usa la configuración predeterminada, el servidor LDAP considera que un grupo de 450 KB será correcto si solo hay tres cookies almacenadas.
MaxResultSetsPerConn: 10
El servidor LDAP no permite más de MaxResultSetsPerConn cookies por conexión LDAP en el grupo.
Control de las cookies eliminadas
La eliminación de la información de cookies de la caché del servidor LDAP no produce un error inmediato en las aplicaciones en todos los casos. Las aplicaciones pueden reiniciar la búsqueda paginada desde el principio y completarla en otro intento. Algunas aplicaciones tienen este tipo de un mecanismo de reintento para agregar solidez.
Algunas aplicaciones pueden usar una búsqueda de página y no completarla nunca. Esta búsqueda no completada puede dejar entradas en la caché de cookies del servidor LDAP, que se controlan mediante el mecanismo descrito anteriormente. Este mecanismo es esencial para liberar memoria en el servidor para búsquedas de LDAP activas.
¿Qué ocurre cuando esta cookie se elimina en el servidor y el cliente continúa la búsqueda con este identificador de cookies? El servidor LDAP no encuentra la cookie en la memoria caché de cookies del servidor y devuelve un error en la consulta. La respuesta al error es similar a:
00000057: LdapErr: DSID-xxxxxxxx, comment: Error processing control, data 0, v1db1
Nota
El valor hexadecimal detrás de "DSID" variará en función de la versión de compilación de los binarios del servidor LDAP.
Informes sobre el grupo de cookies
El servidor LDAP tiene la capacidad de registrar eventos a través de la categoría 16 Ldap Interface
en la clave de diagnóstico de NTDS. Si establece esta categoría en 2
, puede obtener los siguientes eventos:
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.
Los eventos señalan que se ha quitado una cookie almacenada. No significa que un cliente haya visto el error LDAP, sino que el servidor LDAP ha alcanzado los límites de administración de la caché. En algunos casos, un cliente LDAP puede haber abandonado la búsqueda paginada y puede que no haya visto nunca el error.
Supervisión del grupo de cookies
Si nunca experimenta errores de búsqueda LDAP en su dominio, puede que no necesite nunca supervisar el grupo de cookies de búsqueda de página de servidor LDAP. En caso de que vea los errores relacionados con la búsqueda de página LDAP en su entorno, puede que tenga un problema con los límites del administrador del grupo de cookies.
Los eventos 2898 y 2899 son las únicas maneras de saber que el servidor LDAP ha alcanzado los límites de administrador. Cuando las consultas LDAP generen un error debido al error de procesamiento de control, debería considerar la posibilidad de aumentar los límites en uno o varios valores de la configuración de la directiva LDAP. Los límites se pueden encontrar en la sección Administración del grupo de cookies, en función del evento que obtenga.
Si ve el evento 2898 en el servidor DC/LDAP, se recomienda establecer MaxResultSetsPerConn en 25. No es habitual que haya más de 25 búsquedas paginadas paralelas en una sola conexión LDAP. Si sigue viendo el evento 2898, considere la posibilidad de investigar la aplicación de cliente LDAP que encuentra el error. La conjetura sería que de algún modo se queda detenido al recuperar más resultados paginados, deja la cookie pendiente y reinicia una nueva consulta. Compruebe si en algún momento la aplicación tendría cookies suficientes para sus fines. También puede aumentar el valor de MaxResultSetsPerConn a más de 25. Cuando vea que eventos 2899 han iniciado sesión en los controladores de dominio, el plan sería diferente. Si su servidor DC/LDAP se ejecuta en una máquina con memoria suficiente (varios gigabytes de memoria libre), se recomienda establecer el MaxResultSetSize en el servidor LDAP en > = 250 MB. Este límite es lo suficientemente grande como para dar cabida a grandes volúmenes de búsquedas de página LDAP incluso en directorios muy grandes.
Si todavía está viendo eventos 2899 con un grupo de 250 MB, o más, es probable que tenga muchos clientes en los que se hayan devuelto un gran número de objetos, consultados con frecuencia. Los datos que puede recopilar con el Conjunto de recopiladores de datos de Active Directory pueden ayudarle a encontrar consultas paginadas repetitivas que mantienen los servidores LDAP ocupados. Estas consultas se muestran con un número de "Entradas devueltas" que coincide con el tamaño de la página usada.
Si es posible, debe revisar el diseño de la aplicación e implementar otro enfoque con una frecuencia y volumen de datos inferiores, o menos instancias de cliente que consultan estos datos. Si hay aplicaciones a cuyo código fuente tiene acceso, consulte Creación eficaz de aplicaciones habilitadas para AD, ya que encontrará ayuda para conocer la mejor forma de que las aplicaciones accedan a AD.
Si el comportamiento de las consulta no se puede cambiar, un enfoque consiste en agregar también más instancias replicadas de los contextos de nombres necesarios y redistribuir los clientes. La replicación de la instancia y la distribución del cliente pueden reducir la carga en los servidores LDAP individuales.