Configuración de OpenLDAP con varios servidores

Si las necesidades de nuestra red y/o de nuestro directorio hacen aconsejable mantener más de un servidor LDAP (por ejemplo, para poder equilibrar la carga de las consultas, y por aspectos de tolerancia a fallos) podemos configurar varios servidores LDAP que mantengan imágenes sincronizadas de la información del directorio.

Para mantener el directorio replicado en diferentes servidores, OpenLDAP propone un esquema de maestro único y múltiples esclavos. Este esquema funciona de la siguiente forma: cada vez que se produce un cambio en el directorio del servidor maestro, el servicio slapd escribe dicho cambio, en formato LDIF, en un fichero local de registro (es decir, log file o cuaderno de bitácora). El servidor maestro inicia otro servicio denominado slurpd que, cada cierto tiempo se activa, lee dichos cambios e invoca las operaciones de modificación correspondientes en todos los esclavos. En cambio, si un esclavo recibe una operación de modificación directa por parte de un cliente, ésta debe redirigirse automáticamente al servidor maestro.

Evidentemente, este esquema sólo funciona si todos los servidores (maestro y esclavos) parten de un estado del directorio común. Por ese motivo, es necesario copiar manualmente la base de datos del directorio (es decir, el contenido del directorio /var/lib/openldap del servidor maestro) a cada esclavo, estando los servicios slapd parados en todos ellos, por supuesto.

La configuración del servidor maestro y de cada esclavo sería la siguiente:

  1. Servidor maestro. En el archivo de configuración /etc/openldap/slapd.conf hay que añadir las siguientes líneas por cada servidor esclavo:

    replica  host=esclavo.admon.com:389
             binddn="cn=Replicator,dc=admon,dc=com"
             bindmethod=simple 
             credentials=CONTRASEÑA_PLANA
    

    Y además hay que decirle a slapd en qué fichero de registro tiene que escribir los cambios:

    replogfile   /var/lib/openldap/master-slapd.replog
    
  2. Servidor esclavo. Por una parte, en el servidor esclavo hay que configurar el archivo /etc/openldap/slapd.conf de la misma forma que en el maestro (ver “Segundo paso: configuración del servidor”), exceptuando las líneas expuestas en el apartado anterior, que sólo corresponden al maestro.

    Por otra parte, hay que incluir en dicho fichero las siguientes opciones:

        
    rootdn     "cn=Replicator,dc=admon,dc=com"
    updatedn   "cn=Replicator,dc=admon,dc=com"
    updateref  ldap://maestro.admon.com
    

    La opción updatedn indica la cuenta con la que el servicio slurpd del servidor maestro va a realizar las modificaciones en la réplica del esclavo. Como puede comprobarse, hemos establecido que esta cuenta sea también el "rootdn" del servidor esclavo. Esa es la forma más sencilla de asegurar que este usuario tendrá permisos para modificar el directorio en este servidor (si no fuera así, deberíamos asegurarnos que esta cuenta tuviera concedido permiso de escritura en el directorio del servidor esclavo, en directiva "access" correspondiente). Por su parte, updateref indica al servidor esclavo que cualquier petición directa de modificación que venga de un cliente debe ser redireccionada al servidor maestro del directorio.