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.

Listener/Notifier-Mechanismus

Abb. 3.2 Listener/Notifier-Mechanismus#

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