Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

redstyle

Replicação de mais de um mysql sem conflito de primary key

Recommended Posts

Olá pessoal, tenho estudado recentemente sobre configuração de servidores para ter alta disponibilidade.

Minha dúvida na parte de banco de dados é que quando você replica o mysql master-slave e o master cai e você

redireciona as consultas para o slave e alguém neste momento dá um insert, update ou delete no slave. Na hora

que o master subir de novo ele vai estar desatualizado.

 

Minha ideia era então fazer um ambiente de testes com replicação master-master mas para tabelas com primary-key

poderia dar conflito já que você poderia distribuir carga de acesso ao banco de forma alternada.

 

Como resolver esse problema de id caso eu tenha mais de um banco de dados mysql ou até mesmo mais de 10 sevidores

de banco de dados?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu pensei na seguinte ideia, não sei se seria ideal. Por exemplo em minha aplicação eu tenho os seguintes banco de dados:

 

server-mysql-a

server-mysql-b

server-mysql-c

 

Para cada tabela com primary-key o sistema distribuiria um range de ids para cada tabela. Então inicialmente teria para:

 

server-mysql-a - range ids para a tabela X (1 até 50.000)

server-mysql-b - range ids para a tabela X (50.001 até 100.000)

server-mysql-c - range ids para a tabela X (100.001 até 150.000)

 

o script identifica que um range de ids está acabando e pega mais um tanto de ids para uso, renovando assim seu range. Ficando por exemplo próximo range de ids do server-mysql-a de 150.001 até 200.000

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não conheço sua aplicação mas você pode pensar no seguinte cenário.

 

Master, apenas operações de insert, delete e update;

Slaves, apenas operações de consultas;

 

Se o Master parar, você interrompe suas operações, porém suas consultas continuam funcionando.

Ah sim, caso o Slave falhe você direciona sua consultas para o Master. (achei que isto seria meio lógico mas lendo o post pareceu que ficou sem sentido. rs)

Lógico que este cenário não é aceito para qualquer tipo de aplicação. É apenas uma opção.

 

---

 

Editado: Inclui mais informação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Há opção de usar a versão especifica para Clusters.

 

http://dev.mysql.com/doc/mysql-cluster-excerpt/5.1/en/index.html

 

Quick start:

Windows - http://downloads.mysql.com/tutorials/cluster/GetMySQLClusterRunningWindows.pdf

Linux - http://downloads.mysql.com/tutorials/cluster/GetMySQLClusterRunningLinux.pdf

 

Aqui há uma resposta pertinente ao assunto:

http://dev.mysql.com/doc/mysql-cluster-excerpt/5.1/en/faqs-mysql-cluster.html#qandaitem-A-1-4

 

Dica:

Quando pensar em replicação, avalie usar valores para a chave primária que não seja incrementado localmente. Pense em algo do sistema, exemplos: uniqid(), timestamp ou um hash da data/hora.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Interessante galera. Sem dúvida é um assunto bem legal. Eu fico pensando por exemplo um facebook da vida que certa vez ví que tem mais de 10 mil servidores mysql rodando (se não tiver mais). Como será que eles sincronizam tudo? o.O

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, verdade. Mas imagina o esquemão deles para replicar as coisas por lá. Eu tinha vontade de conhecer a infra de um esquema assim e ver como eles fizeram.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, tenho um sistema que roda em 8 notebooks de alguns compradores de mercadorias e este sistema de pedidos roda localmente. Disponibilizei o mesmo sistema Online (nuvem) para que os outros funcionários e gerencia tenham acesso as informações de cada comprador. A questão é que os compradores precisam do sistema local porque nem sempre tem acesso a Internet para digitar as informações que precisam cadastrar ou realizar as consultas e emitir os relatórios necessários. Aí o desafio é sincronizar o banco de dados do sistema web com os sistemas locais nos notebooks de cada comprador. Essa sincronização deverá ocorrer sob demanda (assíncrono) disparada pelo comprador quando ele tiver acesso a Internet. Essa sincronização além de assíncrona, será bilateral, ou seja, quero jogar as atualizações locais para o servidor remoto e depois trazer as alterações do servidor web para a base local de cada vendedor. Desta maneira todos terão as mesmas informações disponíveis em seus respectivos ambientes. Isso para todas as bases dos vendedores. Os sistemas rodam em MySQL e sei que ele possui uma diversidade de maneiras de replicação, mas não sei se alguma se encaixa no cenário descrito acima. Alguém aqui já teve este problema ou tem alguma dica ou solução? Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.