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());
}
?>

add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top