Skip to content

Reset slave state

Réinitialiser l’état d’un consumer LDAP

Cette procédure est utile dans le cas d’un cluster provider-consumer LDAP où, pour X raison, le consumer est mal synchronisé avec le provider et où on souhaite réinitialiser complètement la synchronisation.

Remettre le consumer à zéro

  • Préparer un .ldif pour supprimer la synchro

    vim reset_syncrepl.ldif
    
    dn: olcDatabase={1}mdb,cn=config
    changetype: modify
    delete:olcSyncrepl
    olcSyncrepl: {0}rid=001 
      provider=ldap://ldap.example.com
      type=refreshAndPersist
      retry="5 5 300 +" 
      searchbase="dc=example,dc=com"
      attrs="*,+"
      bindmethod=simple
      binddn="uid=user,ou=my_ou,dc=example,dc=com"
      credentials=my_password
    
  • intégrer le .ldif

    ldapadd -vv -Y EXTERNAL -H ldapi:/// -f reset_syncrepl.ldif
    
  • arrêter le service

    systemctl stop slapd
    
  • déplacer la base

    mkdir save_ldap
    mv /var/lib/ldap/* save_ldap/
    

Relancer la synchro

  • préparer le .ldif de configuration de la synchro

    vim syncrepl.ldif
    
    dn: olcDatabase={1}mdb,cn=config
    changetype: modify
    add:olcSyncrepl
    olcSyncrepl: {0}rid=001 
      provider=ldap://ldap.example.com
      type=refreshAndPersist
      retry="5 5 300 +" 
      searchbase="dc=example,dc=com"
      attrs="*,+"
      bindmethod=simple
      binddn="uid=user,ou=my_ou,dc=example,dc=com"
      credentials=my_password
    
  • démarrer le service

    systemctl start slapd
    
  • intégrer le .ldif

    ldapadd -vv -Y EXTERNAL -H ldapi:/// -f syncrepl.ldif
    
  • une fois fait, arrêter le service à nouveau

    systemctl stop slapd
    
  • lancer le démon slapd à la main en forçant la remise à zéro du cookie de synchro

    slapd -c rid=001,csn=0 -F /etc/ldap/slapd.d
    

(Note: le rid correspond au numéro passé dans le .ldif. Le csn doit être 0.)

  • surveiller que la synchro se fait bien en lançant par exemple un tcpdump sur le provider

    tcpdump host <ip du consumer> and port 389
    
  • une fois la re-synchro finie, arrêter le processus slapd en cours et démarrer le service

    killall slapd
    pgrep slapd # ne doit rien renvoyer
    systemctl start slapd