Passer d’un stockage TDB à un stockage LMDB

A partir de la version Samba 4.9 le contrôleur de domaine peut être configuré pour stocker ses données dans un format LMDB au lieu de format TDB. En effet le format TDB est une implémentation de librairie key/value en mode 32bit. Cela limite la taille de la base de données à 4Go. Pour contourner cette limitation, le projet Samba a développé un nouveau backend de stockage basé sur la librairie LMDB qui est compatible 32bit et 64bit, ce qui permet de repousser cette limite. La librairie LMDB a été développée au sein du projet OpenLDAP.

S’il est prévu de stocker des objets volumineux (photo, etc.) ou bien si l’Active Directory contiendra beaucoup d’utilisateurs (100k et plus), il est préférable de changer le mode de stockage en LMDB.

Il n’y a pas actuellement de manière de convertir directement une base TDB en LMDB. Pour convertir un contrôleur de domaine en LMDB, il est nécessaire de le démoter et de le rejoindre au domaine.

Basculer un contrôleur de domaine en mode LMDB

Note

Dans la documentation ci-dessous nous partons du principe que les différentes machines ont été installées en suivant les différentes préconisation données dans cette documentation, notamment celles sur la configuration DNS pour CentOS ou DNS pour Debian et krb5.conf pour CentOS ou krb5.conf pour Debian.

Note

Vérifier au préalable que le contrôleur de domaine ne détient aucun rôle FSMO, sinon déplacer les rôles FSMO vers un autre contrôleur de domaine au préalable à la mise à jour en LMDB.

Dans la documentation ci-dessous, nous appelons srvads-lmdb le serveur AD à basculer en LMDB.

  • Sur le contrôleur à basculer, sauvegarder la base et éteindre le Samba :

    yum install lmdb
    samba-tool fsmo show
    systemctl stop samba
    rsync -aPAX /var/lib/samba /root/samba_backup_20191107/
    rm -Rf /var/lib/samba/*
    mkdir /var/lib/samba/private
    
  • Sur le contrôleur de domaine FSMO PDC, lancer le démote du contrôleur de domaine à basculer :

    samba-tool domaine demote --remove-other-dead-server=srvads-lmdb
    
  • Vérifier que le demote a bien été propagé sur l’ensemble des autres contrôleurs de domaine. Pour cela on peut lancer la commande sur l’ensemble des contrôleurs avec votre outil favori d’automatisation :

    ldbsearch -H /var/lib/samba/private/sam.ldb 'cn=srvads-lmdb'
    
  • Une fois que la suppression a bien été propagée à l’ensemble des contrôleurs de domaine on peut effectuer la rejonction du contrôleur de domaine en mode LMDB. Lors de la jonction, on peut changer la taille de la base LMDB avec le paramètre --backend-store-size, ici configuré à 16Go (la valeur par défaut est 8Go) :

    samba-tool domain join mydomain.lan DC -U administrator --realm=MYDOMAIN.LAN -W MYDOMAIN --backend-store=mdb --backend-store-size=16Gb
    systemctl restart samba
    samba_dnsupdate --verbose
    systemctl samba_kcc