Estamos em processo de implementação de um novo CMS (Drupal 6.x) que roda em MySQL. Temos dois datacenters -- primário e secundário -- com latência conhecida entre eles. Não temos certeza de qual versão do MySQL executaremos... Community ou Enterprise, mas isso é um TBD. Parece que estaremos executando o mecanismo InnoDB, o sistema operacional será RedHat EL 5.5. Os servidores primários estarão ativos, enquanto os secundários serão passivos ou hot stand-bys.
Gostaria de implementar replicação, alta disponibilidade e failover automatizado no MySQL nos dois datacenters.
Após um failover para os servidores secundários, quando fizermos o failback para os servidores primários, gostaríamos de ter os dados sincronizados do banco de dados secundário para o banco de dados primário de forma rápida e completa para que possamos continuar a servir o conteúdo dos servidores primários.
Estou interessado em saber quais tecnologias/ferramentas/melhores práticas podem ser usadas para resolver/resolver esses problemas. Além disso, quaisquer pegadinhas ou momentos ah-ha também seriam muito apreciados. Eu li sobre a replicação do MySQL, clustering e algumas ferramentas de terceiros, como Tungsten e Dolphinics, mas não tenho certeza de qual é o melhor curso de ação.
Obrigado pelo seu tempo!
km
Para simplificar, recomendo apenas a replicação circular do MySQL. Aqui está o porquê:
Existem muitas tecnologias e topologias que são muito superiores à Replicação Circular do MySQL. Meu favorito, sem dúvida, é o DRBD (Distributed Replicated Block Device) . No entanto, o DRBD funciona muito bem quando o par de servidores está no mesmo edifício, centro de dados e rack. É ainda melhor ao usar um cabo crossover na sub-rede 192.168.xx entre o DRBD Primário e o DRBD Secundário. Infelizmente , o DRBD tem um desempenho horrível à distância entre dois locais, embora o DRBD ainda possa funcionar. Não há topologias de rede disponíveis para fornecer o desempenho DRBD satisfatório necessário entre dois datacenters.
Depois de configurar a replicação circular do MySQL entre os dois servidores de banco de dados em dois datacenters diferentes, o único ajuste necessário é para a rede. Em essência, o desempenho da replicação é uma função das configurações de rede (velocidade/latência da transmissão do log binário no MySQL Replication Setup) e E/S do disco (DRBD).
Uma alternativa que você pode querer para melhor redundância é a seguinte, a título de exemplo:
Configure um Par DRBD em ambos os locais
Par DRBD no Site #1 com VIP 111.111.111.111
Par DRBD no Site #2 com VIP 222.222.222.222
Configure a replicação circular do MySQL entre os servidores primários do DRBD sob estas condições:
Para o site nº 1, use 222.222.222.222 como Master_Host no MySQL
Para o site nº 2, use 111.111.111.111 como o Master_Host no MySQL
Apesar de apresentar um nível de complexidade, agora você tem dois níveis de redundância: DRBD dentro de cada site e MySQL Circular Replication entre sites. Você tem os benefícios adicionais de executar backups via mysqldump no DRBD Primário do servidor hot standby.
Quanto ao failover, o DRBD fornece failover automático em qualquer site.
Somente no caso de um datacenter estar totalmente indisponível, você usaria o DB VIP no site de espera ativa.
ATUALIZAR
Acabei de olhar duas vezes e notei que você está usando o Drupal6. Fico feliz que você esteja convertendo todas as tabelas do Drupal em InnoDB. Isso removerá qualquer chance de atualizações de tabela MyISAM causando bloqueios de tabela para congelar conexões de banco de dados que estão simplesmente lendo tabelas MyISAM. Qualquer atualização DML (INSERTs, UPDATEs, DELETEs) em uma tabela MyISAM SEMPRE FAZER UM FULL TABLE LOCK !!! O uso do InnoDB introduzirá o bloqueio no nível da linha, o que elimina os bloqueios completos da tabela.
Além disso, o DRBD se torna seu amigo quando tudo é InnoDB porque a recuperação de falhas será consistente entre o par DRBD. Por outro lado, DRBD com MyISAM não compra nada porque uma tabela MyISAM com falha no DRBD Primário é simplesmente duplicada para o Secundário DRBD como, você adivinhou , uma tabela MyISAM com falha.
ATUALIZAÇÃO #2
Você deve usar dois níveis de redundância
Nível 1: Em cada centro de banco de dados, use o DRBD.
http://dev.mysql.com/doc/refman/5.1/en/ha-drbd.html
Configure um par de servidores de banco de dados
Startup DRBD
Startup MySQL no DRBD Primary
Isso cria dados redundantes no nível do disco.
Nível 2: Você deve configurar a Replicação Circular do MySQL entre
o DRBD Primário do DataCenter#1 e o DRBD Primário do DataCenter#2
Cada DRBD Primário executará o MySQL e atuará
como Mestre e Escravo entre si
Tenho configuração para topologias de clientes como esta e considero bastante estável.