redstyle 7 Denunciar post Postado Agosto 15, 2012 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
mangakah 217 Denunciar post Postado Agosto 15, 2012 Procure por "multi-master replication" ou "master-master replication". Wikipedia: http://en.wikipedia.org/wiki/Multi-master_replication Mas como diz o artigo, isso é difícil de implementar e não funciona apropriadamente. Compartilhar este post Link para o post Compartilhar em outros sites
redstyle 7 Denunciar post Postado Agosto 15, 2012 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
Prog 183 Denunciar post Postado Agosto 15, 2012 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
mangakah 217 Denunciar post Postado Agosto 15, 2012 Se você for usar isso, não poderá usar AUTO_INCREMENT e as chances de conflito, mesmo dentro de um único servidor, serão maiores. (em resposta ao post #3) Achei uma página sobre replicação na documentação do MySQL: http://dev.mysql.com/doc/refman/5.5/en/replication.html Compartilhar este post Link para o post Compartilhar em outros sites
Prog 183 Denunciar post Postado Agosto 15, 2012 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
redstyle 7 Denunciar post Postado Agosto 15, 2012 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
Prog 183 Denunciar post Postado Agosto 15, 2012 O MySQL do Facebook é customizado, além disso o MySQL não é o único recurso para persistência de dados. Compartilhar este post Link para o post Compartilhar em outros sites
redstyle 7 Denunciar post Postado Agosto 15, 2012 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
Alysson Vicuña de Oliveira 0 Denunciar post Postado Agosto 11, 2016 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