Open Directory 的数据复制功能可能无法正常工作;“slapd.log”中出现“已超出大小限制”

Open Directory 的数据复制功能可能无法正常工作;出现这种情况时,“/var/log/slapd.log”中会出现以下条目

slapd[209]: do_syncrep2: rid=001 LDAP_RES_SEARCH_RESULT (4) Size limit exceeded
slapd[209]: do_syncrep2: rid=001 (4) Size limit exceeded

如果 Open Directory 服务器已长时间故障,或者 LDAP 数据存储中多于 11000 个对象时创建了备份,则会出现这种情况。11000 是搜索中可以返回的默认最大对象数量。

允许 _ldap_replicator 用户覆盖搜索限制。这可通过在每个 Open Directory 服务器上更改 LDAP 服务器配置来实现。这涉及到以目录管理员身份进行鉴定以及在“终端”中运行部分 LDAP 修改命令。还需要知道 LDAP 服务器的搜索库,也称为命名环境。

可使用以下步骤来实现。

首先,找到 LDAP 服务器的搜索库

找到 LDAP 服务器的搜索库。这通常是每个标签前缀为 dc= 的服务器的完全限定域名,且句点改为了逗号。

例如,主机名为 server.example.com 的服务器的默认搜索库为“dc=server,dc=example,dc=com”。可以通过使用以下“终端”命令来查询 LDAP 服务器本身来验证搜索库:

ldapsearch -x -LLL -b “” -s base namingContexts

查找包含命名环境的行,搜索库位于冒号后面,如以下示例中所示。

dn:
namingContexts: dc=server,dc=example,dc=com

第二,获取目录管理员的 kerberos 凭证

该用户的默认名称是 diradmin,但该名称本应在创建 Open Directory 主服务器时更改。这可以通过使用“终端”中的 kinit 命令来实现。运行以下命令,用正确的名称替代目录管理员的名称 diradmin(如有必要),并在系统提示时输入密码。没有输出。

kinit diradmin

下一步,使用“终端”的交互模式中的 ldapmodify 进行更改。只需在“终端”中执行以下命令:

ldapmodify

注:这将输出一些 SASL 信息并等待输入。成功后,SASL 输出结果类似于以下内容:

SASL/GSSAPI authentication started
SASL username: diradmin@REALM
SASL SSF: 56
SASL data security layer installed.

修改配置

最后,对配置作出修改。这需要在“终端”窗口中输入以下所有文字,作为对“ldapmodify”命令的输入。搜索库必须替代为以下的 [搜索库]。还需要移除括号。

dn: olcDatabase={1}bdb,cn=config
changetype: modify
add: olcLimits
olcLimits: dn.exact="uid=_ldap_replicator,cn=users,[search base]" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited

dn: olcDatabase={2}bdb,cn=config
changetype: modify
add: olcLimits
olcLimits: dn.exact="uid=_ldap_replicator,cn=users,[search base]" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited

现在按 Control-D。

如果所有操作都成功,将会显示类似以下内容的信息。

modifying entry "olcDatabase={1}bdb,cn=config"
modifying entry "olcDatabase={2}bdb,cn=config"

了解详情

   

Shell 备用脚本

以下是可用于自动处理该过程的 Shell 脚本的文字。只需按如上所述填写目录管理员并运行此脚本。请参阅此文章了解文本编辑器建议。

#!/bin/sh
nc=`ldapsearch -x -LLL -b "" -s base namingContexts | awk '/namingContexts/ {print $2}'`
ldapmodify  <<EOF
dn: olcDatabase={1}bdb,cn=config
changetype: modify
add: olcLimits
olcLimits: dn.exact="uid=_ldap_replicator,cn=users,$nc" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited

dn: olcDatabase={2}bdb,cn=config
changetype: modify
add: olcLimits
olcLimits: dn.exact="uid=_ldap_replicator,cn=users,$nc" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited

EOF
#end of script
发布日期: