5

好的,这是一个 OpenLDAP 新问题,请耐心等待。我无法在网络上找到直接的答案,所以我们开始吧:

注意:最终目标是将 OpenLDAP 服务器设置为“单个”查询的代理/缓存,以在主 LDAP 中获取所有结果(如果您熟悉 .Net 的 DirectoryServices dll,该应用程序只是在 LDAP 上进行 FindAll() 调用)。

我已经到了代理/缓存显示与主服务器相同的结果(即,它正在代理查询)的地步,但它似乎没有缓存。我这么说是因为两个原因:

  • 如果我对主 LDAP 中的条目进行更新,我会立即在代理中看到更新的值(使用指向代理 URL 的 LDAP 浏览器),甚至在 TTL 过期之前。
  • 如果我关闭主 LDAP 并查询代理,我会收到连接异常。如果我没记错的话,我应该得到一个缓存的结果(再一次,TTL 没有过期)。

这是我用于代理/缓存的 OpenLDAP 配置文件(在 Windows 上,OpenLDAP v.2.4.23):


数据库 ldap

uri“ldap://MyPC”

后缀“dc=local”

rootdn "dc=local"

覆盖 pcache

代理缓存 bdb 1000 3 250 432000

目录 ./cache

索引对象类 eq

指数 cn eq,sub

代理缓存查询 100

proxyattrset 0 cn certificateRevocationList

代理模板 (objectclass=) 0 600


有几点值得注意:

  • 我在主 LDAP 的条目中包含“所有”属性作为代理属性集的一部分。我知道这对于缓存/服务预期的查询是必要的。由于我想缓存 FindAll() 我认为这是这样做的方法。
  • 一致性检查间隔设置为 5 天(432000 秒)。我希望缓存能够提供缓存查询,即使主服务器已经停机很长时间。另请注意,TTL 设置为 10 分钟(600 秒) - 这是因为我希望缓存查询至少每 10 分钟刷新一次(如果主服务器已启动)。

好的,关于我的问题

  1. 有没有一种方法可以快速配置 OpenLDAP 以缓存所有查询,而无需在 proxyattrset 中指定所有属性?
  2. 为什么在我终止主 LDAP 并在 TTL 内查询代理时出现连接错误?我的查询没有被缓存吗?如果是这样,我在配置文件中缺少什么来启用缓存?
4

0 回答 0