He configurado dos servidores MySQL con replicación Master / Slave para la base de datos drupal y he confirmado que las bases de datos están sincronizadas y replicadas.
Ahora estoy tratando de apuntar drupal a ambas bases de datos básicamente para fines de failover / redundancia. Es decir, si necesito reiniciar nuestro servidor de base de datos principal, no quiero que nuestro sitio se caiga. (Ir a solo lectura es aceptable durante situaciones de falla)
Basado en el siguiente artículo . He modificado de la settings.php
siguiente manera:
$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 configuración está bien hasta que apago el master (service mysqld stop) - cuando hago eso, mi sitio vomita:
PDOException: SQLSTATE [HY000] [2013] Se perdió la conexión con el servidor MySQL en 'lectura del paquete de comunicación inicial', error del sistema: 111 en drupal_is_denied () (línea 1895 de /www/includes/bootstrap.inc). Adicional
PDOException: SQLSTATE [HY000] [2013] Se perdió la conexión con el servidor MySQL en 'lectura del paquete de comunicación inicial', error del sistema: 111 en dblog_watchdog () (línea 141 de /www/modules/dblog/dblog.module).
¿Cuál es el truco para hacer que esto funcione?
fuente
Para el beneficio de otros, lo mejor que he podido encontrar, Drupal 7 no parece tener ninguna capacidad de alta disponibilidad de base de datos integrada.
Puede configurar dos servidores mysql en una configuración maestro / esclavo, pero lo mejor que puede hacer es enviar todas las escrituras al maestro y todas las lecturas al esclavo. Eso proporciona una distribución de carga bruta pero no una conmutación por error.
Es decir, si el servidor mysql maestro deja de funcionar, todas las apuestas están apagadas: el sitio deja de funcionar con un mensaje de error feo quejándose de que PHP no puede llegar a la base de datos maestra.
Tradicionalmente, según tengo entendido, la forma de abordar esto con otro software es usar mysql ndb clusters o mysql proxy, pero después de leer un poco, estas tecnologías aparentemente no funcionan bien con Drupal.
Sin embargo, me topé con un módulo de Drupal llamado auto-esclavo ( http://drupal.org/project/autoslave ). No se usa ampliamente (hay 12 sitios que lo usan activamente de acuerdo con las estadísticas), pero parece ser capaz de hacer lo que queremos. Se puede configurar de varias maneras:
Maestro-esclavo
Master / Master (Alta disponibilidad)
Maestro / Maestro / Esclavo (Alta disponibilidad / Alto rendimiento)
Hasta ahora hemos configurado el primer (Maestro / Esclavo) con éxito. Voy a intentar configurar Master / Master / Slave a continuación.
Esperemos que esto ayude a alguien más.
fuente