当我修改 slapd.conf 中的索引时,相同的 LDAP 查询不会返回数据

当我修改 slapd.conf 中的索引时,相同的 LDAP 查询不会返回数据

我在 CENTOS 服务器上使用 openLDAP。

为了测试,我使用带有 LDAP 查询的 JMETER 和使用这些条目的软件。

我想优化某个特定请求,我会大量搜索 OU 属性:描述。搜索使用 l 属性来查找它:搜索过滤器l=username。如果我的索引(在 slapd.conf 中)是:

index ou,description,l           eq,pres,sub

Jmeter 没有返回描述字段,并且我的软件不允许我再记录。

如果我从 slapd.conf 中删除此行或者使用:`index ou,description eq,pres,sub 我会有相同的平均响应时间。

我该如何优化我的性能?
为什么索引会从答案中删除我想要的属性,并使我的软件无法再使用我的目录?

答案1

每一个每次添加或删除索引时,您都必须运行slapindex并记住保留数据库文件的正确权限。例如,在使用 OpenLDAP 的 Debian 上,您必须:

/etc/init.d/slapd 停止
拍击指数
chown openldap:openldap /var/lib/ldap/*
/etc/init.d/slapd 启动

答案2

我最终这样做了

sudo /etc/init.d/slapd stop

sudo -u insert-your-openldap-server-user-here -c slapindex -v

sudo /etc/init.d/slapd start

因此在我的 Debian 机器上,用户是openldap,这使得命令看起来像

sudo -u openldap slapindex -v -d 1

答案3

虽然原始发帖人的答案已经解决,但这里有一个针对 OpenLDAP 2.4 用户的解决方案。OpenLDAP 2.4 不再使用纯配置文件,但必须使用 修改所有内容ldapmodify

首先,您需要识别有问题的数据库。

[root@ldap-server ~]# cd /etc/openldap/slapd.d/cn=config
[root@ldap-server cn=config]# ls
cn=schema       olcDatabase={0}config.ldif     olcDatabase={1}monitor.ldif
cn=schema.ldif  olcDatabase={-1}frontend.ldif  olcDatabase={2}hdb.ldif

这里的数据库是olcDatabase={2}hdb.ldif,使用 grep 检查索引得到的结果:

[root@ldap-server cn=config]# grep olcDbIndex olcDatabase\=\{2\}hdb.ldif
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub

例如,如果我需要添加海报的索引l,我会准备以下 ldif 文件:

[root@ldap-server ~]# cat ldap-hdb-tuning.ldif
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: ou,description,l eq,pres,sub

最后一步是使用 运行该文件ldapmodify

[root@ldap-server ~]# ldapmodify -Y EXTERNAL -H ldapi:/// -D cn=config -f ldap-hdb-tuning.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={2}hdb,cn=config"

如果你仔细查看,/var/lib/ldap你会发现一个新的 index.file,l.bdb如果你添加新记录,它应该会增长。请注意,我还没有发现索引创建是否正在运行中现有记录(我现在正在这样做)但当我了解更多信息时,我会调整这个答案。

相关内容