Crash d'un serveur

Petit nouveau ! | 5 Messages

19 sept. 2007, 12:14

Bonjour,

Je gère actuellement un site web qui est hébergé sur un serveur Apache. J'ai également un autre serveur pour la base de données Mysql. Ma question est assez simple:

Comment peut-on détecter un crash d'un serveur ? grâce à un .htaccess ?

Mon but est de faire une redirection sur le serveur de la base de données (dont les scripts du site ont été copiés) lorsque le serveur, qui contient le site, plante; ceci afin que les utilisateurs aient toujours accès à celui-ci.

Je vous remercie d'avance pour l'information.

Bonne journée.

ViPHP
fab
ViPHP | 2657 Messages

19 sept. 2007, 14:02

Je crois qu'on ne peut pas, si le serveur est down rien ne pourra sortir du serveur :)

il faut donc un serveur intermédiaire qui pour chaque connexion regarde si le serveur principal est up sinon il renvoit sur le secondaire
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Petit nouveau ! | 5 Messages

19 sept. 2007, 14:26

Je vous remercie pour votre réponse aussi rapide.

Le problème c'est que je ne peux pas ajouter un autre serveur.

Je pensais que je pouvais faire ceci dans un .htaccess situé à la racine du site :

Code : Tout sélectionner

ErrorDocument 500 http://ip_serveur_mysql/index.php
Je ne sais pas si cela va réaliser ce que je demande :(

Merci pour tout.

Eléphanteau du PHP | 18 Messages

19 sept. 2007, 14:31

pour que ta redirection soit effective, il faudrait que ton serveur marche, et que ton Apache soit lancé... ce que tu cherches à faire s'appelle un système de "failover" (= gestion de pannes)

à priori la méthode la plus simple est un 3e serveur, qui vérifie que l'apache marche avant de lui envoyer les données, ou qui les reroute sur le serveur "MySQL" en cas de soucis.

Petit nouveau ! | 5 Messages

19 sept. 2007, 14:52

Je vois que je ne peux pas réaliser mon projet sans 3ème serveur.

Pourriez-vous m'expliquer comment faire pour qu'un serveur vérifie que Apache fonctionne correctement ? Où une documentation qui m'aiguillerai ?

Je ne vois pas trop comment réaliser tout ceci.

Merci d'avance.

Eléphanteau du PHP | 18 Messages

19 sept. 2007, 15:03

hmm, je suis pas du tout expert dans ce domaine, mais en gros, voici le concept:

tu peux mettre un script (admettons "ok.php") à la racine de ton site, qui contient le texte "ok"!
tu fais pointer les dns de ton domaine (www) sur le serveur "de controle". tu y installes un Apache, qui appelle, à chaque requête, le fichier ok.php, via:
$test = file_get_contents("http://ip_de_ton_serveur/ok.php");
if ($test == 'ok') {
   // le serveur marche, on lui envoie la requete
   header('Location:www1.tonsite.com');
} else {
   // le serveur ne marche pas, on envoie la requete ailleurs
    header('Location:www2.tonsite.com');
}

avec www1 = ton apache actuel, www2 = ton apache "de secours"

/!\ attention, je ne te dis pas de faire comme ça, c'est la solution la plus "simple" qui me vienne à l'esprit...

ViPHP
fab
ViPHP | 2657 Messages

19 sept. 2007, 15:39

Si le apache actuel est down il risque pas de répondre :p
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Petit nouveau ! | 5 Messages

19 sept. 2007, 15:58

Donc même si je fais ce que d-sam m'a répondu, je n'aurais pas de redirection sur mon serveur qui contient la base de données ?

Eléphanteau du PHP | 18 Messages

19 sept. 2007, 16:04

Si le apache actuel est down il risque pas de répondre :p
en effet, c'est pour ca qu'il vaudrait mieux tester le ok.php avec une cron (ex: toutes les minutes), stocker le résultat, et s'y référer à chaque requête. ça éviterait les soucis de timeout.

après, si tu prends un 3e serveur, il doit exister des solutions de "failover" assez sûres/simples à mettre en place (rayer la mention inutile)
mais je ne saurais pas t'aider dans cette voie... désolé!

ViPHP
fab
ViPHP | 2657 Messages

19 sept. 2007, 16:18

Donc même si je fais ce que d-sam m'a répondu, je n'aurais pas de redirection sur mon serveur qui contient la base de données ?
En tout cas pas avec apache ou php et après ça dépasse mes compétences désolé
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Petit nouveau ! | 5 Messages

19 sept. 2007, 16:27

Très bien, je vais voir ce que je peux faire, je vous remercie pour ces informations, ça me permet d'avancé un peu même si je ne vois pas trop comment faire (je suis plus orienté dans la programmation :D).

Bonne fin de journée à vous.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

19 sept. 2007, 16:35

Si tu passes par un 3ème serveur, il est possible de passer par un load balancer et de le configurer pour qu'il redirige tout sur le serveur 1 tant qu'il est disponible et qu'il passe tout au serveur 2 sinon.

Il est même possible d'acheter un load balancer matériel, mais c'est franchement pour d'autres utilisation. Là où ça devient utile, c'est quand tu veux réellement répartir ta charge sur différents serveurs.

Définition du load balancing :
http://www.commentcamarche.net/surete-f ... harge.php3
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 10 Messages

19 sept. 2007, 20:50

Si tu veux te protéger d'un plantage d'apache, tu peut faire une cron qui vérifie, par exemple, toutes les minutes si Apache est dispo.
Si apache ne répond pas, le script n'as qu'a le relancer et t'envoyer un mail pour signaler le problème.

Si tu pense que c'est le serveur matériel qui risque de planté (j'entend par la le serveur complet, avec reboot obligatoire), peut être qu'il est possible de régler un second DNS en cas d'échec. Malheuresement je n'en connais pas plus que ça :/