Como faço para espelhar um banco de dados MySQL?

3

Estou executando dois servidores de carga balanceada para um site e gostaria que os bancos de dados fossem sincronizados. As consultas podem ser executadas em qualquer um dos dois servidores, porque ambos são sites de produção, portanto, a replicação não pode funcionar apenas de uma maneira.

Ele não precisa estar em tempo real, apenas bastante preciso, para que as pessoas não percebam a diferença quando mudam para um servidor diferente.

    
por Matt 14.06.2010 / 10:38

4 respostas

2

Como outras pessoas mencionaram, o que você está falando é replicação multimestre. Existem várias ferramentas de código aberto disponíveis, como Maatkit ou MMM para ajudar com a replicação multi-mestre, mas mesmo com estes você ainda está pedindo por um mundo de mágoa.

Gostaria de ter certeza de que você realmente precisa que suas gravações aconteçam de forma síncrona (ou seja, instantaneamente). Se você puder ter um par de segundos a um minuto de defasagem entre quando um usuário realiza uma ação no site e os dados são inseridos ou atualizados nos bancos de dados, eu consideraria a configuração de algum tipo de processo de log off-line. Por exemplo, onde quer que você tenha a instrução insert / update, coloque algo que grava em um arquivo - ou em um banco de dados de memória se você não conseguir gravar em disco - e tenha algum processo / daemon em sua web cabeça (s), lê o arquivo de log e grava os dados apropriados em um único mestre; que então o replica para a outra máquina com carga balanceada.

Tome isso pelo que vale a pena, embora b / c Eu nunca precisei ativamente manter a replicação multimestre.

    
por 14.06.2010 / 13:27
1

Este link é sobre replicação master-master, também conhecida como réplica circular. É simples de aplicar e funciona bem se você não tiver bancos de dados muito pesados.

    
por 14.06.2010 / 10:55
1

Eu também tentaria não usar a replicação circular.

Se possível, use uma replicação padrão, distribua consultas somente leitura nos dois nós e consultas de leitura / gravação no mestre. Funciona para a Wikipédia, poderia trabalhar para você:)

Outra abordagem poderia ser configurar uma configuração ativa-passiva de dois nós (drbd e algum clustering). Mais fácil no aplicativo (ele apenas vê um único servidor mysql para se conectar), precisa de alguma atenção no lado do HA se você não estiver acostumado com esse tipo de coisa. Você não recebe o bônus de desempenho de ter dois servidores db diferentes.

Para fazer uma escolha, você precisa decidir se seu principal interesse é diminuir o tempo de inatividade (replicação padrão ou cluster ativo / passivo) ou obter melhor desempenho (replicação padrão, replicação circular, etc ...) e quais são suas restrições você modifica o aplicativo, e quanto você pode modificá-lo, o desempenho necessário, o orçamento permitido, etc ...)

Para obter um melhor desempenho do seu hardware (ou apenas para compensar a falta de desempenho se você for do modo ativo / passivo), não se esqueça do memcached e de coisas semelhantes.

    
por 14.06.2010 / 12:44
0

Por que não simplificar um pouco as coisas? Faça com que ambos os frontends usem o mesmo backend e, em seguida, use algo como DRBD & Heartbeat para garantir que seu banco de dados não se torne um único ponto de falha. A replicação mestra dupla quase sempre termina em lágrimas.

    
por 14.06.2010 / 10:43