Debian Multi-Master Replikation

Aus Wiki
Zur Navigation springen Zur Suche springen

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.

Warning.png 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.


Bulbgraph.png Hinweis:
Es ist dringend angeraten ein Backup des kompletten LDAP Directories und dessen Konfiguration durchzuführen, bevor mit der Konfiguration der Replikation begonnen wird. Im Falle einer Fehlkonfiguration, die evtl. sogar dazu führt, dass OpenLDAP nicht mehr startet, kann relativ einfach wieder ein lauffähiges LDAP Directory hergestellt werden.


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.