2013-05-03 4 views
0

J'utilise Percona XtraDB Cluster pour équilibrer la base de données.Comment configurer PHP PDO pour se connecter à un cluster multimaître?

L'approche habituelle pour se connecter à la base de données est:

$db = new \PDO('mysql:dbname=foo;host=127.0.0.1'); 

Cependant, il y a des maîtres multiples, dont chacun peut éventuellement être mort à tout moment.

Comment établir une connexion à un cluster de base de données avec équilibrage de charge et basculement sécurisé?

+1

Le point de la grappe n'est pas si vous choisissez le maître à se connecter. C'est le travail de l'équilibreur de charge de le faire. –

Répondre

0

Ma conjecture intuitive est aussi simple que:

<?php 
$cluster = ['10.128.155.150', '10.128.155.151', '10.128.155.152']; 

shuffle($cluster); 

foreach ($cluster as $i => $ip) { 
    try { 
     $db = new \PDO('mysql:dbname=foo;host=' . $ip . ';charset=utf8'); 

     break; 
    } catch (\PDOException $e) { 
     if ($i === count($cluster)) { 
      throw $e; 
     } 
    } 
} 

Bien, je voudrais savoir s'il y a des solutions plus l'épreuve des balles développées.

Édition 2013 3 mai, 14:42. On m'a expliqué que cette approche est mauvaise simplement parce que l'utilisateur devra attendre jusqu'à l'expiration de la connexion. Le bon outil pour le travail est http://us1.php.net/manual/en/intro.mysqlnd-mux.php.

Attention cependant, que:

La preuve de concept ne prend pas en charge les requêtes unbuffered, préparé déclarations, et des requêtes asynchrones.

Édition 2013 3 mai 20:38. Fini en regardant le rythme cardiaque et HAProxy.

+4

Pour quiconque a downvoted ceci: Il est logique d'expliquer pourquoi cette approche est incorrecte ou du moins de fournir un exemple de votre méthode préférée. – Gajus

+0

Ce n'est pas une solution parfaite mais ça marchera, je suis également intéressé par une meilleure approche pour cela. – LeonanCarvalho

Questions connexes