Réplication multi-maitre
Installation
Ce tuto va partir expliquer l'installation sur deux serveurs pré-installé en Debian Squeeze, d'OpenLDAP configuré en réplication multi-maitre.
Installation du premier serveur
- Installer le paquet slapd :
apt-get install slapd ldap-utils
- L'installeur du paquet va pré-configurer pour héberger un arbre LDAP composé à partir du nom DNS de la machine. Nous utiliserons cet arbre sans le modifier mais vous pouvez à cette étape le reconstruire à votre goût.
- Nous allons commencer par hashé le futur mot de passe admin de notre arbre LDAP. Pour cela utiliser la commande slappasswd. Communément, le mot de passe est encode en base64 pour son stockage. Pour cela, utiliser la commande suivante :
echo -n "[mon mot de passe hashé]"|base64
- Nous allons maintenant mettre en place le mot de passe d'accès à la branche cn=config en éditant le fichier /etc/ldap/slapd.d/cn=config/olcDatabase={0}config.ldif et en ajoutant la ligne :
olcRootPW:: [hash du mot de passe encodé en base64]
Se sera la seule fois que nous éditerons les fichiers du dossier /etc/ldap/slapd.d. Par la suite, toutes nos modifications pourront utiliser les voies LDAP classiques ! Attention cependant si vous souhaitez utiliser l'outils *PhpLdapAdmin*, celui-ci peut avoir tendance à poser problème lorsque vous tenterez de jouer certain LDIF.
- Redémarrer slapd
- Nous allons partir du principe que la réplication LDAP utilisera un compte applicatif stocké dans l'OU sysaccounts à la racine de notre arbre o=example. Nous allons donc ajouter l'OU ainsi que l'objet LDAP du compte applicatif en exécutant le LDIF suivant :
dn: ou=sysaccounts,o=example objectClass: organizationalUnit ou: sysaccounts dn: uid=syncrepl,ou=sysaccounts,o=example objectClass: simpleSecurityObject objectClass: account uid: syncrepl userPassword:: [hash du mot de passe encodé en base64]
Le mot de passe du compte applicatif est hashé puis encodé en base64 comme précédemment pour le mot de passe admin.
- Nous allons ensuite faire que cet utilisateur ne soit pas impacté par une limite d'objet retourné ou de temps par requête en jouant le LDIF suivant :
dn: olcDatabase={1}mdb,cn=config changetype: modify add: olcSizeLimit olcSizeLimit: dn.base="uid=syncrepl,ou=sysaccounts,o=example" size=unlimited time=unlimited
- Nous allons ensuite ajouter l'overlay syncprov activant les fonctionnalités de réplication d'OpenLDAP. Pour cela nous allons jouer le LDIF suivant :
dn: cn=module{0},cn=config changetype: modify add: olcModuleLoad olcModuleLoad: syncprov dn: olcOverlay=syncprov,olcDatabase={1}mdb,cn=config changetype: add objectClass: olcOverlayConfig objectClass: olcSyncProvConfig olcOverlay: {0}syncprov olcSpCheckpoint: 100 10 olcSpSessionlog: 100
- La réplication LDAP s'appuyant sur les attributs entryCSN et entryUUID, nous allons mettre en place des indexes pour ces attributs :
dn: olcDatabase={1}mdb,cn=config changetype: modify add: olcDbIndex olcDbIndex: entryUUID eq - add: olcDbIndex olcDbIndex: entryCSN eq
Le premier serveur est maintenant installé sans réplication. Nous allons pouvoir mettre en place le second serveur.
Installation du second serveur
L’installation du second serveur va consisté à répliquer la configuration puis les données du premier serveur.
- Installer le paquet slapd :
apt-get install slapd ldap-utils
- L'installeur va pré-configuré encore une fois OpenLDAP mais nous allons écraser tout cela. Pour cela, commençons par stopper slapd et répliquer le contenu du dossier /etc/ldap depuis le premier serveur.
En fonction de votre configuration, il peut également être nécessaire de répliquer d'autres fichiers faisant partie de la configuration d'OpenLDAP mais n'étant pas stocké dans le dossier /etc/ldap telques d'éventuel certificats SSL.
- Supprimer ensuite l'ensemble des données contenus dans le dossier /var/lib/ldap (à l'exception du fichier DB_CONFIG pour les bases utilisant le backend HDB ou le BDB)
- Assurer les droits de ces deux dossiers :
chown openldap: -R /var/lib/ldap /etc/ldap/slapd.d
- Relancer slapd
OpenLDAP est maintenant actif et configuré sur les deux serveurs. Le seconde serveur ne dispose pas encore des données de l'arbre LDAP, il les récupérera au moment de la première synchronisation.
Mise en place de la synchronisation
- Nous allons commencer par activer la synchronisation du second serveur sur le premier pour qu'il récupère les données de l'arbre LDAP. Pour cela, nous allons jouer le LDIF suivant :
dn: cn=config changetype: modify add: olcServerID olcServerID: 2 dn: olcDatabase={1}mdb,cn=config changetype: modify add: olcSyncrepl olcSyncrepl: {0}rid=002 provider=ldap://ldap1.example.com type=refreshAndPersist retry="5 5 300 +" searchbase="o=example" attrs="*,+" filter="(objectClass=*)" bindmethod=simple binddn="uid=syncrepl,ou=sysaccounts,o=example" credentials="[mot de passe syncrepl]"
- La réplication est donc maintenant active dans le sens serveur 1 ⇒ serveur 2. Celle-ci est entrain de répliquer l'ensemble des données de l'arbre LDAP vers le serveur 2. Une fois cette synchronisation effectuées nous allons pouvoir activer la réplication dans le sens inverse.
- Pour activer la réplication dans l'autre sens, nous allons jour le LDIF suivant sur le premier serveur :
dn: cn=config changetype: modify add: olcServerID olcServerID: 1 dn: olcDatabase={1}mdb,cn=config changetype: modify add: olcSyncrepl olcSyncrepl: {0}rid=001 provider=ldap://ldap2.example.com type=refreshAndPersist retry="5 5 300 +" searchbase="o=example" attrs="*,+" filter="(objectClass=*)" bindmethod=simple binddn="uid=syncrepl,ou=sysaccounts,o=example" credentials="[mot de passe syncrepl]"
- Il nous reste plus qu'à activer le mode miroir pour que les bases des deux serveurs soit à nouveau accessible en lecture/écriture. Pour cela, nous allons jouer le LDIF suivant sur les deux serveurs :
dn: olcDatabase={1}mdb,cn=config changetype: modify add: olcMirrorMode olcMirrorMode: TRUE