Failover
Par défaut, le plugin ne tente pas de failover si la connexion vers un hôte échoue. Ce comportement évite des erreurs en relation avec le statut de la connexion. Il est recommandé de gérer manuellement les erreurs de connexion d'une façon similaire à un échec d'une transaction. Vous devez capturer l'erreur, re-construire le statut de la connexion, et exécuter votre requête comme ci-dessous.
Si le statut de connexion n'est pas important pour vous, vous pouvez activer le failover automatique et silencieux. Suivant la configuration, le failover automatique et silencieux va soit tenter, en cas d'échec de basculer vers le maître au lieu d'émettre une erreur, soit tenter une connexion avec un autre esclave, suivant si la requête l'autorise, avant de tenter une connexion vers le maître. En raison du fait que le failover automatique n'est pas encore totalement robuste, ce sujet n'est pas abordé dans le démarrage rapide. Au lieu de cela, les détails sont fournis dans la section de concepts ci-dessous. is not fool-proof, it is not discussed in the quickstart. Instead, details are given in the concepts section below.
Exemple #1 Failover manuel, optionnellement, automatique
{ "myapp": { "master": { "master_0": { "host": "localhost", "socket": "\/tmp\/mysql.sock" } }, "slave": { "slave_0": { "host": "simulate_slave_failure", "port": "0" }, "slave_1": { "host": "127.0.0.1", "port": 3311 } }, "filters": { "roundrobin": [] } } }
Exemple #2 Failover manuel
<?php
$mysqli = new mysqli("myapp", "username", "password", "database");
if (!$mysqli) {
/* Bien évidemment, votre gestionnaire d'erreur est meilleur... */
die(sprintf("[%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()));
}
$sql = "SELECT 1 FROM DUAL";
/* Gestionnaire d'erreur tel qu'il doit être suivant le plugin */
if (!($res = $link->query($sql))) {
/* spécifique au plugin : vérification d'une erreur de connexion */
switch ($link->errno) {
case 2002:
case 2003:
case 2005:
printf("Erreur de connexion - Tentative sur le prochain esclave !\n");
/* Le répartiteur de charge va prendre le prochain esclave */
$res = $link->query($sql);
break;
default:
/* Aucune erreur de connexion, failover ne va probablement pas être utile */
die(sprintf("Erreur SQL : [%d] %s", $link->errno, $link->error));
break;
}
}
if ($res) {
var_dump($res->fetch_assoc());
}
?>
Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-mysqlnd-ms.quickstart.failover.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.