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 데이터 저장소에 개체가 11,000개 이상 있을 때 복제본을 생성하는 경우 발생할 수 있습니다. 11,000은 검색 시 반환될 수 있는 기본 최대 개체 수입니다.

_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

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 명령에 대한 입력으로 터미널 윈도우에 입력해야 합니다. 아래 [search base]를 검색 기반으로 대체해야 합니다. 괄호도 제거해야 합니다.

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"

자세히 알아보기

   

셸 스크립트 대체

다음은 이 절차를 자동화하는 데 사용할 수 있는 셸 스크립트 텍스트입니다. 위에서처럼 디렉토리 관리자에 대해 kinit 명령을 사용하고 이 스크립트를 실행하기만 하면 됩니다. 텍스트 편집기 제안 사항에 대해서는 이 문서를 참조하십시오.

#!/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
게시일: