DHCP-Cluster?

german

#1

Hallo,

gibt es eine Möglichkeit unter UCS einen DHCP-Cluster einzurichten?
(Derzeit haben wir beim fraglichen Kunden UCS 4.0.3 installiert - können aber natürlich updaten, wenn nötig.)

Es geht konkret mehr um HA als um Load Balancing.
Wie stellt man sicher, dass sich die beiden UCS-Server (z.B. Master und Backup) abgleichen?

LG,
Roland.


#2

Moin,

das hatte ich mal für einen Kunden evaluiert. Ja, das geht. Stichpunkt ist »failover peer«. Hier die generelle Anleitung vom ICS: kb.isc.org/article/AA-00502/0/A … lover.html

Aus dem Gedächtnis, was zu tun ist:

Dazu muss man wissen, was davon über die UMC gemacht werden kann und was nicht. Die Anleitung zeigt zwei Blöcke »failover peer …«. Diese können nicht über die UMC gemanaget werden. Statt dessen muss man auf den beteiligten Servern entsprechende Blöcke in der local-Konfigurationsdatei des DHCP-Servers eintragen.

Damit hat man Peers definiert, muss aber noch festlegen, für welche Subnetze welche Peers benutzt werden sollen. Dafür muss man zwingend DHCP-Pools anlegen und dann beim Pool den entsprechenden Namen des anderen Peers eintragen. Dies wiederum geht über die UMC (also das Anlegen eines DHCP-Pools, in der Maske ist dann auch ein Feld für den »failover peer«).

Potenziell muss danach auch noch die Univention-Firewall angepasst wedren, falls sie verwendet wird. Ports 519 und 520 müssen zugelassen werden (siehe Beispiel in der Doku); Protokoll bin ich mir gerade nicht ganz sicher – vermutlich UDP.

Also noch mal in groben Stichpunkten:

[ul][li]Zwei DHCP-Server-Objekte in der UMC im richtigen Subnetz anlegen[/li]
[li]Auf beiden Servern in der »/etc/dhcp/local.conf« Abschnitte für »failover peer …« anlegen (siehe Anleitung)[/li]
[li]Auf beiden Servern die Firewall anpassen, sofern verwendet[/li]
[li]In der UMC einen DHCP-Pool zum Subnetz anlegen und beim Pool den Namen des »failover peer«-Eintrages eintragen[/li]
[li]Testen[/li][/ul]

Gruß,
mosu


#3

Das mit den DHCP-Pools verstehe ich noch nicht ganz:
Man legt einen Pool an, und definiert dort am Master einen failover peer (den Backup) und umgekehrt?
Wie kann das überhaupt gehen, wenn die DHCP-Pools im LDAP liegen und syncronisiert werden?

Ich kann übrigens keine Pools in der UMC anlegen.
Wenn ich sie in der Kommandzeile anlege, kann ich sie danach in der UMC nicht editieren.

Fehlermeldung:

[code]Die Ausführung des Kommandos udm/get dhcp/dhcp ist fehlgeschlagen:

Traceback (most recent call last):
File “/usr/lib/pymodules/python2.7/univention/management/console/base.py”, line 207, in _decorated
return function(self, request, *args, **kwargs)
File “/usr/lib/pymodules/python2.7/notifier/threads.py”, line 82, in _run
tmp = self._function()
File “/usr/lib/pymodules/python2.7/notifier/init.py”, line 104, in call
return self._function( *tmp, **self._kwargs )
File “/usr/lib/pymodules/python2.7/univention/management/console/modules/udm/init.py”, line 487, in _thread
obj = module.get(ldap_dn)
File “/usr/lib/pymodules/python2.7/univention/management/console/modules/udm/udm_ldap.py”, line 161, in _decorated
return func(*args, **kwargs)
File “/usr/lib/pymodules/python2.7/univention/management/console/modules/udm/udm_ldap.py”, line 146, in wrapper_func
return _func(*args, **kwargs)
File “/usr/lib/pymodules/python2.7/univention/management/console/modules/udm/udm_ldap.py”, line 139, in _func
ret = func(*args, **kwargs)
File “/usr/lib/pymodules/python2.7/univention/management/console/modules/udm/udm_ldap.py”, line 628, in get
UDM_Error(exc).reraise()
File “/usr/lib/pymodules/python2.7/univention/management/console/modules/udm/udm_ldap.py”, line 616, in get
obj = self.module.object(None, ldap_connection, None, ldap_dn, superordinate, attributes=attributes)
File “/usr/lib/pymodules/python2.7/univention/admin/handlers/dhcp/pool.py”, line 167, in init
raise univention.admin.uexceptions.insufficientInformation, ‘superordinate object not present’
UDM_Error: Die angegebenen Informationen reichen nicht aus. superordinate object not present[/code]

Im LDAP-Browser kann ich sie auch nicht mehr entfernen.
Patchlevel:
version/erratalevel: 193
version/patchlevel: 2
version/releasename: Walle
version/version: 4.0

Ich habe danach alle Errata-Updates von 4.0.2 eingespielt - mit dem gleichen Ergebnis.

Gleiches Problem mit dieser Version:
version/erratalevel: 398
version/patchlevel: 3
version/releasename: Walle
version/version: 4.0


#4

Moin,

ich hab’s doch in Stichpunkten aufgeführt, was zu tun ist. Ja, man legt im LDAP das Pool-Objekt an. Man legt auf den beteiligten Servern jeweils eine local.conf-Datei an mit entsprechendem Inhalt. Diese local.conf-Dateien liegen eben nicht im LDAP und müssen logischerweise auf beiden Servern unterschiedlich sein.

Ich habe mich da vielleicht etwas misverständlich ausgedrückt. Der Name des Objektes in der local.conf muss auf beiden Seiten identisch sein, und dieser Name ist auch derjenige, der im LDAP eingetragen werden muss. Was innerhalb des Blocks steht ist allerdings auf den beteiligten Systemen unterschiedlich (einer hat »primary«, der andere »secondary«; die »address« muss jeweils die Adresse des Partners beinhalten etc.).

Die Fehlermeldung, die Sie gepastet haben, sagt mir nichts. Bitte pasten Sie immer auch den Befehl dazu, den Sie ausgeführt haben. Ansonsten ist Debugging echt schwierig.

Relevant ist vor allem auch die Fehlermeldung der UMC. Diese sollte auch in eine Logdatei unter »/var/log/univention« geschrieben werden; welche davon weiß ich gerade nicht genau. Einfach in der UMC mal versuchen, das Objekt zu bearbeiten, und dann aufs Dateidatum schauen (»ls -lrt /var/log/univention«).

Gruß,
mosu


#5

Danke, das habe ich jetzt verstanden.

Das Problem mit den Pools habe ich auch schon gelöst - ich hatte sie einfach an der falschen Stelle erstellt.
Ein bisschen irreführend ist hier, dass sich die Subnetze nur im LDAP-Modul aufklappen lassen…


#6

Ja leider. Die DHCP-Verwaltung finde ich auch nicht gerade intuitiv :confused: