Open Directory 복제가 작동하지 않고 slapd.log에 'Size limit exceeded'(크기가 제한을 초과함)가 표시될 수 있음

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 서버의 검색 기반(네이밍 컨텍스트라고도 함)도 확인해야 합니다.

이를 수행하는 단계는 다음과 같습니다.

1. 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

2. 디렉토리 관리자의 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 <

이 문서는 추가 정보가 제공될 경우 업데이트됩니다.

게시일: