Seite umleiten wenn down

Also, folgende Idee…

EQUIPMENT:

Ich habe 2x Webspace (voneinander unabhängig) und 1x Domain mit Einfluss auf den DNS.

Nummer 1 gehört zu einem Gameserver und wird nicht genutzt, unterstützt aber PHP. Um Fragen vorzubeugen: Ich lege die Webseite nicht dort ab, weil ich dort keinerlei Einfluss auf den Apache usw. habe.

Nummer 2 ist ein vServer und leider ab und zu mal down.

IST-ZUSTAND:

Nummer 1 ist ungenutzt, auf Nummer 2 liegt die Webseite. Der DNS leitet die Domain auf Nummer 2 um.

PROBLEM:

Wenn Nummer 2 down ist, sollen die Besucher informiert werden. Dazu habe ich eine Info-Seite auf Nummer 1 hinterlegt. Ändere ich allerdings den DNS-Eintrag von Hand auf Nummer 1 (sofern ich überhaupt greifbar bin), dauert es Stunden, bis die Änderungen greifen.

IDEE:

Domain dauerhaft auf Nummer 1 leiten. Dort wird ein PHP-Script aufgerufen, welches prüft, ob Nummer 2 erreichbar ist. Wenn ja, Header setzen und weiterleiten, wenn nicht, Infotext anzeigen.

HAKEN:

Ich weiß wie ich einen Header setze, aber mir fehlen die Ideen, wie ich prüfen kann, ob die 2 online ist. Könnte mit einem Ping oder etwas ähnlichem gehen. Aber eventuell dauert die Antwort mal was länger, dann würde der Besucher erst mal warten müssen bevor die Seite kommt, das möchte ich nicht. Regelmäßige Prüfung mittels Cronjob geht nicht, weil Nummer 1 ja nur ein Webspace-Paket ist.

Habt Ihr Ideen, wie man sowas umsetzen kann? Eventuell nen Cronjob auf 2, der sich regelmäßig bei 1 meldet. Aber wie verarbeite ich dort die Info? Und wieviel Traffic würde das machen?

Nur so 'ne Idee: Öffne von #1 aus eine Datei auf #2. Tritt ein Fehler auf ist #2 down. Dann musst Du kein Ping auswerten.

Nur so 'ne Idee: Öffne von #1 aus eine Datei auf #2. Tritt ein
Fehler auf ist #2 down. Dann musst Du kein Ping auswerten.

Hatte ich auch schon überlegt und auch beim Googlen gefunden. Find ich aber genau so wenig exzellent gelöst wie den Ping… :smile:

Mir hat jemand was davon erzählt, daß man eine .htaccess Umleitung (Redirect) auch mit einem Timeout nutzen kann. Dazu finde ich aber nichts.

Ich persönlich könnte damit leben: es braucht 0,43 Sekunden …

Ich persönlich könnte damit leben: es braucht 0,43 Sekunden

Interessante Idee. Diese 0,43 Sekunden gelten aber schon nur für den Fall, daß der Server nicht down ist. Der Versuch eine Datei auf einem anderen Server via HTTP zu erreichen, wenn der Server nicht da ist, dauert meines Wissens etwas länger. Ich habs aber auch noch nicht spezifisch ausprobiert.
Das Ergebnis würde mich aber auch mal interessieren.

Habt Ihr Ideen, wie man sowas umsetzen kann? Eventuell nen
Cronjob auf 2, der sich regelmäßig bei 1 meldet. Aber wie
verarbeite ich dort die Info? Und wieviel Traffic würde das
machen?

vorab: prinzipiell ist die korrekte problemloesung ein funktionierender verserver - alles folgende entspr. „unseriös“ :wink:

dns umbiegen ist mist, hast du schon gesagt.

folgender ansatz:

  • der vserver muss sich regelmaessig per cronjob beim gameserver melden, letzterer merkt sich die meldung.
  • lege den dns-eintrag auf einen vhost beim gameserver.
  • dort hinterlegst du eine .htaccess, die als error-document z.b. eine proxie.php definiert. ausser jener braucht es dort keine dateien.
  • ein request kommt am gameserver an, der hat natuerlich ds dokument nicht, also ruft er das error-document: die proxie.php auf und die
  • schaut nach, ob die letzte meldung neu genug ist, wenn nicht fehler „server down“, falls doch, holt sie das dokument vom vserver und liefert es an den client aus.

der traffic ueber alle server ergibt sich dann aus 2 x traffic + meldungstraffic. wobei die einzelne meldung nur wenige bytes gross zu sein braucht.

die meldung kann man sich sparen, wenn man die proxie.php aufwaendiger mit socket-optionen implementiert, dann kann man die timeouts gezielt setzen. dann hat man serverdown auch in echtzeit abgefangen, bei der meldungsvariante laeuft man im schlimmsten fall während dem meldungsintervall ins leere.

Habt Ihr Ideen, wie man sowas umsetzen kann? Eventuell nen
Cronjob auf 2, der sich regelmäßig bei 1 meldet. Aber wie
verarbeite ich dort die Info? Und wieviel Traffic würde das
machen?

noch eine anderer loesungsansaz heisst reverseproxy der muesste dann am gameserver implementiert werden. http://httpd.apache.org/docs/1.3/mod/mod_proxy.html

mach einfach ne miniphp script das irgendwas in ne datei schreibt, lass die alle x minuten aufrufen von den anderen server ne rückgabewert wird nicht mal benötigt.
dann checkste mit „filemtime“ ob die datei in den angegeben zeitraum geändert wurde wenn ja weiterleiten wenn nicht fehlermeldung.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Ich hab es mal getestet:

Server und Datei da: 0,43 sec
Server da, Datei nicht: 0,46 sec
Server down: 60,25 sec

Dann bliebe also nur folgende Lösung:

Beschliessen, dass nach zwei Sekunden Wartezeit der Server down ist und daher:

Script auf #1 schreiben, das eine beliebige Datei von #2 versucht zu lesen. Bei Erfolg Cookie oder Session-Wert setzen. Dieses Script nach zwei Sekunden reloaden (mittels header), schauen ob Cookie/Session gesetzt, wenn nicht, auf #1 weiterleiten, sonst auf #2.

Damit hast Du eine maximale Wartezeit von 2,x Sekunden - das dürfte für den Spiele-Freak _gerade_ noch erträglich sein.

Grütze vom Hans

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

1 Like

Hallo Hans,

Ich hab es mal getestet:

Server und Datei da: 0,43 sec
Server da, Datei nicht: 0,46 sec
Server down: 60,25 sec

Da persönlich sehe ich das Problem. Die 60 Sekunden an sich sind zwar unschön aber zur Not könnte man die erwarten. Nun ist aber auf den meisten Servern eine maximale Skriptlaufzeit von max 60 Sekunden hinterlegt. Das würde in unserem Fall heißen, das Skript bricht ab und es erfolgt nichts mehr weiter.

Dann bliebe also nur folgende Lösung:

Beschliessen, dass nach zwei Sekunden Wartezeit der Server
down ist und daher:

Script auf #1 schreiben, das eine beliebige Datei von #2
versucht zu lesen. Bei Erfolg Cookie oder Session-Wert setzen.
Dieses Script nach zwei Sekunden reloaden (mittels header),
schauen ob Cookie/Session gesetzt, wenn nicht, auf #1
weiterleiten, sonst auf #2.

Damit hast Du eine maximale Wartezeit von 2,x Sekunden - das
dürfte für den Spiele-Freak _gerade_ noch erträglich sein.

Mir fällt gerade noch eine Idee ein, die aber ungetetstet ist. Wäre aber mal interessant, ob es funktionieren würde.

Im PHP-Skript zuerst mittels header auf die „Offlineseite“ mit Wartezeit von z.B. 10 Sekunden weiterleiten. Anschließend die Überprüfung durchführen, ob Die Datei verfügbar ist. Wenn ja, dann einen neuen header setzen auf die „Onlineseite“ mit einer Zeit von meinetwegen 5 Sekunden. Diese Zeit muß nur „wesentlich“ kürzer sein als die erste.
Das bequemste wäre natürlich die Kombination 3 Sekunden und 0 Sekunden, aber das Verwenden einer Headeranweisung mit 0 oder 1 Sekunden wird meines Wissens von manchen Browsern und auch von Suchmaschinen ignoriert. Da gäbe es aber bestimmt genaueres im Internet dazu zu finden.

Gruß

Thomas