•
Replicación OpenLDAP refreshAndPersist
En caso que necesitemos tener un slave de OpenLDAP de sólo lectura podemos usar el modulo syncprov incluido en OpenLDAP:
# rpm -ql openldap-servers-2.4.39-8.el6.x86_64 | grep syncprov.la$ /usr/lib64/openldap/syncprov.la
Primero deberemos cargarlo en los dos nodos:
cat <<EOF | ldapmodify -Y EXTERNAL -H ldapi:/// dn: cn=module,cn=config changetype: add objectClass: olcModuleList cn: module olcModulePath: /usr/lib64/openldap olcModuleLoad: syncprov.la EOF
A continuación, en el master le indicamos que será un proveedor:
cat <<EOF | ldapmodify -Y EXTERNAL -H ldapi:/// dn: olcOverlay=syncprov, olcDatabase={2}bdb,cn=config changetype: add objectclass: olcSyncProvConfig olcOverlay: syncprov olcSpCheckpoint: 100 10 EOF
En el slave (consumidor), indicamos de dónde debe consumir los datos y con que credenciales:
cat <<EOF | ldapmodify -Y EXTERNAL -H ldapi:/// dn: olcDatabase={2}bdb,cn=config changetype: modify add:olcSyncrepl olcSyncrepl: {0}rid=000 provider=ldap://openldap1 type=refreshAndPersist retry="5 5 300 +" searchbase="dc=lolcathost,dc=com" attrs="*,+" bindmethod=simple binddn="cn=admin,dc=lolcathost,dc=com" credentials=secreto EOF
Podemos comprobar el funcionamiento añadiendo un registro en el master:
# cat <<EOF | ldapmodify -x -D "cn=admin,dc=lolcathost,dc=com" -w secreto dn: cn=testmirror,dc=lolcathost,dc=com changetype: add objectclass: organizationalRole cn: lolcathost EOF adding new entry "cn=testmirror,dc=lolcathost,dc=com"
Y veremos que también lo vemos en el slave:
# ldapsearch -x -b 'dc=lolcathost,dc=com' '(objectclass=*)' # extended LDIF # # LDAPv3 # base <dc=lolcathost,dc=com> with scope subtree # filter: (objectclass=*) # requesting: ALL # # lolcathost.com dn: dc=lolcathost,dc=com objectClass: dcObject objectClass: organization o: LOLcathost dc: lolcathost # admin, lolcathost.com dn: cn=admin,dc=lolcathost,dc=com objectClass: organizationalRole cn: lolcathost cn: admin # testmirror, lolcathost.com dn: cn=testmirror,dc=lolcathost,dc=com objectClass: organizationalRole cn: lolcathost cn: testmirror # search result search: 2 result: 0 Success # numResponses: 4 # numEntries: 3
Si intentamos modificar en el slave tendremos un error:
# cat <<EOF | ldapmodify -x -D "cn=admin,dc=lolcathost,dc=com" -w secreto dn: cn=testmirror,dc=lolcathost,dc=com changetype: add objectclass: organizationalRole cn: lolcathost EOF adding new entry "cn=testmirror,dc=lolcathost,dc=com" ldap_add: Server is unwilling to perform (53) additional info: shadow context; no update referral
En caso que deseemos indicar al cliente dónde debe hacer el update podemos usar la opción UpdateRef con el máster a usar:
cat <<EOF | ldapmodify -Y EXTERNAL -H ldapi:/// dn: olcDatabase={2}bdb,cn=config changetype: modify add: olcUpdateRef olcUpdateRef: ldap://openldap1 EOF
Si repetimos el update en el slave veremos que nos indicará cual es el master:
# cat <<EOF | ldapmodify -x -D "cn=admin,dc=lolcathost,dc=com" -w secreto dn: cn=testmirror2,dc=lolcathost,dc=com changetype: add objectclass: organizationalRole cn: lolcathost EOF adding new entry "cn=testmirror2,dc=lolcathost,dc=com" ldap_add: Referral (10) referrals: ldap://openldap1/cn=testmirror2,dc=lolcathost,dc=com
Deja un comentario: