Debian Multi-Master Replikation
Allgemein
Das LDAP Directory kann zur Erhöhung der Ausfallsicherheit über mehrere Server hinweg repliziert (synchronisiert) werden. So sind die Daten permanent redundant auf mehreren Servern vorrätig und kann von den diversen Diensten benutzt werden. LDAP bringt bereits alle Mittel mit, um das Directory auf mehreren Servern zu replizieren. Für die Replikation wird das OpenLDAP- Modul syncrepl verwendet.
Voraussetzung:
- LDAP Server auf mindestens zwei Servern installiert
- DNS Server (Replikation mittels IP-Adressen funktioniert nicht)
Installation
LDAP-Server auf mindestens zwei Servern installiert. Im folgenden sollen diese ldap1 und ldap2 heißen. Als Domain wird test.lan verwendet. Die LDAP BaseDN wurde mit dc=test,dc=lan gewählt.
Achtung: | |
Im Folgenden unbedingt ldap1 und ldap2 mit den Hostnamen (ermitteln mit Befehl hostname) der beiden Server ersetzen. IP-Adressen bzw. DNS-Aliase funktionieren hier definitiv nicht. |
Konfiguration
Modul Syncrepl aktivieren
vi /root/ldap_ldif/syncrepl_load.ldif
Folgende Zeilen einfügen:
dn: cn=module,cn=config objectClass: olcModuleList cn: module olcModuleLoad: syncprov.la
Übertragen des ldif-Files ins LDAP Directory (auf beiden LDAP-Servern ldap1 und ldap2 durchführen):
ldapadd -cxWD cn=admin,cn=config -f /root/ldap_ldif/syncrepl_load.ldif
Replikation der LDAP Konfigurations Datenbank (cn=config)
vi /root/ldap_ldif/syncrepl_config.ldif
Folgende Zeilen einfügen und evtl. anpassen (Hostnamen ldap1 und ldap2 und ldap_pwd mit LDAP-Admin Passwort ersezten):
dn: cn=config changetype: modify add: olcServerID olcServerID: 1 ldap://ldap1.test.lan olcServerID: 2 ldap://ldap2.test.lan dn: olcOverlay=syncprov,olcDatabase={0}config,cn=config changetype: add objectClass: olcOverlayConfig objectClass: olcSyncProvConfig olcOverlay: syncprov dn: olcDatabase={0}config,cn=config changetype: modify add: olcSyncRepl olcSyncRepl: rid=001 provider=ldap://ldap1.test.lan binddn="cn=admin,cn=config" bindmethod=simple credentials=ldap_pwd searchbase="cn=config" type=refreshAndPersist retry="5 5 300 5" timeout=1 olcSyncRepl: rid=002 provider=ldap://ldap2.test.lan binddn="cn=admin,cn=config" bindmethod=simple credentials=ldap_pwd searchbase="cn=config" type=refreshAndPersist retry="5 5 300 5" timeout=1 - add: olcMirrorMode olcMirrorMode: TRUE
File vor unberechtigtem Zugriff schützen, da Admin Passwort im Klartext hinterlegt ist:
chmod 600 /root/ldap_ldif/syncrepl_config.ldif
Übertragen des ldif-Files ins LDAP Directory (auf beiden LDAP-Servern ldap1 und ldap2 durchführen):
ldapmodify -cxWD cn=admin,cn=config -f /root/ldap_ldif/syncrepl_config.ldif
OpenLDAP auf beiden Servern neu starten:
/etc/init.d/slapd restart
Replikation des Daten Directories
vi /root/ldap_ldif/syncrepl_hdb.ldif
Folgende Zeilen einfügen und anpassen:
dn: olcDatabase={1}hdb,cn=config changetype: modify replace: olcSyncRepl olcSyncRepl: rid=003 provider=ldap://ldpa1.test.lan binddn="cn=admin,dc=test,dc=lan" bindmethod=simple credentials=LDAP_PWD searchbase="dc=test,dc=lan" type=refreshOnly interval=00:00:00:10 retry="5 5 300 5" timeout=1 olcSyncRepl: rid=004 provider=ldap1://ldap2.test.lan binddn="cn=admin,dc=test,dc=lan" bindmethod=simple credentials=LDAP_PWD searchbase="dc=test,dc=lan" type=refreshOnly interval=00:00:00:10 retry="5 5 300 5" timeout=1 - add: olcMirrorMode olcMirrorMode: TRUE dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config changetype: add objectClass: olcOverlayConfig objectClass: olcSyncProvConfig olcOverlay: syncprov
Ins Directory übernehmen (nur auf einem Server ausführen, da die Änderung bereits auf den zweiten Server automatisch repliziert werden sollte):
ldapmodify -cxWD cn=admin,cn=config -f /root/ldap_ldif/syncrepl_hdb.ldif
Funktionstest
Auf Server ldap1:
vi /root/ldap_ldif/add_testrepl.ldif
Folgende Zeilen einfügen und anpassen:
dn: uid=testrepl,ou=people,dc=test,dc=lan uid: testrepl uidNumber: 8899 gidNumber: 9988 cn: Test sn: Test objectClass: top objectClass: inetOrgPerson objectClass: person objectClass: posixAccount objectClass: shadowAccount loginShell: /bin/false homeDirectory: /home/testrepl
In's Directory einfügen:
ldapadd -cxWD cn=admin,dc=test,dc=lan -f /root/ldap_ldif/add_testrepl.ldif
Auf ldap1 und ldap2:
ldapsearch -xLLL uid=testrepl
Die Ausgabe sollte auf beiden Servern folgendermaßen aussehen, falls die Replikation korrekt funktioniert:
dn: uid=testrepl,ou=people,dc=test,dc=lan uid: testrepl uidNumber: 8899 gidNumber: 9988 cn: Test sn: Test objectClass: top objectClass: inetOrgPerson objectClass: person objectClass: posixAccount objectClass: shadowAccount loginShell: /bin/false homeDirectory: /home/testrepl
Falls am Server ldap2 keine Ausgabe erfolgt, liegt ein Replikationsfehler vor.
Auf ldap2:
vi /root/ldap_ldif/del_testrepl.ldif
Folgende Zeilen einfügen und anpassen:
dn: uid=testrepl,ou=people,dc=test,dc=lan changetype: delete
Test Usereintrag löschen:
ldapmodify -cxWD cn=admin,dc=test,dc=lan -f /root/ldap_ldif/del_testrepl.ldif
Auf ldap1 und ldap2:
ldapsearch -xLLL uid=testrepl
Es sollten auf beiden Servern keinerlei Ausgaben erfolgen. Damit wurde die Replikation von ldap1=>ldap2 und von ldap2=>ldap1 erfolgreich verifiziert.