Sun Java System Directory Server Enterprise Edition 6.2 관리 설명서

일반적인 복제 충돌 해결

다중 마스터 복제 시에는 일관성이 낮은 복제 모델이 사용되므로 여러 서버에서 동일한 항목을 동시에 수정할 수 있습니다. 따라서 두 서버 간에 업데이트를 전송하는 경우 충돌하는 변경 사항을 해결해야 합니다. 대부분의 해결은 자동으로 수행됩니다. 예를 들어 각 서버에서 변경과 연관된 타임스탬프는 우선 순위를 가진 최신 변경에 따라 해결됩니다. 일부 변경 충돌은 해결을 위해 수동으로 개입해야 하는 경우도 있습니다.

이 절은 다음 내용으로 구성되어 있습니다.

DSCC를 사용하여 복제 충돌 해결

복제 충돌을 해결하는 가장 쉬운 방법은 DSCC를 사용하는 것입니다. 자세한 내용은 DSCC 온라인 도움말을 참조하십시오.

명령줄을 사용하여 복제 충돌 해결

명령줄을 사용하여 복제 충돌을 해결할 수 있습니다. 복제 프로세스에서 자동으로 해결할 수 없는 변경 충돌이 있는 항목에는 작동 가능 속성인 nsds5ReplConflict가 충돌 표식으로 포함되어 있습니다.

충돌하는 항목을 찾으려면 이 속성을 포함하는 항목을 주기적으로 검색합니다. 예를 들어 다음 ldapsearch 명령을 사용하여 충돌하는 항목을 찾을 수 있습니다.


$ ldapsearch -h host2 -p 1389 -D cn=admin,cn=Administrators,cn=config \
 -w - -b "dc=example,dc=com" "(nsds5ReplConflict=*)"

nsds5ReplConflict 속성은 기본적으로 색인화됩니다.

이름 지정 충돌 해결

서버가 변경 사항을 서로에게 복제하기 전에 항목이 작성되면 동일한 DN을 가진 항목이 각각의 마스터에 존재할 수 있습니다. 복제 시 충돌 해결 기법은 두 번째로 작성된 항목의 이름을 자동으로 바꿉니다.

DN 이름이 충돌하는 항목은 작동 가능 속성인 nsuniqueid로 지정된 고유 식별자가 해당 DN에 추가된 새 이름으로 바뀝니다.

예를 들어 uid=bjensen,ou=People,dc=example,dc=com 항목을 두 마스터에서 동시에 만들면 복제 후에 다음 두 항목이 두 서버에 모두 포함됩니다.

두 번째 항목에 유용한 DN을 지정해야 합니다. 충돌하는 항목을 삭제하고 충돌하지 않는 이름을 사용하여 항목을 다시 추가할 수도 있지만항목의 이름을 바꾸면 해당 내용이 변경되지 않습니다. 이름 변경 절차는 이름 지정 속성이 한 개 값을 갖는지 또는 여러 값을 갖는지에 따라 달라집니다. 다음 절차를 참조하십시오.

Procedure여러 값을 갖는 이름 지정 속성이 있는 충돌 항목의 이름을 바꾸는 방법

DSCC를 사용하여 이 작업을 수행할 수 있습니다. 자세한 내용은 디렉토리 서비스 제어 센터 인터페이스 및 DSCC 온라인 도움말을 참조하십시오.

  1. 이전 RDN 값을 유지하면서 항목의 이름을 바꿉니다. 예를 들면 다음과 같습니다.


    $ ldapmodify -h host2 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
    Enter bind password:
    dn: nsuniqueid=66446001-1dd211b2-66225011-2ee211db+uid=bjensen,dc=example,dc=com
    changetype: modrdn
    newrdn: uid=bj66446001
    deleteoldrdn: 0
    ^D

    삭제할 수 없는 작동 가능 속성인 nsuniqueid도 포함되어 있으므로 이 단계에서는 이전 RDN 값을 삭제할 수 없습니다.

  2. 이름 지정 속성의 이전 RDN 값과 충돌 표식 속성을 제거합니다. 예를 들면 다음과 같습니다.


    $ ldapmodify -h host2 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
    Enter bind password:
    dn: uid=bj66446001,dc=example,dc=com
    changetype: modify
    delete: uid
    uid: bjensen
    -
    delete: nsds5ReplConflict
    ^D

Procedure단일 값을 갖는 이름 지정 속성이 있는 충돌 항목의 이름을 바꾸는 방법

중복 항목의 이름 지정 속성이 한 개의 값을 가지면(예: dc) 항목의 이름을 단순히 동일한 속성의 다른 값으로 바꿀 수 없으므로 임시 이름을 지정해야 합니다.

DSCC를 사용하여 이 작업을 수행할 수 있습니다. 자세한 내용은 디렉토리 서비스 제어 센터 인터페이스 및 DSCC 온라인 도움말을 참조하십시오.

  1. 다른 이름 지정 속성을 사용하여 항목의 이름을 바꾸고 이전 RDN을 유지합니다. 예를 들면 다음과 같습니다.


    $ ldapmodify -h host2 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
    Enter bind password:
    dn: nsuniqueid=66446001-1dd211b2-66225011-2ee211db+dc=HR,dc=example,dc=com
    changetype: modrdn
    newrdn: o=TempHREntry
    deleteoldrdn: 0
    ^D

    삭제할 수 없는 작동 가능 속성인 nsuniqueid도 포함되어 있으므로 이 단계에서는 이전 RDN 값을 삭제할 수 없습니다.

  2. 원하는 이름 지정 속성을 고유한 값으로 변경하고 충돌 표식 속성을 제거합니다. 예를 들면 다음과 같습니다.


    $ ldapmodify -h host2 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
    Enter bind password:
    dn: o=TempHREntry,dc=example,dc=com
    changetype: modify
    replace: dc
    dc: NewHR
    delete: nsds5ReplConflict
    ^D
  3. 항목의 이름을 다시 해당 이름 지정 속성으로 바꿉니다. 예를 들면 다음과 같습니다.


    $ ldapmodify -h host2 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
    Enter bind password:
    dn: dc=NewHR,dc=example,dc=com
    changetype: modrdn
    newrdn: dc=HR
    deleteoldrdn: 1
    ^D

    deleteoldrdn 속성 값을 1로 설정하여 임시 속성 값 쌍인 o=TempName을 삭제합니다. 이 속성을 유지하려면 deleteoldrdn 속성 값을 0으로 설정합니다.

고아 항목 충돌 해결

삭제 작업을 복제할 때 사용자 서버에서 삭제할 항목에 자식 항목이 있음을 발견하면 충돌 해결 절차는 연결 항목을 만들어 디렉토리에 고아 항목이 발생하지 않도록 방지합니다.

이와 마찬가지로 추가 작업을 복제할 때 사용자 서버에서 부모 항목을 찾을 수 없으면 충돌 해결 절차는 새 항목이 고아 항목이 되지 않도록 부모가 될 연결 항목을 만듭니다.

연결 항목은 glueextensibleObject 객체 클래스를 포함하는 임시 항목으로, 다음과 같은 여러 가지 방법으로 만들 수 있습니다.

잠재적 상호 운용성 문제 해결

메일 서버처럼 속성 고유성에 의존하는 응용 프로그램과의 상호 운용성을 위해 nsds5ReplConflict 속성이 포함된 항목에 대한 액세스를 제한해야 할 수도 있습니다. 이러한 항목에 대한 액세스를 제한하지 않으면 한 개의 속성만 필요한 응용 프로그램이 nsds5ReplConflict가 포함된 충돌 해결 항목과 원래 항목을 모두 받게 되므로 작업이 실패합니다.

액세스를 제한하려면 아래 명령을 실행하여 익명 읽기 액세스를 부여하는 기본 ACI를 수정해야 합니다.


$ ldapmodify -h host2 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
Enter bind password:
dn: dc=example,dc=com
changetype: modify
delete: aci
aci: (target ="ldap:///dc=example,dc=com")
 (targetattr !="userPassword"
 (version 3.0;acl "Anonymous read-search  access";
 allow (read, search, compare)(userdn = "ldap:///anyone");)
-
add: aci
aci: (target="ldap:///dc=example,dc=com")
 (targetattr!="userPassword")
 (targetfilter="(!(nsds5ReplConflict=*))")(version 3.0;acl
 "Anonymous read-search access";allow (read, search, compare)
 (userdn="ldap:///anyone");)
^D

새 ACI는 nsds5ReplConflict 속성을 포함한 항목이 검색 결과로 반환되지 않도록 필터링합니다.