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

我在CENTOS服务器上使用openLDAP。

为了testing我使用JMETER与LDAP查询和我的软件使用条目。

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

 index ou,description,l eq,pres,sub 

Jmeter不返回描述字段,我的软件不允许我再次login。

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

我如何优化我的perfs?
为什么索引删除我想要的答案的属性,并使我的软件无法使用我的目录了?

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

 /etc/init.d/slapd停止
 slapindex命令
 chown openldap:openldap / var / lib / ldap / *
 /etc/init.d/slapd启动

我结束了这样做

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

尽pipe原始海报的答案已经解决,但是OpenLDAP 2.4用户仍然可以使用这个解决scheme。 OpenLDAP 2.4不再使用普通的configuration文件,但所有东西都必须使用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您会注意到一个名为l.bdb的新索引l.bdb ,如果您添加新logging,则该文件应该会增长。 请注意,我还没有发现索引创build是否正在为现有logging进行 (我目前正在这样做),但是当我知道更多的时候我会修改这个答案。