Alta disponibilidade, failover e replicação do MySQL com latência


8

Estamos no processo de implementação de um novo CMS (Drupal 6.x) que roda no MySQL. Temos dois data centers - primário e secundário - com latência conhecida entre eles. Não temos certeza de qual versão do MySQL executaremos ... Comunidade ou Empresa, mas isso é um TBD. Parece que estaremos executando o mecanismo InnoDB, o sistema operacional será o RedHat EL 5.5 Os servidores principais ficarão ativos, enquanto o secundário estará em espera passiva ou em espera.

Eu gostaria de implementar replicação, alta disponibilidade e failover automático no MySQL nos dois data centers.

Após um failover nos servidores secundários, quando fazemos o failback dos servidores principais, gostaríamos de sincronizar os dados do banco de dados secundário para o banco de dados primário de forma rápida e completa, para que possamos continuar a fornecer conteúdo dos servidores principais.

Estou interessado em saber quais tecnologias / ferramentas / melhores práticas podem ser usadas para resolver / resolver esses problemas. Além disso, qualquer truque ou momento ah-ha também seria muito apreciado. Eu li sobre replicação do MySQL, clustering e em algumas ferramentas de terceiros, como Tungsten e Dolphinics, mas não tenho certeza qual é o melhor curso de ação.

Obrigado pelo seu tempo!

KM

Respostas:


3

Por uma questão de simplicidade, recomendo apenas 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 bulding, data center e rack. É ainda melhor ao usar um cabo cruzado na sub-rede 192.168.xx entre o DRBD Primário e o DRBD Secundário. Infelizmente , o DRBD tem um desempenho horrível a uma distância entre dois locais, embora o DRBD ainda possa funcionar. Não há topologias de rede disponíveis para fornecer o desempenho satisfatório de DRBD necessário entre dois datacenters.

Depois de configurar a replicação circular do MySQL entre os dois servidores de banco de dados em dois data centers 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 de log binário no MySQL Replication Setup) e E / S de disco (DRBD).

Uma alternativa que você pode desejar para uma melhor redundância é a seguinte, por exemplo:

Configurar um par DRBD nos dois locais
Par DRBD no site nº 1 com VIP 111.111.111.111
Par DRBD no site nº 2 com VIP 222.222.222.222

Configure a replicação circular do MySQL entre os servidores principais DRBD sob estas condições:
Para o site 1, use 222.222.222.222 como Master_Host no MySQL.
Para o site 2, use 111.111.111.111 como Master_Host no MySQL.

Apesar de apresentar um nível de complexidade, agora você tem dois níveis de redundância: DRBD em cada site e Replicação Circular do MySQL entre sites. Você tem os benefícios adicionais de executar backups via mysqldump no DRBD Primary do servidor em espera quente.

Quanto ao failover, o DRBD fornece failover automático em qualquer site.

Somente no caso de um data center ser totalmente indisponível, você utilizaria o DB VIP no site em espera.

ATUALIZAR

Eu fiz duas vezes e notei que você está usando o Drupal6. Estou feliz que você esteja convertendo todas as tabelas drupal para o InnoDB. Isso removerá qualquer chance de atualizações da tabela MyISAM, fazendo com que os bloqueios congelem as conexões do banco de dados que estão simplesmente lendo tabelas MyISAM. Qualquer atualização DML (INSERTs, UPDATEs, DELETEs) em uma tabela MyISAM SEMPRE FECHARÁ UM BLOQUEIO DE TABELA COMPLETA !!! O uso do InnoDB apresentará 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 está no InnoDB, porque a recuperação de falhas será consistente entre o par DRBD. Por outro lado, o DRBD com MyISAM não compra nada porque uma tabela MyISAM com falha no DRBD Primary é simplesmente duplicada no DRBD Secondary 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 DRBD.
http://dev.mysql.com/doc/refman/5.1/en/ha-drbd.html

Configurar um par de servidores DB DB
Startup DRBD
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 Primary do DataCenter # 1 e o DRBD Primary do DataCenter # 2

Cada Primário DRBD estará executando o MySQL e atuará
como Mestre e Escravo um do outro

Eu configurei para topologias de clientes como essa e considero bastante estável.


Obrigado @RolandoMySQLDBA. Seu ponto de vista sobre o uso de um VIP com balanceamento de carga para interrupções no datacenter faz sentido. Então teríamos um Master-Slave em cada datacenter, certo? No caso de failback, qual você acha que é a melhor maneira de garantir que os bancos de dados primários estejam atualizados? Além disso, estive analisando a replicação circular e parece que ela se baseia no cluster do MySQL? com NDB? Não acho que o Drupal 6 funcione bem com o NDB ( drupal.org/node/391130 ). Mais uma vez obrigado pelo seu tempo!
KM.

Eu atualizei minha resposta !!! Entre eu nunca mencionei NDB. A replicação circular do MySQL é apenas implementada bidirecionalmente pelo Master-Slave.
RolandoMySQLDBA 30/03

Obrigado pelo esclarecimento. Algumas das referências de replicação circular MySQL mencionado NDB então eu queria verifique (-: BTW, Como automatizado você pode começar com failover usando essas topologias?
KM.

O DRBD foi projetado para facilitar o failover automático usando o Linux HeartBeat ou o ucarp ( ucarp.org/project/ucarp ). Minha empresa, LogicWorks, é uma loja da ucarp. O ucarp permite que duas máquinas compartilhem um endereço IP virtual (VIP). O DRBD Master teria o VIP com o MySQL em execução. O DRBD Secundário teria o ucarp em execução e esperaria uma proporção de tempo morto para acionar o failover automático. Os scripts para cima e para baixo para o ucarp assumir o DB VIP devem incluir a montagem do disco DRBD, tornando-o Primário e iniciando o MySQL. O script down iria parar o MySQL desmontar DRBD, ir para o secundário e matar o VIP.
RolandoMySQLDBA 31/03
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.