• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Shell Script zum Überprüfen ob Server Online und reagieren

fox_river

Newbie
Mein Problem:

Ich habe 3 call server (Server1, Server2, Server3) im rahmen meiner Diplomarbeit configuriert.Diese sind alle unter eine Domain (testdomain.de) zu finden.Der DNS wurde mit BIND9 configuriert.

Ich möchte ,dass der DNS-Server nur die IP-Adresse des Online Server per Abfrage zurück gibt. d.h wenn z.B. der Server 2 down ist , nur die IP1 & IP3 des noch Online Servers zürück geben. Dafür muss ich ein Shell Script schreiben , der jede Minute die Servern ping , um zu prüfen , ob alle immer noch Online sind. Wenn einen DOWN wäre, sollte der DNS dies von seine Zonedatein entfernen, damit die Client dies nicht mehr per Abfrage erhalten können.

Ist das überhaupt machbar?

Ich kenne mich nicht mit Shell-Programmierung aus und ich würde mich auf ihre Hilfe sehr freuen.

Danke+Gruss
Bert.
 

Wizzzard

Member
Sowas macht man normalerweise nicht mit Shell Skripten. Da verwendet man drbd mit einer bestimmten Netzwerkkonfiguration bei der auf allen Rechnern ein virtuelles Netzwerk-Device angelegt wird, mit der gewünschten IP nur bei dem aktuell aktiven Rechner. Fällt dieser aus erhält der Fallback-Rechner diese IP an das virtuelle Netzwerk-Device gebunden.

Für Dein Vorhaben per Shell-Skript, muss der DNS jeweils runtergefahren werden, und dann die jeweilige Zeile in der Datei für Namensauflösung und der Datei für den Reverse-Lookup abgeändert werden. Dann den DNS wieder starten. Achso, dann muss in den Dateien noch jeweils die Versionsnummer angepasst werden, damit andere DNS-Server das mitbekommen.

Ja, das ist machbar. Eine Programmiersprache wie python, reicht dafür aus. Shell-Scripting ist hässlich, weil man es eigentlich nicht mit einer Programmiersprache sondern mit einem Konglomerat von Tools, wie awk, sed, cut und "Hast-Du-Nicht-Gesehen" zu tun hat. Die wollen auch erst einmal verstanden werden.

Einführung in die Programmierung mit der BASH: http://tldp.org/LDP/abs/html/
 
OP
F

fox_river

Newbie
Hallo,
vielen Dank für deine Hilfe und vor allem für die Erklärung. Ich lese mir erstmal diese Einführung an bevor ich noch irgendwelche Frage stelle. Alles was ich will , ist einfach einen Weg die Server immer verfügbar für die Client zu stellen.

Danke noch mal, aber ich komme bestimmt hierher wieder

Bert
 
OP
F

fox_river

Newbie
Hi,
ich habe mir die andere alternative geschaut ,aber diese entsprich leider nicht was ich brauche.
d.h nur ein Script wie ich eben gesagt habe , wird meine Lösung sein. ich hoffe , einen der sich gut mit shell Script kennt, könnten mich helfen.
 

Wizzzard

Member
Was so ein Skript tun muss, habe ich ja schon beschrieben. Was stellst Du Dir den für Hilfe vor? Mit dem Skript Schreiben musst Du schon selber anfangen. Als Hinweis: Zum Abändern von Dateiinhalten nimmt man in Shell-Skripten meistens 'sed'. (Manche benutzen dafür Perl, aber dann kann man gleich alles in Perl schreiben.)
 

spoensche

Moderator
Teammitglied
fox_river schrieb:
Ich habe 3 call server (Server1, Server2, Server3) im rahmen meiner Diplomarbeit configuriert.Diese sind alle unter eine Domain (testdomain.de) zu finden.Der DNS wurde mit BIND9 configuriert.

Ich möchte ,dass der DNS-Server nur die IP-Adresse des Online Server per Abfrage zurück gibt. d.h wenn z.B. der Server 2 down ist , nur die IP1 & IP3 des noch Online Servers zürück geben. Dafür muss ich ein Shell Script schreiben , der jede Minute die Servern ping , um zu prüfen , ob alle immer noch Online sind. Wenn einen DOWN wäre, sollte der DNS dies von seine Zonedatein entfernen, damit die Client dies nicht mehr per Abfrage erhalten können.

Was bieten die Server den für Dienste an?

Wenn du ständig die Server anpingst, hast du eine hohe Netzwerklast und der bzw. die Server müssen auf unnötige Anfragen antworten, die Ressourcen verbrauchen und die Server zusätzlich belasten. Zu Stosszeiten (die Zeit, wenn die meisten Zugriffe auf den Server stattfinden) wird die Last dadurch zusätzlich erhöht, was u.U. zu Problemen führen kann.

Ich gehe jetzt einfach mal davon aus, dass damit ein Serverausfall oder eine Überlastung (Maximale Anzahl an erlaubten Verbindungen o.ä erreicht) umgehen werden soll und im Falle eines Ausfalls bzw. Überlastung der angebotene Serverdienst über die beiden anderen Server weiter erfolgen kann. In diesem Falle ist bzw. kann u.U. Load Balancing (Lastverteilung) die Lösung deines Problems.

Zum Load Balancing:

Bsp. Webserver:

Eine stark frequentierte (benutze) Webanwendung, lastet einen Server zum größten Teil aus. Um dies zu verhindern, werden zusätzliche Webserver (auf verschiedenen Maschinen) eingerichtet. Wenn jetzt einer dieser Server aufgrund der vielen Anfragen nahe der Überlastung ist (i.d.R schon viel früher), wird die Anfrage und damit der Verkehr automatisch auf die anderen Server verteilt. Der Vorteil dabei ist, dass ein einzelner Server die Anfragen nicht mehr beantworten bzw. erst nach einem längeren Zeitraum beantworten kann und im Falle eines Ausfalls die anderen Server den Betrieb und die Verfügbarkeit der Webanwendung gewährleisten.
 

Tooltime

Advanced Hacker
fox_river schrieb:
Mein Problem:

Wenn einen DOWN wäre, sollte der DNS dies von seine Zonedatein entfernen, damit die Client dies nicht mehr per Abfrage erhalten können.
Dann muss man aber auch die Cachedauer der Clients und der anderer DNS kontrollieren können. Sonst kennen die noch Tage später die IP des ausgefallenen Servers.
 
fox_river schrieb:
Mein Problem:

Ich habe 3 call server (Server1, Server2, Server3) im rahmen meiner Diplomarbeit configuriert.Diese sind alle unter eine Domain (testdomain.de) zu finden.Der DNS wurde mit BIND9 configuriert.

Ich möchte ,dass der DNS-Server nur die IP-Adresse des Online Server per Abfrage zurück gibt. d.h wenn z.B. der Server 2 down ist , nur die IP1 & IP3 des noch Online Servers zürück geben. Dafür muss ich ein Shell Script schreiben , der jede Minute die Servern ping , um zu prüfen , ob alle immer noch Online sind. Wenn einen DOWN wäre, sollte der DNS dies von seine Zonedatein entfernen, damit die Client dies nicht mehr per Abfrage erhalten können.

Ist das überhaupt machbar?

Ich kenne mich nicht mit Shell-Programmierung aus und ich würde mich auf ihre Hilfe sehr freuen.

Danke+Gruss
Bert.

Dir geht es um die Sicherstellung der Erreichbarkeit.
So wie du es dir vorstellst, funktioniert das nicht.
2 Probleme haben Schreiber vor mir schon erwähnt,
1. bind müsste nach jeder Situationsänderung neu einlesen, d.h. Neustart
2. auf den cache am dns_client hast du keinen Einfluss
3. mit Tests über icmp ist noch lange nicht gewährleistet, ob der Dienst auch verfügbar ist.

Prüfe über connects in minütlichen Abständen die auf den 3 Rechnern
zur Verfügung gestellten Dienst. Für diese Aufgabe gibt es genügend clients
im Netz, die sich in dein bash integrieren lassen.
In Ahängigkeit dieses Tests änderst du den Routingeintrag.
Diese Eintragsänderung kommt auch ohne Neustart eines Servers zum Tragen.
Ich schätze das für diese Aufgabe notwendige script auf 10 Zeilen und die Aufgabe ist erfüllt.

also
 
Oben