Die Open Directory-Replikation funktioniert u. U. nicht; "slapd.log" enthält "Size Limit exceeded" (Maximale Größe überschritten)

Die Open Directory-Replikation funktioniert u. U. nicht; wenn dies der Fall ist, enthält "/var/log/slapd.log" Einträge wie die folgenden:

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

Dies kann auftreten, wenn ein Open Directory-Server für einen längeren Zeitraum inaktiv war oder wenn ein Replikat erstellt wurde, während sich mehr als 11.000 Objekte im LDAP-Datenspeicher befanden. 11.000 ist die standardmäßige Höchstzahl von Objekten, die bei einer Suche zurückgegeben werden können.

Legen Sie fest, dass der Benutzer "_ldap_replicator" die Größenbeschränkung für Suchvorgänge überschreiben kann. Hierfür muss die LDAP-Serverkonfiguration auf jedem Open Directory-Server geändert werden. Dabei müssen Sie sich als Verzeichnisadministrator authentifizieren und einige LDAP-Bearbeitungsbefehle in Terminal ausführen. Außerdem muss die Suchbasis (auch als Namenskontext bezeichnet) für den LDAP-Server bekannt sein.

Dies können Sie durch Ausführen der folgenden Schritte erreichen.

Erstens: Suchbasis für den LDAP-Server ermitteln

Ermitteln Sie die Suchbasis für den LDAP-Server. Hierbei handelt es sich normalerweise um den vollqualifizierten Domänennamen des Servers, wobei jedem Namensbestandteil dc= vorangestellt ist und die Punkte in Kommas geändert wurden.

Ein Server mit dem Hostnamen server.example.com verfügt beispielsweise über die Standardsuchbasis "dc=server,dc=example,dc=com". Die Suchbasis kann durch Abfragen des LDAP-Servers mit dem folgenden Terminal-Befehl bestätigt werden:

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

Suchen Sie nach der Zeile, die "namingContexts" enthält. Die Suchbasis ist wie im nachfolgenden Beispiel nach dem Doppelpunkt angegeben.

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

Zweitens: Kerberos-Anmeldedaten für den Verzeichnisadministrator abrufen

Der Standardname dieses Benutzers lautet diradmin. Dieser Name wurde jedoch u. U. beim Erstellen des Open Directory-Masters geändert. Dies erfolgt mit dem Befehl kinit in Terminal. Führen Sie den folgenden Befehl aus. Ersetzen Sie dabei diradmin durch den richtigen Namen des Verzeichnisadministrators (falls erforderlich), und geben Sie bei einer entsprechenden Aufforderung das Passwort ein. Es gibt keine Ausgabe.

kinit diradmin

Verwenden Sie anschließend ldapmodify im interaktiven Modus in Terminal, um die Änderungen vorzunehmen. Führen Sie in Terminal einfach Folgendes aus:

ldapmodify

Hinweis: Hierbei werden einige SASL-Meldungen ausgegeben, und es wird auf eine entsprechende Eingabe gewartet. Bei erfolgreicher Ausführung sieht die SASL-Ausgabe in etwa wie folgt aus:

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

Konfiguration ändern

Nehmen Sie abschließend die Änderungen an der Konfiguration vor. Hierfür muss der gesamte nachfolgende Text im Fenster von Terminal als Eingabe für den Befehl "ldapmodify" eingegeben werden. Die Zeichenfolge [search base] unten muss durch die Suchbasis ersetzt werden. Darüber hinaus müssen die eckigen Klammern entfernt werden.

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

Drücken Sie nun Ctrl-D.

Bei komplett erfolgreicher Ausführung werden Meldungen wie die folgenden angezeigt.

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

Weitere Informationen

   

Alternative Vorgehensweise mit einem Shell-Skript

Im Folgenden finden Sie den Text eines Shell-Skripts, mit dem Sie diesen Vorgang automatisieren können. Führen Sie einfach wie oben den Befehl "kinit" für den Verzeichnisadministrator aus, und führen Sie dieses Skript aus. Vorschläge für Texteditoren erhalten Sie in diesem Artikel.

#!/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
Veröffentlichungsdatum: