Sales

OpenLDAP Multi Master replicatie, hoe te doen?

Fatih Çevik

Fatih Çevik

PlusClouds Auteur

OpenLDAP Multi Master Replikasyonu Nasıl Yapılır?

OPENLDAP MULTI-MASTER REPLICATIECONFIGURATIE



Voordat we beginnen met ons artikel, laten we een paar vereisten bespreken.
  • Minimaal 2 virtuele machines met openLDAP geïnstalleerd. In ons artikel zullen we Debian 10 gebruiken. Het wordt sterk aanbevolen om dezelfde distributies te gebruiken.
  • Alle virtuele machines die we gaan gebruiken moeten een geïnstalleerde en gesynchroniseerde NTP-server hebben.

Wat is LDAP?


Lightweight Directory Access Protocol of kortweg LDAP (* Simpel Index Toegang Protocol *) is een applicatielaagprotocol dat wordt gebruikt om indexservices te query'en en te wijzigen via TCP/IP.

Dit protocol wordt gebruikt door indexservers zoals OpenLDAP, Sun Directory Server en Microsoft Active Directory. Voor de start kunnen we zeggen dat het een database-achtige structuur heeft, maar het belangrijkste verschil met een database is dat het geen hiërarchische structuur heeft.

Het LDAP-protocol is een berichtgebaseerd protocol. Dit betekent het volgende: de cliënt maakt een LDAP-bericht aan dat een verzoek bevat en stuurt het bericht naar de server. De server verwerkt dit verzoek en stuurt het resultaat terug naar de cliënt als een of meerdere LDAP-berichten.

Omdat LDAP een berichtgebaseerd protocol is, kan de cliënt meerdere verzoeken tegelijk doen. Bijvoorbeeld, een cliënt kan tegelijkertijd twee zoekopdrachten uitvoeren. Het kunnen uitvoeren van meerdere verzoeken tegelijk maakt het LDAP-protocol flexibeler en efficiënter in vergelijking met protocollen zoals HTTP die dat niet toestaan.


Wat is OpenLDAP?


OpenLDAP is een applicatie van LDAP ontwikkeld door het OpenLDAP-project. OpenLDAP gebruikt een licentie die bekendstaat als de BSD-gedistribueerde publieke licentie. Het is een platformonafhankelijk protocol. Veel gebruikte Linux-distributies bevatten de OpenLDAP-software voor LDAP-ondersteuning.


Wat is NTP?


NTP is een sequentieel tijdverdelingssysteem met een overschotcapaciteit. Het meet de algoritmen en vertragingen in het netwerk en op de doelsystemen. Met deze technieken kan het klokken tot op de milliseconde synchroniseren. NTP-instellingen worden gedaan via het bestand /etc/ntp.conf of /etc/xntp.conf, afhankelijk van de gebruikte distributie.

In de meeste basis-geconfigureerde ntp.conf-bestanden zijn er twee servernamen aanwezig. Eén is de naam van de server waarvoor de tijdsynchronisatie moet worden ingesteld en de ander is een fictief IP-adres.
Dit fictieve IP-adres wordt gebruikt in het geval van netwerkproblemen of als de NTP-server uitgeschakeld is of is gecrasht. De NTP-toepassing op het systeem zal de systeemklok opnieuw instellen zodra de externe NTP-server weer beschikbaar is. De eerste van deze twee servers functioneert als de primaire server en de tweede is voor back-updoeleinden. Daarnaast moet ook de locatie van dit doeldocument worden opgegeven. NTP leert na verloop van tijd de foutpercentages in de systeemtijd "kennis te nemen" en zal zichzelf dienovereenkomstig aanpassen.



Nu kunnen we beginnen met de configuratie. Laten we beginnen met de installatie van OpenLDAP.

apt -y install slapd ldap-utils

1. We beginnen eerst met de NTP-serverconfiguratie. Alle NTP-servers op alle machines die we gebruiken moeten dezelfde configuratie hebben en gesynchroniseerd zijn, anders werkt de replicatie niet.
apt -y install ntp
Nu gaan we de NTP-servers die we hebben geconfigureerd configureren om met elkaar te synchroniseren. In ons artikel zullen we de Aziatische NTP-servers gebruiken.
nano /etc/ntp.conf
server 0.asia.pool.ntp.org iburst
server 1.asia.pool.ntp.org iburst
server 2.asia.pool.ntp.org iburst
server 3.asia.pool.ntp.org iburst
Nadat we het conf-bestand hebben bewerkt, slaan we het op en herstarten we de NTP-service.
/etc/init.d/ntp restart
2. Alle servers moeten elkaar herkennen

De servers die we gebruiken moeten elkaar herkennen en probleemloos kunnen communiceren. Als het beschikbaar is, kunt u lokale DNS gebruiken. In ons voorbeeld zullen we de hosts-bestand configureren omdat we geen DNS bezitten.
nano /etc/hosts
10.0.0.1 ldap1.master.com ldap1
10.0.0.2 ldap2.master.com ldap2
Vergeet niet dat alle configuraties die we gaan uitvoeren volledig op alle servers moeten worden uitgevoerd. ONTHOUD dit.
Nu kunt u een ping-test doen.

3. We moeten de standaardconfiguratie van slapd aanpassen.

In het bestand /etc/default/slapd moeten er vermeldingen zijn die overeenkomen met de hostnamen van de servers. Als u deze stap overslaat, is de kans groot dat u de foutmelding read_config serverID/URL match found krijgt.
nano /etc/default/slapd
SLAPD_SERVICES="ldapi:/// ldap://ldap1.master.com"
nano /etc/default/slapd
SLAPD_SERVICES="ldapi:/// ldap://ldap2.master.com"
4. Configuratie van cn=config replicatie

Ik raad ten zeerste aan om bij elke stap een nieuw ldif-bestand te openen. Dit zal u veel helpen voor uw werkcomfort en om te zien wat u doet. We beginnen met het laden van de syncprov-module.
*nano syncprov.ldif*
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: syncprov
ldapmodify -Y EXTERNAL -H ldapi:/// -f syncprov.ldif
We voegen onze configuraties toe aan onze server met ldapmodify. Vergeet niet dat u dezelfde handelingen op alle servers moet uitvoeren.

Nu moeten we de databaseconfiguratie voor replicatie op alle servers instellen. Wijzig de olcServerID-waarde afzonderlijk voor elke server. Voor de eerste server bijvoorbeeld 1, voor de tweede server 2.
nano olcserverID.ldif
dn: cn=config
changeType: modify
add: olcServerID
olcServerID: 1
Na deze stap moet u een wachtwoord instellen als u dat nog niet heeft gedaan. U kunt dit doen met het commando slappasswd.
ldappasswd
New password:
Re-enter new password:
{SSHA}Sg545Nmjhedxfdd5895fMRD6d4RcLkslkeD8
Het is erg belangrijk dat u deze stap op alle servers uitvoert. Zelfs als u hetzelfde wachtwoord kiest, maak alsjeblieft geen kopie van de sleutels, voer het afzonderlijk op elke server uit. Voeg nu uw wachtwoord toe aan de configuratie.
dn: cn=config
changeType: modify
dn: olcDatabase={0}config,cn=config
add: olcRootPW
olcRootPW: {SSHA}Sg545Nmjhedxfdd5895fMRD6d4RcLkslkeD8

Als u alles correct heeft gedaan, kunt u verbinding maken met de database met ldapmodify. Als u het wachtwoord verkeerd invoert, ontvangt u een foutmelding. Als u het correct invoert en het werkt, zal er niets gebeuren.


Nu gaan we de replicatieconfiguratie voor alle servers toevoegen. We zullen dit doen met de eerder gedefinieerde olcServerID-waarden.

nano olc.ldif
dn: cn=config
changetype: modify
replace: olcServerID
olcServerID: 1 ldap://ldap1.master.com
olcServerID: 2 ldap://ldap2.master.com
ldapmodify -Y EXTERNAL -H ldapi:/// -f olc.ldif

Nu zullen we de syncprov-configuratie aan alle servers toevoegen.

nano syncprovconf.ldif
dn: olcOverlay=syncprov,olcDatabase={0}config,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
ldapmodify -Y EXTERNAL -H ldapi:/// -f syncprovconf.ldif

De laatste stap is het toevoegen van de SyncRepl-configuratie tussen de servers.

nano syncrepl.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=001 provider=ldap://ldap1.master.com binddn="cn=admin,cn=config" bindmethod=simple credentials=*Uw Wachtwoord* searchbase="cn=config" type=refreshAndPersist retry="5 5 300 5" timeout=1
olcSyncRepl: rid=002 provider=ldap://ldap2.master.com binddn="cn=admin,cn=config" bindmethod=simple credentials=*Uw Wachtwoord* searchbase="cn=config" type=refreshAndPersist retry="5 5 300 5" timeout=1
-
add: olcMirrorMode
olcMirrorMode: TRUE
ldapmodify -Y EXTERNAL -H ldapi:/// -f syncrepl.ldif

Als u de configuratie volledig en correct hebt gedaan, kunt u met het commando netstat de verbinding tussen de servers testen. Als het netstat-commando niet werkt, moet u de net-tools-service installeren.

apt -y install net-tools
daarna
netstat -a | egrep ":ldap"
tcp 0 0 0.0.0.0:ldap 0.0.0.0:* LISTEN
tcp 0 0 ldap.master.com:57116 ldap1.master.com:ldap ESTABLISHED
tcp 0 0 ldap.master.com:ldap ldap1.master.com:35382 ESTABLISHED
tcp 0 0 ldap.master.com:57120 ldap1.master.com:ldap ESTABLISHED
tcp 0 0 ldap.master.com:ldap ldap1.master.com:35388 ESTABLISHED
tcp6 0 0 [::]:ldap [::]:* LISTEN
U zou een uitvoer zoals bovenstaande moeten krijgen als er verbinding is.


OPMERKING: deze handeling bewijst niet dat replicatie werkt, het toont alleen aan dat de servers met elkaar communiceren.

Nu is het tijd om te testen of de replicatie werkt. We kunnen dit testen door een fictieve olcServerID toe te voegen aan de configuratie. We zullen de fictieve configuratie die we aan het eerste apparaat hebben toegevoegd controleren op de tweede server. We kunnen dit eenvoudig leren met het commando slapcat. Maak op ldap1 het onderstaande ldif-bestand aan en werk de configuratie bij.

nano fake.ldif
dn: cn=config
changetype: modify
replace: olcServerID
olcServerID: 1 ldap://ldap1.master.com
olcServerID: 2 ldap://ldap2.master.com
olcServerID: 3 ldap://fake.ldap.com
ldapmofiy -Y EXTERNAL -H ldapi:/// -f fake.ldif

Als de replicatie goed werkt, zullen we het fictieve adres op de tweede server zien. Voer het volgende commando uit op de ldap2-server en bekijk de uitvoer.

slapcat -b "cn=config" > dump
cat dump | egrep "olcServerID"
olcServerID: 1 ldap://ldap1.master.com
olcServerID: 2 ldap://ldap2.master.com
olcServerID: 3 ldap://fake.ldap.com

Als we het fictieve adres zien, is de cn=config-configuratie voltooid. We kunnen verder gaan naar de volgende stap, de configuratie van de andere databases.


5. Replicatie van andere databases

Aangezien we in de vorige stap de serverreplicatie hebben uitgevoerd, zijn de volgende stappen op één server voldoende om deze bij de andere te laten bijwerken. Laten we nu, zoals eerder, de syncprov-module voor onze MDB-database toevoegen.

nano mdb.ldif
dn: olcOverlay=syncprov,olcDatabase={1}mdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
ldapmodify -Y EXTERNAL -H ldapi:/// -f mdb.ldif

Nu voegen we de syncrepl-configuratie toe.

nano syncrepl.ldif
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=003 provider=ldap://ldap1.master.com binddn="cn=admin,dc=master,dc=com" bindmethod=simple credentials=*Uw Wachtwoord* searchbase="dc=master,dc=com" type=refreshAndPersist interval=00:00:00:10 retry="5 5 300 5" timeout=1
olcSyncRepl: rid=004 provider=ldap://ldap2.master.com binddn="cn=admin,dc=master,dc=com" bindmethod=simple credentials=*Uw Wachtwoord* searchbase="dc=master,dc=com" type=refreshAndPersist interval=00:00:00:10 retry="5 5 300 5" timeout=1
ldapmodify -Y EXTERNAL -H ldapi:/// -f syncrepl.ldif

Nu maken we de indexconfiguratie voor MDB.

nano indexmdb.ldif
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: entryCSN eq
olcDbIndex: entryUUID eq
ldapmodify -Y EXTERNAL -H ldapi:/// -f indexmdb.ldif

Als alle stappen tot hier toe correct zijn uitgevoerd, is uw masterreplicatie actief op beide servers. Om te testen of de replicatie van de MDB-database correct werkt, laten we een ldif-bestand openen, een invoer toevoegen en het op onze andere server controleren.

nano base.ldif
dn: ou=People, dc=master, dc=com
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=master,dc=com
objectClass: organizationalUnit
ou: Group
ldapadd -x -W -D "cn=admin,dc=master,dc=com" -f base.ldif

Laten we nu naar onze ldap2-server gaan en het slapcat commando uitvoeren. Als we de nieuwe groep en People waarden zien, is de replicatie voltooid en functioneert deze actief.