Code pour connection a 2 base de données (Replication)

Eléphant du PHP | 108 Messages

03 juin 2009, 10:29

Bonjour,

Problematique:
J'ai 2 serveurs (A et B), le A est repliqué sur le B
Le A est le serveur principale de base de données et le B une "sauvegarde".

Mais en cas que le serveur A et en rade, je dois changer ma connexion directement sur le B qui devient le serveur principal.

Ensuite après une intervention, le B sera réplique sur le A

et si le B est en rade je passe sur le A qui devient a nouveau le serveur principal.

Ma question :
Je ne vois pas comment gerer une telle connexion comment faire mon script de connexion.

Pouvez-vous m'aider?

Merci

ViPHP
ViPHP | 2287 Messages

03 juin 2009, 12:38

Bonjour,

Cela ne semble pourtant pas difficile : d'abord tu essayes de te connecter à une base de manière classique, et si ça rate, alors tu essayes sur l'autre...

Où bloques-tu au juste ?
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphant du PHP | 108 Messages

03 juin 2009, 14:51

Je bloque sur une fois passe sur la deuxieme je dois rester sur la 2eme meme si le serveur repart
et que le premier serveur devient le serveur de secours et ainsi de suite


car oui, je peux faire une connexion sur la premiere base si elle echoue je passe sur la 2eme mais une fois sur la 2eme je ne peux revenir sur la 1ere qu'en cas de defaillance du second qui ete devenu serveur principal...

Car j'avais pense :

si la connexion du serveur A echoue je passe sur le serveur B et je cree un petit fichier vide pour dire que je suis passe sur le second et a chaque connexion je teste la presence du fichier

si fichier pas present et connexion possible sur serveur A--> connexion serveur A
si fichier pas present et connexion impossible sur serveur A --> connexion serveur B + creation du fichier
si fichier present et connexion possible sur serveur B--> connexion serveur B
si fichier present et connexion impossible sur serveur B--> connexion serveur A + suppression du fichier

ViPHP
ViPHP | 5924 Messages

04 juin 2009, 01:43

Car j'avais pense :

si la connexion du serveur A echoue je passe sur le serveur B et je cree un petit fichier vide pour dire que je suis passe sur le second et a chaque connexion je teste la presence du fichier

si fichier pas present et connexion possible sur serveur A--> connexion serveur A
si fichier pas present et connexion impossible sur serveur A --> connexion serveur B + creation du fichier
si fichier present et connexion possible sur serveur B--> connexion serveur B
si fichier present et connexion impossible sur serveur B--> connexion serveur A + suppression du fichier
Euh, par exemple oui :)

Eléphant du PHP | 108 Messages

04 juin 2009, 09:09

Ok, je voulais savoir si il y avait pas un code plus propre pour faire ca que de creer un fichier et tester sa presence

Je vais faire comme ca alors.

Merci

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

ViPHP
ViPHP | 5924 Messages

04 juin 2009, 23:46

Même s'il y a plus propre, le principe est le même…

Eléphant du PHP | 108 Messages

05 juin 2009, 06:52

si il y a plus propre, je veux bien qu'on me donne une autre solution :D

Merci

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

ViPHP
ViPHP | 1136 Messages

05 juin 2009, 08:01

Slt ,

La réplication ne fonctionne que dans un seul sens me semble t'il !

serveur A(maitre) et serveur B(esclave)

Les données sont répliqués automatiquement ( une conf mysql specifique ) dans le sens maitre esclave.

Si pour une raison X ou Y tu écris des données sur le serveur B , la réplication est cassé ...

Pour bien faire , il te faut plutôt regarder du coté des cluster ( demande au minimum 3 machines ).

Eléphant du PHP | 108 Messages

05 juin 2009, 08:20

oui je connais le cluster mais je ne peux faire qu'une replication
La replication dans l'autre sens necessitera une intervention manuelle en faisant la conf mysql dans l'autre sens apres que le serveur A soit tombe.

Eléphanteau du PHP | 14 Messages

05 juin 2009, 09:27

Tu peux éventuellement faire un fichier de conf (en XML par exemple) qui contiendrait

<serveurPrincipal>A</serveurPrincipal>
<serveurSecondaire>B</serveurSecondaire>

Ton script de connexion à la base va chercher dans serveurPrincipal. Si il ne répond pas, ton script va chercher dans serveurSecondaire et au même moment tu lances un autre bout de code qui inverse serveurPrincipal et serveurSecondaire.