OpenLDAP의 레플리케이션은 syncrepl 형식으로 실시한다. 2.3까지는 slurpd에서의 레플리케이션이 있었지만, 여러 가지 문제가 있어 2.4부터 폐지되었다. 마스터측을 프로바이더, 슬레이브측을 컨슈머라 부른다. syncrepl에는 2개의 동기 방식이 있다.
- refreshOnly
프로바이더로의 정기적인 접속 및 LDAP Sync 조작 실행
- refreshAndPersist
컨슈머가 정지할 때까지 LDAP Sync 조작이 계속됨
또한 프로바이더/컨슈머(Master/Slave) 형식뿐만 아니라 미러모드로 Active/Active 구성도 가능하다. 미러모드는 정확히는 멀티마스터가 아니다. 동시에 갱신을 하면 데이터의 부정합이 나오므로 갱신은 한쪽에 고정하는 것이 좋다.
프로바이더/컨슈머(Master/Slave) 구성
프로바이더측의 설정
- slapd.conf에 추가 설정하는 부분은 다음과 같다.
# 모듈 읽기
modulepath /usr/lib64/openldap
moduleload syncprov.la
# syncrepl에서 이용하는 운영 속성에 인덱스를 붙입니다.
index entryCSN,entryUUID eq
## 리플리케이션 설정
# syncprov 오버레이 사용 지정
overlay syncprov
# contextCSN 체크 포인트
# 전 체크 포인트부터 <ops> 회의 조작이 실행되고 있는지,
# <minutes> 시간이 경과하면 새로운 체크포인트가 실행되고
syncprov-checkpoint 10 10
# 세션 로그에 저장할 수 있는 조작 수를 지정
syncprov-sessionlog 100
컨슈머 설정
slapd.conf 에 설정 추가
# syncrepl에서 이용하는 운용 속성에 인덱스 설정
index entryCSN,entryUUID eq
##리플리케이션 설정
# 식별 번호를 지정
syncrepl rid=100
provider=ldaps://ldap-0.naver.com:636
type=refreshAndPersist
retry="5 10 300 +"
searchbase="dc=naver,dc=com"
bindmethod=simple
binddn="cn=Manager,dc=naver,dc=com"
credentials=naver
Naver(예)는 LDAP 서버는 공적으로 발행된 와일드카드 서버 증명서를 사용하고 있으므로 필요 없지만, 자기인증국에서 서명한 증명서를 사용하는 경우는
tls_reqcert=never
를 지정하여 체크를 회피할 필요가 있다. 접속처의 프로바이더 명도 *.naver.com 도메인이어야 한다.
미러 모드
Naver(예)의 LDAP 서버는 이곳에서 운용한다. slapd.conf 파일은 각각 기본적으로 동일하지만 아래의 점에 차이가 있다.
- serverID 지정(노드별로 별도로)
- syncrepl 에서 rid는 각각 따로 지정한다.
- ldap-0
## 리플리케이션 설정
모듈 읽기
modulepath /usr/lib64/openldap
moduleload syncprov.la
syncrepl 에서 이용하는 운용 속성에 인덱스 설정
index entryCSN,entryUUID eq
# syncprov 오버레이 사용 지정
overlay syncprov
# 각각의 노드에서 유니크한 서버 ID를 부여할 것
serverID 1
# 식별 번호를 지정하다
syncrepl rid=100
provider=ldaps://ldap-1.naver.com:636
type=refreshAndPersist
retry="5 10 300 +"
searchbase="dc=naver,dc=com"
bindmethod=simple
binddn="cn=reader,dc=naver,dc=com"
credentials=reader
# 미러 모드 활성화
mirrormode on
- ldap-1
## 리플리케이션 설정
# 모듈 가져오기
modulepath /usr/lib64/openldap
moduleload syncprov.la
syncrepl에서 이용하는 운용 속성에 인덱스 설정
index entryCSN,entryUUID eq
# syncprov 오버레이 사용 지정
overlay syncprov
# 각각의 노드에서 유니크한 서버 ID를 부여할 것
serverID 2
# 식별 번호를 지정하다
syncrepl rid=100
provider=ldaps://ldap-0.naver.com:636
type=refreshAndPersist
retry="5 10 300 +"
searchbase="dc=naver,dc=com"
bindmethod=simple
binddn="cn=reader,dc=naver,dc=com"
credentials=reader
# 미러 모드 활성화
mirrormode on
access to attrs=userPassword
by self write
by dn="cn=Manager,dc=naver,dc=com" write
by anonymous auth
by * none
#--- 기타 속성에 대한 접근 제한
# Manager는 모두 허용
# 기타 접속시 read만 가능
access to *
by self write
by dn="cn=Manager,dc=naver,dc=com" write
by * read
- 데이터베이스 설정
## config
database config
rootdn "cn=admin,cn=config"
rootpw {SSHA}bH2ttihNwRlyAYNb0nBeBD6sYp8vZ0s+
## monitor
database monitor
access to *
by dn.exact="cn=Manager,dc=naver,dc=com" read
by * none
## base
database bdb
suffix "dc=naver,dc=com"
checkpoint 1024 15
rootdn "cn=Manager,dc=cocone,dc=jp"
# Cleartext passwords, especially for the rootdn, should
# be avoided. See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
# rootpw secret
rootpw {SSHA}bH2ttihNwRlyAYNb0nBeBD6sYp8vZ0s+
4. 관리자 비밀 번호의 생성
# slappasswd -s 임의의 패스워드
{SSHA}k1smRjpl5Na2lNS659dYaYHmJfbZLkWA