In diesem Leitfaden konfigurieren wir die Multi-Master-Replikation des OpenLDAP-Servers auf CentOS 7 / RHEL 7 . Dieses Multi-Master-Replikations-Setup soll die Einschränkung der typischen Master-Slave-Replikation überwinden, bei der nur der Master-Server die Änderungen im LDAP-Verzeichnis vornimmt .
LESEN:So konfigurieren Sie die OpenLDAP-Master-Slave-Replikation
Bei der Multi-Master-Replikation fungieren zwei oder mehr Server als Master und alle diese sind maßgeblich für jede Änderung im LDAP-Verzeichnis. Anfragen von den Clients werden mit Hilfe der Replikation auf mehrere Server verteilt.
Umgebung
Für die Multi-Master-Replikation verwenden wir drei OpenLDAP Server. Einzelheiten finden Sie unten.
ldpsrv1.itzgeek.local (192.168.12.10) ldpsrv2.itzgeek.local (192.168.12.20) ldpsrv3.itzgeek.local (192.168.12.30)
LDAP installieren
Installieren Sie LDAP-Pakete auf allen Ihren Servern.yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel
Starten Sie den LDAP-Dienst und aktivieren Sie ihn für den automatischen Start beim Systemstart.
systemctl start slapd.service systemctl enable slapd.service
LDAP-Protokollierung konfigurieren
Konfigurieren Sie Syslog, um die LDAP-Protokollierung zu aktivieren.
echo "local4.* /var/log/ldap.log" >> /etc/rsyslog.conf systemctl restart rsyslog
OpenLDAP Multi-Master-Replikation konfigurieren
Kopieren Sie die Konfigurationsdatei der Beispieldatenbank nach /var/lib/ldap Verzeichnis und aktualisieren Sie die Dateiberechtigungen. Sie müssten die folgenden Schritte auf allen Ihren OpenLDAP-Servern ausführen, sofern nicht anders angegeben.
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG chown ldap:ldap /var/lib/ldap/*
Wir werden das syncprov-Modul aktivieren.
vi syncprov_mod.ldif
Kopieren Sie die folgenden Zeilen und fügen Sie sie in die obige syncprov_mod.ldif ein Datei.
dn: cn=module,cn=config objectClass: olcModuleList cn: module olcModulePath: /usr/lib64/openldap olcModuleLoad: syncprov.la
Senden Sie nun die Konfiguration an den LDAP-Server.
ldapadd -Y EXTERNAL -H ldapi:/// -f syncprov_mod.ldif
Ausgabe:
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "cn=module,cn=config"
Konfigurationsreplikation aktivieren
Ändern Sie die olcServerID auf allen Servern . Setzen Sie beispielsweise für ldpsrv1 die olcServerID auf 1, für ldpsrv2 die olcServerID auf 2 und für ldpsrv3 auf 3.
vi olcserverid.ldif
Kopieren Sie den folgenden Text und fügen Sie ihn in die obige Datei ein.
dn: cn=config changetype: modify add: olcServerID olcServerID: 1
Aktualisieren Sie die Konfiguration auf dem LDAP-Server.
ldapmodify -Y EXTERNAL -H ldapi:/// -f olcserverid.ldif
Ausgabe:
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 modifying entry "cn=config"
Wir müssen ein Passwort für die Replikation der LDAP-Konfiguration generieren.
slappasswd
Ausgabe:
New password: Re-enter new password: {SSHA}MAfw/QNizKx4NxueW7CpCSN6jeDB5Z+C
Sie sollten auf jedem Server ein Passwort generieren, indem Sie den Befehl slappasswd ausführen.
Legen Sie ein Passwort für die Konfigurationsdatenbank fest.
vi olcdatabase.ldif
Kopieren Sie den folgenden Text und fügen Sie ihn in die obige Datei ein. Sie müssen das Passwort, das Sie im vorherigen Schritt generiert haben, in diese Datei einfügen.
dn: olcDatabase={0}config,cn=config add: olcRootPW olcRootPW: {SSHA}MAfw/QNizKx4NxueW7CpCSN6jeDB5Z+C
Aktualisieren Sie die Konfiguration auf dem LDAP-Server.
ldapmodify -Y EXTERNAL -H ldapi:/// -f olcdatabase.ldif
Ausgabe:
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 modifying entry "olcDatabase={0}config,cn=config"
Jetzt richten wir die Konfigurationsreplikation auf allen Servern ein.
vi configrep.ldif
Kopieren Sie den folgenden Text und fügen Sie ihn in die obige Datei ein.
### Update Server ID with LDAP URL ### dn: cn=config changetype: modify replace: olcServerID olcServerID: 1 ldap://ldpsrv1.itzgeek.local olcServerID: 2 ldap://ldpsrv2.itzgeek.local olcServerID: 3 ldap://ldpsrv3.itzgeek.local ### Enable Config Replication### dn: olcOverlay=syncprov,olcDatabase={0}config,cn=config changetype: add objectClass: olcOverlayConfig objectClass: olcSyncProvConfig olcOverlay: syncprov ### Adding config details for confDB replication ### dn: olcDatabase={0}config,cn=config changetype: modify add: olcSyncRepl olcSyncRepl: rid=001 provider=ldap://ldpsrv1.itzgeek.local binddn="cn=config" bindmethod=simple credentials=x searchbase="cn=config" type=refreshAndPersist retry="5 5 300 5" timeout=1 olcSyncRepl: rid=002 provider=ldap://ldpsrv2.itzgeek.local binddn="cn=config" bindmethod=simple credentials=x searchbase="cn=config" type=refreshAndPersist retry="5 5 300 5" timeout=1 olcSyncRepl: rid=003 provider=ldap://ldpsrv3.itzgeek.local binddn="cn=config" bindmethod=simple credentials=x searchbase="cn=config" type=refreshAndPersist retry="5 5 300 5" timeout=1 - add: olcMirrorMode olcMirrorMode: TRUE
Senden Sie nun die Konfiguration an den LDAP-Server.
ldapmodify -Y EXTERNAL -H ldapi:/// -f configrep.ldif
Ausgabe:
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 modifying entry "cn=config" adding new entry "olcOverlay=syncprov,olcDatabase={0}config,cn=config" modifying entry "olcDatabase={0}config,cn=config"
Datenbankreplikation aktivieren
Zu diesem Zeitpunkt sind alle Ihre LDAP-Konfigurationen repliziert. Jetzt aktivieren wir die Replikation der tatsächlichen Daten, d. h. der Benutzerdatenbank. Führen Sie die folgenden Schritte auf einem der Knoten aus, da sich die anderen Knoten in der Replikation befinden.
Wir müssten syncprov für die hdb-Datenbank aktivieren.
vi syncprov.ldif
Kopieren Sie den folgenden Text und fügen Sie ihn in die obige Datei ein.
dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config changetype: add objectClass: olcOverlayConfig objectClass: olcSyncProvConfig olcOverlay: syncprov
Aktualisieren Sie die Konfiguration auf dem LDAP-Server.
ldapmodify -Y EXTERNAL -H ldapi:/// -f syncprov.ldif
Ausgabe:
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "olcOverlay=syncprov,olcDatabase={2}hdb,cn=config"
Richten Sie die Replikation für die hdb-Datenbank ein.
vi olcdatabasehdb.ldif
Kopieren Sie den folgenden Inhalt und fügen Sie ihn in die obige Datei ein. Sie erhalten möglicherweise eine Fehlermeldung für olcSuffix, olcRootDN und olcRootPW, wenn Sie diese bereits in Ihrer Konfiguration haben. Entfernen Sie die Einträge, falls nicht erforderlich.
dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcSuffix olcSuffix: dc=itzgeek,dc=local - replace: olcRootDN olcRootDN: cn=ldapadm,dc=itzgeek,dc=local - replace: olcRootPW olcRootPW: {SSHA}xtbbtC/1pJclCPzo1n3Szac9jqavSphk - add: olcSyncRepl olcSyncRepl: rid=004 provider=ldap://ldpsrv1.itzgeek.local binddn="cn=ldapadm,dc=itzgeek,dc=local" bindmethod=simple credentials=x searchbase="dc=itzgeek,dc=local" type=refreshOnly interval=00:00:00:10 retry="5 5 300 5" timeout=1 olcSyncRepl: rid=005 provider=ldap://ldpsrv2.itzgeek.local binddn="cn=ldapadm,dc=itzgeek,dc=local" bindmethod=simple credentials=x searchbase="dc=itzgeek,dc=local" type=refreshOnly interval=00:00:00:10 retry="5 5 300 5" timeout=1 olcSyncRepl: rid=006 provider=ldap://ldpsrv3.itzgeek.local binddn="cn=ldapadm,dc=itzgeek,dc=local" bindmethod=simple credentials=x searchbase="dc=itzgeek,dc=local" type=refreshOnly interval=00:00:00:10 retry="5 5 300 5" timeout=1 - add: olcDbIndex olcDbIndex: entryUUID eq - add: olcDbIndex olcDbIndex: entryCSN eq - add: olcMirrorMode olcMirrorMode: TRUE
Nachdem Sie die Datei aktualisiert haben, senden Sie die Konfiguration an den LDAP-Server.
ldapmodify -Y EXTERNAL -H ldapi:/// -f olcdatabasehdb.ldif
Ausgabe:
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 modifying entry "olcDatabase={2}hdb,cn=config"
Nehmen Sie Änderungen an olcDatabase={1}monitor.ldif vor Datei, um den Überwachungszugriff nur auf das LDAP-Root (ldapadm ) Benutzer, nicht an andere.
# vi monitor.ldif dn: olcDatabase={1}monitor,cn=config changetype: modify replace: olcAccess olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external, cn=auth" read by dn.base="cn=ldapadm,dc=itzgeek,dc=local" read by * none
Nachdem Sie die Datei aktualisiert haben, senden Sie die Konfiguration an den LDAP-Server.
ldapmodify -Y EXTERNAL -H ldapi:/// -f monitor.ldif
Fügen Sie die LDAP-Schemata hinzu.
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
Generieren Sie base.ldif Datei für Ihre Domain.
# vi base.ldiff dn: dc=itzgeek,dc=local dc: itzgeek objectClass: top objectClass: domain dn: cn=ldapadm ,dc=itzgeek,dc=local objectClass: organizationalRole cn: ldapadm description: LDAP Manager dn: ou=People,dc=itzgeek,dc=local objectClass: organizationalUnit ou: People dn: ou=Group,dc=itzgeek,dc=local objectClass: organizationalUnit ou: Group
Erstellen Sie die Verzeichnisstruktur.
ldapadd -x -W -D "cn=ldapadm,dc=itzgeek,dc=local" -f base.ldif
Ausgabe:
Enter LDAP Password: adding new entry "dc=itzgeek,dc=local" adding new entry "cn=ldapadm ,dc=itzgeek,dc=local" adding new entry "ou=People,dc=itzgeek,dc=local" adding new entry "ou=Group,dc=itzgeek,dc=local"
Testen Sie die LDAP-Replikation
Lassen Sie uns ein Benutzer-LDAP mit dem Namen „ldaptest“ erstellen “ Erstellen Sie dazu auf einem Ihrer Master-Server eine .ldif Datei auf der ldpsrv1.itzgeek.local (in meinem Fall).
[root@ldpsrv1 ~]# vi ldaptest.ldif
Aktualisieren Sie die obige Datei mit dem folgenden Inhalt.
dn: uid=ldaptest,ou=People,dc=itzgeek,dc=local objectClass: top objectClass: account objectClass: posixAccount objectClass: shadowAccount cn: ldaptest uid: ldaptest uidNumber: 9988 gidNumber: 100 homeDirectory: /home/ldaptest loginShell: /bin/bash gecos: LDAP Replication Test User userPassword: {crypt}x shadowLastChange: 17058 shadowMin: 0 shadowMax: 99999 shadowWarning: 7
Fügen Sie mit ldapadd einen Benutzer zum LDAP-Server hinzu Befehl.
[root@ldpsrv1 ~]# ldapadd -x -W -D "cn=ldapadm,dc=itzgeek,dc=local" -f ldaptest.ldif
Ausgabe:
Enter LDAP Password: adding new entry "uid=ldaptest,ou=People,dc=itzgeek,dc=local"
Suchen Sie nach „ldaptest “ auf einem anderen Masterserver (ldpsrv2.itzgeek.local ).
[root@ldpsrv2 ~]# ldapsearch -x cn=ldaptest -b dc=itzgeek,dc=local
Ausgabe:
# extended LDIF # # LDAPv3 # base <dc=itzgeek,dc=local> with scope subtree # filter: cn=ldaptest # requesting: ALL # # ldaptest, People, itzgeek.local dn: uid=ldaptest,ou=People,dc=itzgeek,dc=local objectClass: top objectClass: account objectClass: posixAccount objectClass: shadowAccount cn: ldaptest uid: ldaptest uidNumber: 9988 gidNumber: 100 homeDirectory: /home/ldaptest loginShell: /bin/bash gecos: LDAP Replication Test User userPassword:: e2NyeXB0fXg= shadowLastChange: 17058 shadowMin: 0 shadowMax: 99999 shadowWarning: 7 # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
Legen Sie nun ein Passwort für den auf ldpsrv1.itzgeek.local erstellten Benutzer fest indem Sie zu ldpsrv2.itzgeek.local gehen . Wenn Sie das Passwort festlegen können, bedeutet dies, dass die Replikation wie erwartet funktioniert.
[root@ldpsrv2 ~]# ldappasswd -s password123 -W -D "cn=ldapadm,dc=itzgeek,dc=local" -x "uid=ldaptest,ou=People,dc=itzgeek,dc=local"
Wo,
-s Geben Sie das Passwort für den Benutzernamen an
-x Benutzername, für den das Passwort geändert wird
-D Eindeutiger Name zur Authentifizierung beim LDAP-Server.
In der Master-Slave-Replikationstopologie können Sie das Kennwort für den LDAP-Benutzer auf dem Slave-Server nicht festlegen.Extras
Konfigurieren Sie den LDAP-Client so, dass er sich auch an den neuen Master-Server bindet.
authconfig --enableldap --enableldapauth --ldapserver=ldpsrv1.itzgeek.local,ldpsrv2.itzgeek.local,ldpsrv3.itzgeek.local --ldapbasedn="dc=itzgeek,dc=local" --enablemkhomedir --update
Das ist alles.