O cn = config do OpenLDAP não está sendo totalmente replicado

1

Eu tenho o OpenLDAP 2.4.39 master e uma réplica somente leitura, usando a configuração cn=config aka "OLC" (como oposto ao antigo método slapd.conf ).

A replicação funciona para dados (contas de usuário, etc), mas não para a configuração - quando eu altero a configuração no mestre usando ldapmodify , por exemplo, Em dn: cn=config , a réplica percebe a alteração e atualiza contextCSN: ... timestamp em /etc/openldap/slapd.d/cn=config.ldif , mas não aceita os dados alterados. Testado, por exemplo, com a alteração da propriedade olcGentleHUP: ... .

No mestre, o registro olcGentleHUP: ... in /etc/openldap/slapd.d/cn=config.ldif é atualizado junto com o timestamp contextCSN: ... , na réplica somente o timestamp contextCSN: ... é atualizado com o mesmo valor do mestre.

Alguma ideia do que está acontecendo aqui? Como posso depurar isso?

Atualização (2/07/2015)

Acontece que tivemos searchbase="cn=schema,cn=config" na configuração olcSyncrepl no escravo. Mudou isso para searchbase="cn=config" e agora toda a configuração está sincronizada.

    
por MLu 26.06.2015 / 12:35

1 resposta

3

Você configurou a replicação para o OLC em olcDatabase={0}config,cn=config além dos dados em oldDatabase={1}hdb,cn=config ? Basicamente, a cn=config replicating precisaria de um procedimento de bootstrap especial explicado no manual a>.

Minha configuração de trabalho (no modo espelho) se parece com isso:

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

O ponto é usar olcRootDN e olcRootPW para configurar a credencial cn=config para os replicadores ( syncprov ) vincularem no servidor ponto a ponto. Você também precisa configurar o olcAccess apropriado para que eles possam buscar tudo no peer. Não é necessário conceder permissão de gravação para eles, porque eles já sabem como atualizar seu próprio banco de dados local.

    
por 27.06.2015 / 07:55