systemadmin.es > Aplicaciones > Replicación OpenLDAP refreshAndPersist

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:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>