J'ai installé deux serveurs MySQL avec réplication maître / esclave pour la base de données drupal et j'ai confirmé que les bases de données sont synchronisées et répliquées.
J'essaie maintenant de pointer Drupal vers les deux bases de données essentiellement à des fins de basculement / redondance. C'est-à-dire que si je dois redémarrer notre serveur de base de données principal, je ne veux pas que notre site tombe en panne. (La lecture seule est acceptable pendant les scénarios d'échec)
Basé sur l' article suivant . J'ai modifié settings.php
comme suit:
$databases['default']['default'] = array(
'driver' => 'mysql',
'database' => 'sdrupal',
'username' => 'drupal',
'password' => 'topsecret',
'host' => 'masterdb.ptp.local',
);
$databases['default']['slave'][] = array(
'driver' => 'mysql',
'database' => 'sdrupal',
'username' => 'drupal',
'password' => 'topsecret',
'host' => 'slavedb.ptp.local',
);
La configuration est correcte jusqu'à ce que j'arrête le maître (service mysqld stop) - quand je fais ça, mon site vomit:
PDOException: SQLSTATE [HY000] [2013] Connexion perdue au serveur MySQL lors de la «lecture du paquet de communication initial», erreur système: 111 dans drupal_is_denied () (ligne 1895 de /www/includes/bootstrap.inc). Additionnel
PDOException: SQLSTATE [HY000] [2013] Connexion perdue au serveur MySQL lors de la «lecture du paquet de communication initial», erreur système: 111 dans dblog_watchdog () (ligne 141 de /www/modules/dblog/dblog.module).
Quelle est l'astuce pour que cela fonctionne?
Pour le bénéfice des autres - du mieux que j'ai pu trouver - Drupal 7 ne semble pas avoir de capacité de haute disponibilité de base de données intégrée.
Vous pouvez configurer deux serveurs mysql dans une configuration maître / esclave, mais le mieux qu'il fera sera d'envoyer toutes les écritures au maître et toutes les lectures à l'esclave. Cela fournit une distribution de charge brute mais pas de basculement.
C'est-à-dire que si le serveur mysql maître tombe en panne, tous les paris sont désactivés - le site tombe avec un message d'erreur laid se plaignant que PHP ne peut pas atteindre la base de données master.
Traditionnellement, si je comprends bien, la façon de résoudre ce problème avec d'autres logiciels consiste à utiliser les clusters mysql ndb ou le proxy mysql - mais après avoir lu un peu - ces technologies ne semblent pas bien fonctionner avec Drupal.
Cependant, je suis tombé sur un module Drupal appelé auto-esclave ( http://drupal.org/project/autoslave ). Il n'est pas très utilisé (12 sites l'utilisent activement selon les statistiques) mais il semble pouvoir faire ce que nous voulons. Il peut être configuré de différentes manières:
Maître d'esclave
Master / Master (Haute disponibilité)
Maître / Maître / Esclave (Haute disponibilité / Haute performance)
Jusqu'à présent, nous avons réussi à configurer le premier (maître / esclave). Je vais essayer de configurer Master / Master / Slave ensuite.
J'espère que cela aide quelqu'un d'autre.
la source