3.4. Listener/Notifier-Domänenreplikation#
3.4.1. Ablauf der Listener/Notifier-Replikation#
Die Replikation der Verzeichnisdaten innerhalb einer UCS-Domäne erfolgt über den Univention Directory Listener/Notifier-Mechanismus:
Der Univention Directory Listener-Dienst läuft auf jedem UCS-System.
Auf dem Primary Directory Node (und eventuell vorhandenen Backup Directory Nodes) überwacht der Univention Directory Notifier-Dienst Änderungen im LDAP-Verzeichnis und stellt die aufgezeichneten Änderungen transaktionsbasiert den Univention Directory Listener-Diensten auf den weiteren UCS-Systemen zur Verfügung.
Die aktiven Univention Directory Listener-Instanzen der Domäne verbinden sich zu einem Univention Directory Notifier-Dienst. Wird auf dem Primary Directory Node eine LDAP-Änderung durchgeführt (alle anderen LDAP-Server der Domäne sind nur lesend), wird diese durch den Univention Directory Notifier registriert und an die Listener-Instanzen gemeldet.
Jede Univention Directory Listener-Instanz verwendet eine Reihe von Univention Directory Listener-Modulen. Diese Module werden von den installierten Applikationen mitgeliefert, das Druckserver-Paket bringt z.B Listener-Module mit, die die CUPS-Konfiguration erzeugen.
Durch Univention Directory Listener-Module können Änderungen an der Domäne auch an Dienste übermittelt werden, die selbst nicht LDAP-fähig sind. Ein Beispiel ist der Druckserver CUPS: Die Druckerdefinitionen werden nicht aus dem LDAP ausgelesen, sondern aus der Datei /etc/cups/printers.conf
. Wird nun im UMC-Modul Drucker ein Drucker angelegt, wird dieser im LDAP registriert. Diese Änderung wird dann vom Univention Directory Listener-Modul cups-printers erkannt und basierend auf den Daten im LDAP ein Eintrag in /etc/cups/printers.conf
hinzugefügt, modifiziert oder gelöscht.
Weitergehende Informationen zum Aufbau von Univention Directory Listener-Modulen und zur Entwicklung eigener Module finden sich in Univention Developer Reference [3].
Die LDAP-Replikation erfolgt ebenfalls durch ein Listener-Modul. Ist der LDAP-Server zu dem repliziert werden soll nicht erreichbar, werden die LDAP-Änderungen in der Datei /var/lib/univention-directory-replication/failed.ldif
zwischengespeichert. Der Inhalt dieser Datei wird beim späteren Start des LDAP-Servers automatisch in das LDAP übertragen.
Der Listener/Notifier-Mechanismus arbeitet transaktionsbasiert. Für jede Änderung im LDAP-Verzeichnis des Primary Directory Node wird eine Transaktions-ID erhöht. Eine Univention Directory Listener-Instanz, die mehrere Transaktionen verpasst hat - weil zum Beispiel der Rechner ausgeschaltet war - fragt bei erneuter Verfügbarkeit der Verbindung automatisch alle fehlenden Transaktionen ab, bis seine lokale Transaktions-ID der des Primary Directory Node entspricht.
3.4.2. Analyse von Listener/Notifier-Problemen#
3.4.2.1. Logdateien/Debug-Level der Replikation#
Alle Statusmeldungen des Univention Directory Listener und der aufgerufenen Listener-Module werden in die Datei /var/log/univention/listener.log
protokolliert. Der Detailgrad der Logmeldungen kann über die Univention Configuration Registry Variable listener/debug/level
konfiguriert werden.
Statusmeldungen des Univention Directory Notifier-Dienstes werden in die Datei /var/log/univention/notifier.log
protokolliert. Der Debuglevel kann mit der Variable notifier/debug/level
konfiguriert werden.
3.4.2.2. Erkennung von Replikationsproblemen#
Im Regelbetrieb der Domänenreplikation (keine hohe Last auf den Systemen, keine Störungen im Netzwerk) ist die Verzögerung zwischen Änderungen in UMC-Modulen bis zur Replikation auf z.B. eines Replica Directory Node kaum merkbar. Eine möglicherweise unvollständige Replikation kann durch einen Vergleich der Transaktions-IDs von Listener- und Notifier-Dienst identifiziert werden.
Auf dem Primary Directory Node werden die vom Notifier-Dienst registrierten Transaktionen in aufsteigender Reihenfolge in die Datei /var/lib/univention-ldap/notify/transaction
geschrieben. Ein Beispiel:
root@primary:~# tail -1 /var/lib/univention-ldap/notify/transaction
836 cn=replica3,cn=dc,cn=computers,dc=firma,dc=de m
Auf dem Listener-System wird die zuletzt vom Listener empfangene Transaktion in der Datei /var/lib/univention-directory-listener/notifier_id
gespeichert:
root@replica1:~# cat /var/lib/univention-directory-listener/notifier_id
836
Diese Prüfung kann auch automatisiert durch den Nagios-Dienst UNIVENTION_REPLICATION
durchgeführt werden (siehe Vorkonfigurierte Nagios-Prüfungen).
3.4.2.3. Neuinitialiisierung von Listener-Modulen#
Falls es zu Problemen bei der Abarbeitung eines Listener-Moduls gekommen ist, besteht die Möglichkeit, das Modul neu zu initialisieren. Dabei werden alle LDAP-Objekte mit denen das Listener-Modul arbeitet erneut übergeben.
Warnung
Dies ist eine destruktive Operation. Sie entfernt internen Zustand des Listeners. Nur mit Vorsicht verwenden!
Dem Befehl zum erneuten Initialisieren muss der Name des Listener-Moduls übergeben werden. Die installierten Listener-Module sind im Verzeichnis /var/lib/univention-directory-listener/handlers/
zu finden.
Mit dem folgenden Befehl kann beispielsweise das Druckermodul neu initialisiert werden:
$ univention-directory-listener-ctrl resync cups-printers