Supervision de la réplication d’un annuaire Openldap

Dans cet article, nous allons superviser la synchronisation des annuaires openldap mis en place dans l’article
Mise en place d’un réplicat openldap en mode miroir.

Pour rappel, nous avons deux annuaires ldap-1.be-root.com et ldap-2.be-root.com répliqués à l’aide de syncrepl en mode miroir.

Nous allons mettre en place un processus de supervision sous nagios afin de vérifier qu’aucune désynchronisation entre les annuaires n’est présente.

Tout d’abord nous allons récuperer les sources du plugin check_ldap_syncrepl_status.

wget http://tools.ltb-project.org/attachments/download/152/ltb-project-nagios-plugins-0.3.tar.gz
tar zxf ltb-project-nagios-plugins-0.3.tar.gz
cp ltb-project-nagios-plugins-0.3/check_ldap_syncrepl_status.pl /usr/local/nagios/libexec/
chmod +x /usr/local/nagios/libexec/check_ldap_syncrepl_status.pl

Ce script nécessite les modules perl suivant Getopt::Long, File::Basename, POSIX, Net::LDAP, Date::Manip.
Libre à vous de les installer de la manière qui vous convient (cpan, rpmforge, …).

Vérifier que le script s’exécute correctement à l’aide de la commande :

/usr/local/nagios/libexec/check_ldap_syncrepl_status.pl -h

Nous allons maintenant configurer nagios.

Dans le fichier /etc/nagios/objects/commands.cfg, rajoutons :

define command {
command_name check_ldap_syncrepl_status
command_line $USER1$/check_ldap_syncrepl_status.pl -H $HOSTADDRESS$ -U $ARG1$ -I $ARG2$ -w $ARG3$ -c $ARG4$
}

Dans le fichier /etc/nagios/objects/hosts.cfg :

    define host{
     use linux-server
     host_name ldap-1
     alias Ldap-1
     address xxx.xxx.xxx.xxx
     parents sw-serv-4
    }
    define host{
     use linux-server
     host_name ldap-2
     alias Ldap-2
     address yyy.yyy.yyy.yyy
     parents sw-serv-3
    }

Et pour finir, dans le fichier /etc/nagios/objects/services.cfg :

define service {
        host_name ldap-2
        use generic-service
        service_description Replication SyncRepl
        check_command check_ldap_syncrepl_status!xxx.xxx.xxx.xxx!002!30!60
}

En remplaçant bien évidement les xxx.xxx.xxx.xxx par l’adresse ip de ldap-1.

Le paramètre 002 sur la ligne check_command correspond au Server ID du réplicat définit dans le fichier slapd.conf de ldap-2 :

serverID        2

Il faut cependant indiquer en paramètre 002 et non pas simplement 2.

Le paramètre 30 permet de stipuler qu’en cas de désynchronisation de plus de 30s, alors l’état est à warning.

Le paramètre 60 permet de stipuler qu’en cas de désynchronisation de plus de 60s, alors l’état est à critical.

Il reste ensuite à redémarrer nagios pour prendre en compte les modifications apportées.

Mise en place d’un réplicat openldap en mode mirroir

Dans cet article, nous considérons que vous possédez déjà un annuaire OpenLdap fonctionnel et que vous désirez mettre en place un réplicat sur une autre machine en mode mirroir.

Par convention nous définirons le serveur existant en le nommant ldap-1.be-root.com et le réplicat à mettre en place sous le nom ldap-2.be-root.com.

Nous ne détaillerons pas l’installation d’openldap sur ldap-2.be-root.com. Cependant, il faut s’assurer que la version installée supporte syncrepl et que ce dernier a été activé lors de la compilation (–enable-syncprov=mod –enable-modules).

Sur ldap-2, nous allons utiliser le même fichier slapd.conf, les mêmes schémas que sur ldap-1.
Il convient donc de s’assurer que la configuration est strictement la même. Il faut également que ldap-1 et ldap-2 peuvent communiquer dans les deux sens (soit sur le port 389/tcp ou 636/tcp en cas d’utilisation de ssl).

Sur ldap-1, nous allons faire un dump de l’annuaire grâce à la commande slapcat et récupérer ce dump sur ldap-2.

Editons le fichier slapd.conf sur ldap-2 et ajoutons les lignes suivantes au début du fichier :

moduleload      syncprov.la
# ID du noeud
serverID        2

Il nous faut également ajouter des indexes :

index   entryCSN,entryUUID                                       eq

En fin de fichier, ajoutons les lignes :

overlay syncprov
syncprov-checkpoint     100     10
syncprov-sessionlog     100

syncrepl        rid=001
                provider=ldaps://ldap-1.be-root.com:636
                type=refreshAndPersist
                retry="60 10 300 +"
                searchbase="dc=be-root,dc=com"
                scope=sub
                schemachecking=on
                bindmethod=simple
                binddn="cn=syncrepl,dc=be-root,dc=com"
                credentials="motdepasse"
                tls_reqcert=never

mirrormode      on

La ligne retry= »60 10 300 + » permet, en cas d’impossibilité de se connecter sur ldap-1, de retenter une connexion au bout de 60s. Ceci 10 fois de suite. Si la connexion est toujours impossible au bout de ces 10 fois, alors l’intervalle passe à 300s et ceci tant que la connexion n’est pas rétablie (grâce au signe +).
Si nous ne voulons pas utiliser ssl pour la communication entre les annuaires, il suffit de remplacer la ligne provider=ldaps://ldap-1.be-root.com:636 par provider=ldap://ldap-1.be-root.com et de supprimer la ligne tls_reqcert=never.
L’utilisateur cn=syncrepl,dc=be-root,dc=com a été explicitement crée pour la réplication. Il est bien entendu possible de le remplacer par n’importe quel compte ayant des droits de lecture/écriture sur l’ensemble des attributs.

Intégrons le dump récupéré précédemment de ldap-1 grace à la commande slapadd.

Dans le fichier /etc/openldap/slapd.conf sur ldap-1 faisons ces modifications en début de fichier :

moduleload      syncprov.la
# ID du noeud
serverID        1

Il nous faut également ajouter des indexes :

index   entryCSN,entryUUID                                       eq

En fin de fichier, ajoutons les lignes :

overlay syncprov
syncprov-checkpoint     100     10
syncprov-sessionlog     100

syncrepl        rid=001
                provider=ldaps://ldap-2.be-root.com:636
                type=refreshAndPersist
                retry="60 10 300 +"
                searchbase="dc=be-root,dc=com"
                scope=sub
                schemachecking=on
                bindmethod=simple
                binddn="cn=syncrepl,dc=be-root,dc=com"
                credentials="motdepasse"
                tls_reqcert=never

mirrormode      on

Ré-indexons l’annuaire à l’aide de la commande slapindex Redémarrons openldap sur ldap-1 et ldap-2. Nous pouvons voir dans les logs que le processus synchronisation se lance grace à la connexions de l’utilisateur syncrepl.
Il est également possible de tester le bon fonctionnement de l’ensemble en changeant un attribut d’une entrée sur ldap-2 et en vérifiant que la modification a été bien répliquée sur ldap-1 (et vice-versa).