Mise en place de la réplication dans OpenLDAP
La plupart du temps, les annuaires LDAP sont paramétrés avec une réplication entre deux serveurs, afin d'apporter une meilleure disponibilité ou permettre une montée en charge horizontale, via la mise en place d'un répartiteur de charge en frontal.
Situation de base
Un serveur installé en tant que master : openldap1.arciam.fr. Il écoute sur le port 389. L'overlay syncprov a été chargé en tant que module , via la configuration :
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulepath: /usr/lib64/openldap
olcModuleload: syncprov.la
Base DN : o=arciam l'annuaire est peuplé avec des données.
Un serveur installé en tant que réplicant : openldap2.arciam.fr. Il écoute égalemnt sur le port 389. On a évidemment le même rootSuffix, et même DN de base. Seul le DN de base est créé dans l'annuaire.
Comptes utilisés :
Compte | Mot de passe | Utilisation |
---|---|---|
cn=manager,o=arciam | Arc1@m | Administrateur de la_database_ / rootSuffix o=arciam |
cn=admin,cn=config | Arciam_Config | Admin de la configuration |
Sur le serveur 1
Les actions à effectuer :
- ajouter un compte qui sera utilisé pour lire le contenu (tous les droits en lecture, pas de limite en nombre d'entrées ou de temps)
- activer l'overlay syncprov
- indexer les attributs entryCSN et entryUUID (utilisés pour la réplication)
- définir le Server RID
Note : toutes ces actions sont à effectuer une fois que l'instance d'annuaire est démarrée.
Ajouter un compte
On peut ajouter via un fichier LDIF (replicator.ldif
) :
dn: cn=replicator,o=arciam
userPassword: secret
cn: replicator
objectclass: top
objectclass: person
sn: Replicator Account
ldapadd -x -h localhost -p 389 -D "cn=Manager,o=arciam" -w Arc1@m -f replicator.ldif
Donner les droits et supprimer les limites
Ceci se fait au niveau de la configuration de la database , via un fichier LDIF lim.ldif
:
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcLimits
olcLimits: dn.exact="cn=replicator,o=arciam" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited
-
add: olcAccess
olcAccess: to attrs=userPassword by self write by dn.exact="cn=replicator,o=arciam" read by anonymous auth by * none
-
add: olcAccess
olcAccess: to * by dn.exact="cn=replicator,o=arciam" read by users read by * none
ldapmodify -x -h localhost -p 389 -D "cn=admin,cn=config" -w Arc1am_Config -f lim.ldif
Activation de l'overlay
Note : on suppose que l'overlay a été chargé lors de la création de l'instance.
On active l'overlay en modifiant la configuration de la database :
Fichier olcSyncProv.ldif
:
dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
Chargement via la commande
ldapadd -x -h localhost -p 389 -D "cn=admin,cn=config" -w Arc1am_Config -f olcSyncProv.ldif
Ajout d'index sur entryCSN et entryUUID
A faire via un fichier LDIF indexSync.ldif
:
dn:olcDatabase={2}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: entryCSN,entryUUID eq
ldapmodify -x -h localhost -p 389 -D "cn=admin,cn=config" -w Arc1am_Config -f indexSync.ldif
Définition du server ID
Dans une topologie de réplication, chaque serveur doit avoir un rid unique. Pour simplifier la configuration on peut préciser le rid et l'url liée, par exemple, via le fichier rids.ldif
:
dn: cn=config
changetype: modify
add: olcServerId
olcServerId: 1 ldap://openldap1.arciam.fr:389
-
add: olcServerId
olcServerId: 2 ldap://openldap2.arciam.fr:389
ldapmodify -x -h localhost -p 389 -D "cn=admin,cn=config" -w Arc1am_Config -f rids.ldif
Sur le serveur 2
Les actions à effectuer :
- définir les Server RID
- créer les index
- définir l'agrément de réplication.
Les étapes 1 et 2 sont identiques à celles effectuées sur le serveur 1.
Agrément de réplication
Sur chaque serveur, on doit préciser les agréments de réplication avec les autres serveurs.
La modification peut s'effectue en live, via un fichier LDIF, par exemple replAgreement.ldif
:
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=001 provider=ldap://openldap1.arciam.fr:389 binddn="cn=replicator,o=arciam" credentials=secret attrs="*,+" bindmethod=simple searchbase="o=arciam" type=refreshAndPersist retry="60 +"
ldapmodify -x -h localhost -p 389 -D "cn=admin,cn=config" -w Arc1am_Config -f replsAgreement.ldif
Note : une fois la commande effectuée, les données sont répliquées entre le serveur 1 et le serveur sur lequel on a lancé la commande.
Le temps de réplication dépend du volume de données et de la performance du réseau entre les serveurs.