Mancato funzionamento della replica di Open Directory: visualizzazione di "Size Limit exceeded" in slapd.log

La replica di Open Directory potrebbe non funzionare. Quando questo accade, voci come le seguenti vengono visualizzate in /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

Questo può accadere se un server Open Directory è stato spento per un lungo periodo di tempo oppure se è stata creata una replica in presenza di oltre 11.000 oggetti nell'archivio di dati LDAP. 11.000 è il numero massimo di default di oggetti che può essere restituito in una ricerca.

Consenti all'utente _ldap_replicator di sostituire il limite di ricerca. Ciò è possibile modificando la configurazione del server LDAP su ciascun server Open Directory. Questa procedura comporta l'autenticazione come amministratore di directory e l'esecuzione di alcuni comandi di modifica LDAP in Terminale. È necessario che la base della ricerca per il server LDAP, conosciuta anche come contesto dei nomi, sia nota.

Per effettuare questa operazione, attieniti ai passaggi riportati di seguito.

In primo luogo individua la base di ricerca per il server LDAP

Individua la base di ricerca per il server LDAP. Si tratta solitamente del nome di dominio qualificato del server con la stringa dc= aggiunta a ciascuna etichetta e i punti sostituiti da virgole.

Ad esempio un server con nome host server.esempio.com avrà una base di ricerca di default "dc=server,dc=esempio,dc=com". La base di ricerca può essere verificata interrogando lo stesso server LDAP con il seguente comando di Terminale:

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

Nell'output esemplificativo riportato di seguito cerca la riga contenente namingContexts e la base di ricerca si troverà dopo i due punti.

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

In secondo luogo ottieni le credenziali Kerberos per l'amministratore di directory

Il nome di default per questo utente è diradmin, ma potrebbe essere stato modificato quando è stato creato il master di Open Directory. Questa operazione viene eseguita tramite il comando kinit in Terminale. Esegui il seguente comando, sostituendo il nome corretto per l'amministratore di directory al posto di diradmin se necessario e immetti la password quando richiesta. Non viene restituito alcun output.

kinit diradmin

Successivamente usa ldapmodify in modalità interattiva in Terminale per apportare le modifiche. È sufficiente eseguire il seguente comando in Terminale:

ldapmodify

Nota: questo comando determinerà la visualizzazione di alcuni messaggi SASL e richiederà l'immissione di input. Al termine l'output SASL dovrebbe essere simile al seguente:

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

Modifica la configurazione

Infine apporta le modifiche alla configurazione. Questa operazione richiede l'immissione nella finestra di Terminale di tutte le stringhe di testo riportate di seguito come input per il comando ldapmodify. La base di ricerca deve essere sostituita con la stringa [base di ricerca] riportata di seguito. Anche le parentesi devono essere rimosse.

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

Ora premi Ctrl-D.

Se l'operazione viene eseguita correttamente, verranno visualizzati messaggi simili ai seguenti.

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

Ulteriori informazioni

   

Script shell alternativo

Di seguito viene riportato il testo di uno script shell che può essere usato per automatizzare questo processo. Devi solo usare il comando kinit per l'amministratore di directory come riportato in precedenza ed eseguire questo script. Per suggerimenti sull'editor di testo, consulta questo articolo.

#!/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
Data di pubblicazione: