NixBlix
Anmeldungsdatum: 12. Januar 2015
Beiträge: 218
|
Hallo Leute, ich hatte in meinem Netzwerk vor einiger Zeit einen DHCP + DNS-Ausfall (Server wurde vom Kollegen unbeabsichtigt abgeschaltet) und das komplette Netzwerk ist 2 Stunden ausgefallen.
Das ist ein einer Firma natürlich inakzeptabel und daher möchte ich mich nun darum kümmern solchen Fällen vorzubeugen bzw. redundante Server / Failover zu implementieren. Ich bin vor ca. 2 Jahren von MS DNS und DHCP auf Linux umgestiegen und benutze hier 'bind9' und 'isc-dhcp-server'. Ich habe in meinem Netzwerk mittlerweile 2 DNS Server (Master/Slave) um einem Ausfall für die Namensauflösung vorzubeugen.
Jetzt frage ich mich was ich tun kann um den sehr wichtigen DHCP-Server ausfallsicher machen zu können? 2x DHCP-Server im Netzwerk vertragen sich ja bekanntlich gar nicht. Wie realisiere ich ein redundanten DHCP-Server oder ein Failover-System bei welchem dann ein anderen übernimmt wenn der erste nicht mehr funktioniert? Setze ich einen DHCP-Server auf, stoppe den Dienst und versorge ihn regelmäßig mit den Konfigdateien? Wir nutzen eine fixe IP = MAC-Adress-Zuordnung indem jeder Client seine 'fixe' IP-Adresse zugewiesen bekommt. Nur Mobile Geräte (Tablet + Smartphones) bekommen eine beliebige IP aus der vordefinierten Range.
Beim produktiven DHCP-Server habe ich es so realisiert das die Zuordnungs-Datei separat steht und in der dhcpd.conf am Ende included wird. Dann läuft noch ein incrontab der diese Datei überwacht und den Dienst neu startet wenn sich in dieser Datei etwas geändert hat.
Ich könnte ja nun einmal täglich ein crontab zum übertragen dieser Datei auf den Ausfall-DHCP erstellen und
einmal im incrontab, bei jeglicher Änderung dieser Datei also, dies auch noch zusätzlich machen (damit es imemr aktuell ist und der DHCP somit jederzeit ausfallen darf und wir trotzdem up-to-date sind). Oder bin ich da auf dem komplett falschen Weg?
Wie habt ihr das realisiert? Was soll ich machen?
|
TheDarkRose
Anmeldungsdatum: 28. Juli 2010
Beiträge: 3459
|
Gar nicht. Einfach ein simples Monitoring auf die Kiste, dass dich im Fehlerfall benachrichtigt und jemand somit reagieren kann.
|
NixBlix
(Themenstarter)
Anmeldungsdatum: 12. Januar 2015
Beiträge: 218
|
TheDarkRose schrieb: Gar nicht. Einfach ein simples Monitoring auf die Kiste, dass dich im Fehlerfall benachrichtigt und jemand somit reagieren kann.
Das nutzt mir nicht viel wenn derjenige vor schier unlösbaren Aufgaben steht.
Jeder in der Abteilung hat Grundkenntnisse + seine Spezialgebiete. Linux auf dem Terminal kann jeder oberflächlich, aber sobald es in die Konfiguration der Dienste geht bleibe ich alleine übrig.
Wenn wieder in meinem Urlaub der DHCP ausfallen sollte → keine Lust mich im Urlaub damit per Remote beschäftigen zu müssen. Bin ich im Ausland unterwegs, geht das gar nicht. Somit muss ein Failover her und ich habe gegoogelt und zu DHCP + Failover gibt es viele Treffer die auf englisch erklären wie das zu realisieren ist.
Gut, kann ich jetzt nach und nach abarbeiten und umsetzen. Dafür braucht es kein Forum. Ich will aber auch gleich verstehen und das Konzept auch jemanden erklären können wenn ich diesen Bereich abgeben sollte oder einfach so jemanden einlernen soll. Daher frage ich die Profis hier damit ich es auch verstehe was ich zu machen habe. Also die Frage an alle die das Problem bereits hatten und es gelöst haben: wie habt ihr das gemacht? Was für Konzepte gibt es?
|
NixBlix
(Themenstarter)
Anmeldungsdatum: 12. Januar 2015
Beiträge: 218
|
Hier noch ein Beispiel zu einer Anleitung auf deutsch:
https://www.tech-island.com/tutorials/dhcp-failover-linux Aber: ich fasse ungern den produktiven DHCP-Server an was dessen Konfigurationsdateien angeht.
Somit suche ich nach einer Alternative die ich eventuell nutzen kann OHNE die Konfigurationsdateien des primären DHCP-Servers anrühren zu müssen...
|
NixBlix
(Themenstarter)
Anmeldungsdatum: 12. Januar 2015
Beiträge: 218
|
Vielleicht kennt sich hier ja jemand damit aus:
eigenes Netz in VirtualBox bilden damit man einen DHCP-Server drinn aufsetzten kann um zu testen? Jedoch sollte der Server dennoch über den Host ins Internet kommen können damit die Pakete und der Gleichen installiert werden können? Welche Netzwerkart sollte man da nehmen? NAT, NAT Netzwerk, Netzwerkbrücke, internes Netzwerk, Host only Adapter oder generischer Treiber? Wenn ich ein eigenes unabhängiges Netz erstellen kann, kann ich mit den DHCP-Failovern experimentieren und wenn alles ok ist, einfach die Konfigurationsdateien in mein echtes Netz übernehmen..
|
misterunknown
Ehemalige
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 4403
Wohnort: Sachsen
|
Siehe hier. Haben wir erfolgreich im Einsatz.
|
NixBlix
(Themenstarter)
Anmeldungsdatum: 12. Januar 2015
Beiträge: 218
|
@misterunknown Vielen Dank!
Habe es genauso umgesetzt und kümmere mich per cronjob + incron um die Synchronisation der betreffenden Daten. Habe ich im 'DNS-Thread' (https://forum.ubuntuusers.de/topic/2-dns-server-ins-netzwerk-stellen-als-slave-od/) auch beschrieben was ich genau mache. Vielen vielen Dank!
|
NixBlix
(Themenstarter)
Anmeldungsdatum: 12. Januar 2015
Beiträge: 218
|
Hallo Leute, jetzt sind ein paar Monate ins Land gegangen und ein paar kleinere Probleme sind doch noch aufgetaucht. Keine weltbewegenden Probleme wenn man darauf achtet und nach jedem neu-laden des Dienstes prüft ob alles wieder läuft und ansonsten die Dienste nochmals neu startet. Aber das kann ja in einer Profi-Umgebung so natärilich nicht bestehen bleiben und ich widme mich nun diesem Probelm und hoffe daß Ihr mir hier weiterhelfen könnt. Ich habe das incron-Programm installiert welches Dateien überwacht und bei Änderungen 'triggert' → Befehle ausführt wie z.B. das neu starten eines Dienstes.
Da habe ich die Überwachung meiner IP-Leases-Datei die in die dhcpd.conf am Ende 'included' wird, und wenn sie diese ändert → Dienst 'isc-dhcp-server' neu starten damit die Änderungen übernommen werden.
So weit so gut. Funktionierte jetzt monatelang (wenn nicht gar jahrelang) wunderbar.
Seit ich aber den Failover-DHCP-Server implementiert habe, gibt es unregelmäßig, aber relativ häufig einen DHCP-Ausfall. Sprich: meine Clients bekommen keine IP-Adressen zugewiesen mehr laut der Leases-Liste (MAC = IP). Wenn ich den Dienst manuell neu starte geht es dann wieder. Und dieses Problem will ich nun beheben wenn es geht. Ich vermute folgendes:
Die Ausfallzeit, also die Zeit die der primäre Server ausgefallen ist bevor der sekundäre Server den Job übernimmt, ist zu kurz eingestellt.
(Sollte jemand hier was anderes Vermuten so darf es das gerne erwähnen) Die Frage ist aber jetzt:
welche der Werte bestimmt diese Ausfallzeit?
Ist es das 'max-response-delay' welches auf beiden Servern hinterlegt ist?
Oder das 'max-unacked-updates' ebenfalls auf beiden Servern vorhanden?
'load balance max seconds' sollte keine Rolle spielen da ich kein Balancing mache (split → 255 und nur auf dem primären Server vorhanden) Auf dem primären Server habe ich noch das mclt welches auf 255 ist. Was dieser Wert genau bedeutet weiß ich leider jedoch noch nicht. Kann mir jemand hier auf die Sprünge helfen und a) meine Vermutung untermauern oder andere mögliche Ursachen nennen und b) sagen welchen Wert ich nach oben schrauben muss um die Ausfallzeit, in welcher der primäre Server nicht mehr antwortet bis der sekundäre übernimmt? Nachtrag:
Ich lese gerade das der Wert für 'split' nicht auf 255 stehen soll sondern auf 256 um den Primary-DHCP als alleinigen Server zu betreiben. Bei mir war der Wert jetzt auf 255.
Was stimmt nun? 255 oder 256 für den alleinigen Betrieb des primary? Und könnte das eventuell zu der Fehlfunktionien geführt haben wie oben beschrieben?
Ich kopiere die Lease-Datei (MAC-IP-Zuordnungsdatei) 2x täglich per crontab und dann auch immer beim triggern einer Änderung an der Lease-Datei selber. Sollte also gleich sein und somit ich auch bei einem Loadbalancing zu keinen Diskrepanzen führen. Aber dennoch.. Apropos da ich das gerade schreibe kommt mir noch eine weitere Idee:
Kann es sein das wenn beide Server gleichzeitig ihren Dienst neu starten (ein paar Milisekunden Abstand → bis die Lease-Datei kopiert wurde und incron reagieren konnte und getriggert hat) es zu dem o.g. Fehler kommen kann weil die beim booten sich nicht finden und somit kein Failover-Parter da ist obwohl so hinterlegt? Oder irgendwas in diese Richtung?
|
misterunknown
Ehemalige
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 4403
Wohnort: Sachsen
|
NixBlix schrieb: Da habe ich die Überwachung meiner IP-Leases-Datei die in die dhcpd.conf am Ende 'included' wird, und wenn sie diese ändert → Dienst 'isc-dhcp-server' neu starten damit die Änderungen übernommen werden.
Dafuq? Wieso?
Seit ich aber den Failover-DHCP-Server implementiert habe, gibt es unregelmäßig, aber relativ häufig einen DHCP-Ausfall. Sprich: meine Clients bekommen keine IP-Adressen zugewiesen mehr laut der Leases-Liste (MAC = IP). Wenn ich den Dienst manuell neu starte geht es dann wieder. Und dieses Problem will ich nun beheben wenn es geht.
Wie ist die mclt gesetzt? ([STRG+f The mclt statement])
|
NixBlix
(Themenstarter)
Anmeldungsdatum: 12. Januar 2015
Beiträge: 218
|
misterunknown schrieb: NixBlix schrieb: Da habe ich die Überwachung meiner IP-Leases-Datei die in die dhcpd.conf am Ende 'included' wird, und wenn sie diese ändert → Dienst 'isc-dhcp-server' neu starten damit die Änderungen übernommen werden.
Dafuq? Wieso?
Wenn ich (oder einer meiner Kollegen) einen neuen DHCP-Client hinzufügt oder löscht, wird die Änderung erst wirksam wenn der Dienst neu gestartet wurde.
Darum habe ich diese 'Zuordnungsdatei' (Lease-Datei? MAC = IP) ausgegliedert und eine Dateiüberwachung implementiert. Wenn Änderung auf dieser Datei → Trigger → Dienst neu starten = Änderungen sind wirksam.
Anders geht es ja auch gar nicht, oder?
Und dazu habe ich auch noch ein Python-Programm erstellt welches das Management dieser Datei übernimmt (Suchen (nach Nodename, IP, MAC), Löschen und Hinzufügen (doppelte IP- und MAC.ADressen als auch Nodenamen werden abgelehnt). Dies kann man auch aus dem Kommandozeilenfenster unserer Client-Workstations ausführen. (Quasi unsere Admintools..)
Seit ich aber den Failover-DHCP-Server implementiert habe, gibt es unregelmäßig, aber relativ häufig einen DHCP-Ausfall. Sprich: meine Clients bekommen keine IP-Adressen zugewiesen mehr laut der Leases-Liste (MAC = IP). Wenn ich den Dienst manuell neu starte geht es dann wieder. Und dieses Problem will ich nun beheben wenn es geht.
Wie ist die mclt gesetzt? ([STRG+f The mclt statement])
War auf 600, habe es gestern auf 3600 gesetzt weil irgendwo gelesen gehabt das dies ein Standardwert sei. BTW:
[STRG+f The mclt statement] bedeutet was genau?
Den mclt-Wert habe ich jedenfalls aus der dhcp.conf.
|
misterunknown
Ehemalige
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 4403
Wohnort: Sachsen
|
NixBlix schrieb: Anders geht es ja auch gar nicht, oder?
Es gibt erstens die omshell und zweitens kann man den Dienst auch reloaden, ohne ihn komplett neu zu starten.
BTW:
[STRG+f The mclt statement] bedeutet was genau?
Sorry, da hats mir den Link zerkloppt. Offenbar hatte der Parser was gegen mein STRG+f. Ich meinte natürlich suchen auf der verlinkten Seite nach "the mclt statement". Dort steht beschrieben, wie sich das auf die Failover-Funktion auswirkt.
|
NixBlix
(Themenstarter)
Anmeldungsdatum: 12. Januar 2015
Beiträge: 218
|
misterunknown schrieb: NixBlix schrieb: Anders geht es ja auch gar nicht, oder?
Es gibt erstens die omshell und zweitens kann man den Dienst auch reloaden, ohne ihn komplett neu zu starten.
Ok, von der omshell höre ich zum ersten mal.
Das ist ein Programm welches in der Shell ausgeführt wird und keine neue Shell, richtig?
Wenn das so stimmt, was ist dann besser oder was bringt die omshell an Mehrwert zu dem einfachen 'relaoden' im isc-dhcp-server?
Ich habe einen älteren Eintrag (von 2011) gefunden gehabt der besagt das es keine reload-Funktion gibt und der Dienst neu gestartet werden müsse. Ich habe dann nicht weiter gesucht und dies so akzeptiert.
(https://deepthought.isc.org/article/AA-00335/0/How-do-you-have-dhcpd-reload-its-configuration-file.html
Aber auch jetzt wenn ich danach suche bekomme ich zumindest bei den ersten paar Treffern keine Info das reloaden geht?
Kannst du mir sagen wie das gehen soll? Zu der omshell nochmal: ich ändere ungern komplett meine Programme (Python zum Managen der Lease-Datei). Ich kann aber sicherlich den Dateiüberwachungstrigger so umgestalten das dieser entsprechende Dinge mit der omshell erledigt (eben statt des Neustartens des Dienstes) und ich in der Bedienung und dem Vorgehen nichts ändern muss, oder? Sprich: ich benutze auch weiterhin mein Programm und auch weiterhin wird die Datei überwacht und getriggert. Nur was beim triggern ausgeführt wird ändert sich → nicht neu starten sondern reloaden oder eben per omshell irgendwas machen?
BTW:
[STRG+f The mclt statement] bedeutet was genau?
Sorry, da hats mir den Link zerkloppt. Offenbar hatte der Parser was gegen mein STRG+f. Ich meinte natürlich suchen auf der verlinkten Seite nach "the mclt statement". Dort steht beschrieben, wie sich das auf die Failover-Funktion auswirkt.
Ja, irgendwas habe ich in diese Richtung auch gelesen gehabt das der mclt-Wert hierfür wichtig sein könnte (neben vielen anderen Dingen, wobei ich leider noch nicht das wichtige und richtige vom unwichtigen oder falschen unterscheiden kann). Daher habe ich den mctl-Wert auch von 600 auf 3600 hoch gesetzt und werde das Ganze jetzt mal ein paar Wochen beobachten. Wenn keine Probleme auftauchen könnte ich es ja dann dabei belassen, oder meinst du es ist falsch den Dienst jedes mal neu zu starten wenn sich Änderungen ergeben statt des reloadens oder irgendwas mit der omshell zu machen? Sprich: auch wenn der das o.g. Fehler weg sein sollte, sollte ich dennoch auf reloaden setzten statt auf neu starten?
|
misterunknown
Ehemalige
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 4403
Wohnort: Sachsen
|
NixBlix schrieb: Das ist ein Programm welches in der Shell ausgeführt wird und keine neue Shell, richtig?
Richtig, einfach mal die Manpage durchlesen.
Wenn das so stimmt, was ist dann besser oder was bringt die omshell an Mehrwert zu dem einfachen 'relaoden' im isc-dhcp-server?
Keine Ahnung, ich hab die auch noch nicht benutzt, aber die Manpage sah aus, als würde das genau dein Problem lösen.
Ich habe einen älteren Eintrag (von 2011) gefunden gehabt der besagt das es keine reload-Funktion gibt und der Dienst neu gestartet werden müsse. Ich habe dann nicht weiter gesucht und dies so akzeptiert.
Hm, stimmt, mein "reload"-Skript startet den auch neu 😲
Zu der omshell nochmal: ich ändere ungern komplett meine Programme (Python zum Managen der Lease-Datei).
Dann guck dir mal das hier an. Offenbar gibt es eine Python-Bibliothek dafür.
|
NixBlix
(Themenstarter)
Anmeldungsdatum: 12. Januar 2015
Beiträge: 218
|
misterunknown schrieb: NixBlix schrieb: Zu der omshell nochmal: ich ändere ungern komplett meine Programme (Python zum Managen der Lease-Datei).
Dann guck dir mal das hier an. Offenbar gibt es eine Python-Bibliothek dafür.
Dann müsste ich ja nochmals 'Hand anlegen' am Programm. Um dies zu umgehen, würde ja meine angedachte Vorgehensweise ja auch problemlos klappen:
Datei überwachen → Triggern → omshell-Befehle zum reloaden ausführen
oder?
|
misterunknown
Ehemalige
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 4403
Wohnort: Sachsen
|
Probiers aus, ich habs wie gesagt noch nicht gemacht 😉
|