====== 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