mysql master master de replicação

2
  1. recomenda-se fazer o cluster mysql master-slave ou master-master cluster?
  2. eu preciso de uma ferramenta de terceiros para fazer um cluster mysql master-master para o IP virtual? (Eu pensei em usar o batimento cardíaco, mas não tenho certeza se é realmente necessário).
  3. Eu preciso de alguma documentação sobre como fazer master-master se alguém tiver.

Obrigado Elad.

    
por edotan 27.09.2011 / 17:29

3 respostas

3

Eu recomendo prontamente Master / Master sobre Master / Slave por várias razões

  • Você tem dois servidores de banco de dados configurados para serem mestres com os logs binários mais recentes
  • Failover manual para o Passive Master é apenas um 'add add ip' de distância.
  • Você pode configurar um IP para um mestre ativo (usando ucarp )
  • Você pode isolar as gravações de banco de dados em uma máquina (o que tiver o DBVIP)
  • O Passive Master (que não possui o DBVIP) pode estar disponível para leituras, mysqldumps, XtraBackups, tar / gzips
  • Reconfigurar um Escravo para ser um Novo Mestre e o Velho Mestre para um Novo Escravo não é nem rápido, nem trivial, nem parece, especialmente quando você precisa recuperar rapidamente um Servidor de BD.

Existem apenas dois (2) inconvenientes na utilização do Master / Master

  • Você não pode executar nenhum failover se o Passive Master for > 0 segundos atrás. O failover muito cedo apresenta um aplicativo com dados que estão desatualizados em segundos e a possibilidade de chaves duplicadas pode fazer com que ele pareça feio tentando gravar novos dados com lacunas nos dados. Para ambientes com pouca gravação, você pode conviver com esse cenário, pois a replicação pode ser alcançada rapidamente antes do failover.
  • Os caches (MyISAM Key Cache e InnoDB Buffer Pool) para ambos os Masters não são os mesmos. O failover para o Passive Master pode causar um pico de carga inicial do servidor com leituras e gravações para obter caches de banco de dados com os dados corretos. Você pode superar isso com mk-slave-prefetch , em breve ser renomeado pt-slave-prefetch (à la Percona Toolkit)

O que parece estar em uma área cinza é executar gravações de banco de dados em ambos os Masters. Embora as opções auto_increment_increment e auto_increment_offset foram inventados para mitigar valores de auto_increment em dois servidores diferentes para a mesma tabela, um uso verdadeiramente seguro de Master / Master permitindo DB Writes em ambos os servidores se enquadra em dois cenários:

  1. Todas as tabelas que usam PRIMARY KEYS não se baseiam no incremento automático
  2. Escrevendo para bancos de dados mutuamente exclusivos nos diferentes mestres. Em outras palavras, se você restringir as gravações do banco de dados ao esquema1 em um mestre e nunca executar gravações do banco de dados no esquema1 no outro mestre.

ATUALIZAÇÃO 2012-10-04 11:42 EDT

O cluster Percona XtraDB (PXC) surgiu como um bom Banco de Dados MultiMaster Síncrono. Isso é ótimo para bancos de dados multilocatários.

Você terá que lembrar o seguinte sobre o PXC

  • Dimensionando requisitos de memória e configuração de disco para InnoDB
  • lembrando que o DDL / DML no MyISAM não é replicado nas Bibliotecas do Replicador do Conjunto de Gravações do Galera. Como os comandos GRANT são neutros para o mecanismo de armazenamento, a tabela MyISAM no esquema mysql é tratada sem problemas. Qualquer DML contra o mysql.user não é replicada.
  • O nó mais fraco torna todo o Cluster lento, especialmente no horário do COMMIT. Portanto, certifique-se de que todos os nós tenham configurações idênticas de hardware / software / OS / VM / RAM / Rede.
  • Você pode executar gravações moderadas com balanceamento de carga em todos os nós. Quanto mais nó no cluster. quanto mais lento o COMMITs.
  • O PXC é diferente do cluster do MySQL, pois todos os nós contêm os mesmos dados

Quando se trata de failover, qualquer nó pode ser um mestre. Você espalha leituras no cluster. Para bancos de dados de multilocatários, você pode distribuir gravações (INSERTs, UPDATEs, DELETEs) sem preocupações de deadlocking. Os deadlocks ainda são possíveis quando as gravações no mesmo banco de dados são distribuídas pelo Cluster. Due diligence na codificação do seu aplicativo para evitar deadlocking.

    
por 27.09.2011 / 21:28
2

Se possível, você deseja evitar configurações mestre-mestre. O que geralmente é melhor é ter um mestre e vários escravos e, se o mestre falhar, promover um escravo para ser o novo mestre. Isso não é possível se você tiver uma alta carga de gravação. Então o multi-mestre pode fazer sentido. Ou você pode olhar para sharding.

    
por 27.09.2011 / 17:58
0

Uma consideração importante é o quão próximo do tempo real você precisa que as atualizações sejam refletidas em todo o cluster.

Se fosse eu, eu me inclinaria para a replicação master / master com afinidade com o servidor - assim, os usuários terão a garantia de ver as atualizações imediatamente (exceto durante uma interrupção parcial).

do I need a 3rd party tool in order to do a master-master mysql cluster for the virtual IP?

Você precisa de algum conhecimento para lidar com a promoção de um escravo em uma replicação mestre / escravo, caso o mestre falhe - tenha um google, há muitos exemplos.

Como prev, para fornecer balanceamento de carga e afinidade com o servidor, recomendo executar mysqlproxy (e, por exemplo, distribuir a carga de trabalho com base no ID da sessão ou no IP do cliente). Dependendo de quantos servidores da Web você estiver executando, você provavelmente executará uma instância do mysqlproxy em cada um deles. A implementação da afinidade do servidor não está obviamente documentada nas páginas web do mysqlproxy - mas você só precisa aprender algumas lua!

Há um pequeno tutorial para configurar a replicação aqui .

    
por 27.09.2011 / 18:29