Configurei dois servidores MySQL com replicação Master / Slave para o banco de dados drupal e confirmei que os bancos de dados estão sincronizados e replicados.
Agora estou tentando apontar drupal para os dois bancos de dados basicamente para fins de failover / redundância. Ou seja, se eu precisar reiniciar nosso servidor de banco de dados primário, não quero que nosso site seja desativado. (Somente leitura é aceitável durante cenários de falha)
Com base no seguinte artigo . Eu modifiquei da settings.php
seguinte maneira:
$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',
);
A configuração está boa até eu desligar o master (service mysqld stop) - quando faço isso, meu site vomita:
PDOException: SQLSTATE [HY000] [2013] Perdeu a conexão com o servidor MySQL ao 'ler o pacote de comunicação inicial', erro do sistema: 111 em drupal_is_denied () (linha 1895 de /www/includes/bootstrap.inc). Adicional
PDOException: SQLSTATE [HY000] [2013] Conexão perdida com o servidor MySQL ao 'ler o pacote de comunicação inicial', erro do sistema: 111 em dblog_watchdog () (linha 141 de /www/modules/dblog/dblog.module).
Qual é o truque para fazer isso funcionar?
Para o benefício de outras pessoas - o melhor que pude descobrir - pronto, o Drupal 7 não parece ter nenhum recurso de alta disponibilidade do banco de dados embutido.
Você pode configurar dois servidores mysql em uma configuração mestre / escravo, mas o melhor a fazer é enviar todas as gravações para o mestre e todas as leituras para o escravo. Isso fornece distribuição de carga bruta, mas não failover.
Ou seja, se o servidor master do mysql cair, todas as apostas serão desativadas - o site será encerrado com uma mensagem de erro feia, reclamando que o PHP não pode acessar o banco de dados mestre.
Tradicionalmente, pelo que entendi, a maneira de lidar com isso com outro software é usar clusters mysql ndb ou proxy mysql - mas depois de ler um pouco - essas tecnologias aparentemente não funcionam bem com o Drupal.
No entanto, me deparei com um módulo Drupal chamado auto-slave ( http://drupal.org/project/autoslave ). Não é amplamente usado (existem 12 sites que o usam ativamente de acordo com as estatísticas), mas parece capaz de fazer o que queremos. Pode ser configurado de várias maneiras:
Senhor de escravos
Mestre / Mestre (alta disponibilidade)
Mestre / Mestre / Escravo (Alta disponibilidade / Alto desempenho)
Até agora, configuramos o primeiro (Mestre / Escravo) com êxito. Vou tentar configurar o Mestre / Mestre / Escravo a seguir.
Espero que isso ajude alguém.
fonte