OpenLDAP 2.4.39 마스터 및 읽기 복제본이 있습니다 cn=config
."OLC"구성(이전 방법과 반대 slapd.conf
)
ldapmodify
복제는 데이터(사용자 계정 등)에 대해서는 작동하지만 구성에는 작동하지 않습니다. 예를 들어 마스터에서 구성을 변경하면 dn: cn=config
변경 사항이 복제본에 표시되고 contextCSN: ...
타임스탬프가 업데이트되지만 /etc/openldap/slapd.d/cn=config.ldif
변경된 데이터가 허용되지 않습니다. 예를 들어 속성을 변경하여 olcGentleHUP: ...
테스트합니다 .
마스터에서는 레코드가 타임스탬프와 함께 업데이트되고 olcGentleHUP: ...
, 복제본에서는 타임스탬프만 마스터와 정확히 동일한 값으로 업데이트됩니다./etc/openldap/slapd.d/cn=config.ldif
contextCSN: ...
contextCSN: ...
무슨 일인지 아세요? 어떻게 디버깅할 수 있나요?
업데이트됨(2015년 2월 7일)
우리는 노예 환경 searchbase="cn=schema,cn=config"
에 있다는 것이 밝혀졌습니다 . 이제 전체 구성이 동기화되도록 olcSyncrepl
변경하세요 .searchbase="cn=config"
답변1
olcDatabase={0}config,cn=config
의 데이터 외에 OLC에 대한 복제를 설정했습니까 oldDatabase={1}hdb,cn=config
? 기본적으로 cn=config
복사에는 특별한 부트스트랩이 필요합니다.설명서에 설명되어 있어요.
내 작업 구성(미러 모드)은 다음과 같습니다.
dn: olcDatabase={0}config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage by * break
olcRootDN: cn=config
olcRootPW:: hogehogehogehoge==
olcSyncrepl: {0}rid=001 provider=ldap://server1/ starttls=critical tls_reqcert=demand bindmethod=simple binddn="cn=config" credentials=secret searchbase="cn=config" type=refreshAndPersist retry="5 5 300 5" timeout=1
olcSyncrepl: {1}rid=002 provider=ldap://server2/ starttls=critical tls_reqcert=demand bindmethod=simple binddn="cn=config" credentials=secret searchbase="cn=config" type=refreshAndPersist retry="5 5 300 5" timeout=1
olcMirrorMode: TRUE
dn: olcOverlay={0}syncprov,olcDatabase={0}config,cn=config
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: {0}syncprov
dn: olcDatabase={1}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=your,dc=domain
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymous auth by .... read by .... write by dn="cn=config" read
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by .... write by * read
olcLastMod: TRUE
olcRootDN: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
olcSyncrepl: {0}rid=011 provider=ldap://server1/ starttls=critical tls_reqcert=demand bindmethod=simple binddn="cn=config" credentials=secret searchbase="dc=your,dc=domain" type=refreshAndPersist retry="60 +" timeout=1
olcSyncrepl: {1}rid=012 provider=ldap://server2/ starttls=critical tls_reqcert=demand bindmethod=simple binddn="cn=config" credentials=secret searchbase="dc=your,dc=domain" type=refreshAndPersist retry="60 +" timeout=1
olcMirrorMode: TRUE
olcDb....: ... (other hdb configuration)
dn: olcOverlay={0}syncprov,olcDatabase={1}hdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: {0}syncprov
요점은 피어 서버에 바인딩할 복제기( )의 자격 증명을 사용 olcRootDN
하고 olcRootPW
설정하는 것 입니다. 또한 동료로부터 모든 것을 얻을 수 있도록 적절하게 설정해야 합니다 . 자신의 로컬 데이터베이스를 업데이트하는 방법을 이미 알고 있으므로 쓰기 권한을 부여할 필요가 없습니다.cn=config
syncprov
olcAccess