OpenLDAP – changer le moteur de backend pour MDB

A de nombreuses reprises chez nos clients utilisant un annuaire OpenLDAP, nous avons pu remarquer que la plupart du temps, le backend configuré pour l’annuaire était HDB voir BDB. Le moteur de stockage recommandé depuis la sortie de la dernière version d’OpenLDAP (version 2.4) est MDB ou LMDB.

Petit point définition avant de commencer :

  • Backend : Le backend est en fait le « moteur » permettant le stockage ou la récupération de données en réponse à une requête LDAP dans un annuaire.
  • BDB : Berkeley DataBase – se présente sous la forme d’une bibliothèque écrite en C et offrant une interface publique (API). La base n’est composée que d’enregistrements dont le format est librement déterminé par le programme appelant. Il n’y a pas de notion de table, et la base n’est pas interrogeable via un langage de manipulation de données comme SQL. Chaque enregistrement est composé d’une paire clé / valeur, la clé n’étant pas unique.
  • HDB : Hierarchical DataBase – même chose que BDB, mais les données sont organisées de manière hiérarchique. Permet par exemple de supporter le renommage d’un sous arbre de l’annuaire.
  • MDB (ou LMDB) : – utilise la bibliothèque LMDB (Lightning Memory-Mapped DB) d’OpenLDAP pour stocker des données. Il repose entièrement sur le système d’exploitation sous-jacent pour la gestion de mémoire et ne fait pas de mise en cache de ses données.

Comparatif des performances

Au cours de la conférence internationale « LdapCon 2013 », ces deux solutions ont été évaluées par rapport à bon nombre d’annuaires LDAPv3 du marché, propriétaires ou non.

Pour un chargement initial de 10 millions d’enregistrement sur un Ubuntu 12.10 avec 32Gb de RAM, les résultats de l’évaluation furent les suivants :

On peut aisément se rendre compte du gain fournit par le backend MDB.

D’autres comparatifs peuvent être observés à l’adresse suivante : https://mishikal.wordpress.com/2013/05/16/openldap-a-comparison-of-back-mdb-and-back-hdb-performance/

Mise en place du backend MDB

Procédure de migration :

Les backends n’étant pas compatibles physiquement, il n’est pas possible de modifier uniquement la configuration de la Database. Le changement de type de backend comporte également une migration de données, qui doit s’effectuer de manière “logique” :

  • Arrêt du service slapd
  • Export des données en LDIF (via slapcat)
  • Sauvegarde de l’ancien répertoire (pour le retour arrière)
  • Changement de la configuration de la database
  • Chargement des données (via slapadd)
  • Redémarrage du service slapdet contrôle

Modification du backend :

Pour modifier le moteur de données de l’annuaire OpenLDAP, procédez de la façon suivante :

  • Arrêtez le service LDAP (service slapd stop)
  • Placez-vous dans le répertoire suivant :
    • /etc/openldap/slapd.d/cn=config
  • Conservez une copie de fichier de configuration des données (en cas de rollback). Par exemple, copiez le fichier olcDatabase={2}hdb.ldif et renommez le en olcDatabase={2}hdb.ldif.old.
  • Renommez le fichier olcDatabase={2}hdb.ldif en olcDatabase={2}mdb.ldif puis éditez ce fichier.
  • Modifiez la valeur des attributs suivants en remplaçant chaque occurrence de « hdb » par « mdb », vous devrez ainsi quelque chose de la sorte (seuls les attributs à modifier sont présentés) :
 dn: olcDatabase={2}mdb

objectClass: olcMdbConfig

olcDatabase: {2}mdb
  • A la fin du fichier, ajoutez le paramètre suivant :

olcDbMaxSize: 1073741824

Note : La variable olcDbMaxSize indique la taille maximum de données chargées en mémoire, elle doit être égale (ou supérieure) à la taille des données de l’annuaire, car le moteur MDB travaille en mémoire.

  • Sauvegardez puis fermez le fichier.
  • Vous devrez très probablement réimporter vos données avec la commande slapadd
  • Redémarrez le service OpenLDAP (service slpad start)