A replicação mestre-mestre não é tão boa quanto você imagina, o mesmo vale para o proxy round-robin e soluções similares 'fáceis'. Se você confirmar a coleta de dados para separar servidores com rapidez suficiente (mais rápido que o atraso entre os servidores, que nos servidores de produção pode levar até um segundo inteiro *), ambos aceitarão os dados. Se você possui um servidor de leilão, acaba de vender o mesmo carro duas vezes . Quem comprou? Depende de qual banco de dados você irá perguntar!
O aplicativo deve estar ciente de que existem 2 bancos de dados e precisa conhecer os dois endereços IP. Se você quer "vender", você deve
DB_number = `auction_number` % `number_of_databases`
( %é para modulo)
... e confirme no banco de dados DB_number. Se você receber um erro de conexão, talvez o faça com o outro (mas, no caso de um servidor de leilão, eu exibiria apenas um erro).
Além disso, os endereços IP devem ser wackamole -d entre os dois servidores. Em um cenário de desastre, em que um servidor de banco de dados fica inativo por algumas horas no horário de pico, você descobrirá que o aplicativo tentará se conectar ao servidor ausente e travará até TIMEOUT, por exemplo, 3s. De repente, metade das Suas consultas é executada 3s a mais (e todas elas acabam no mesmo banco de dados - o que não o torna mais rápido do que antes do desastre). Isso não faz o seu httpd feliz, pois provavelmente possui um conjunto de conexões limitado de threads de manipulador de solicitações simultâneos ...
* o atraso de replicação nos servidores de produção pode levar até um segundo inteiro - eu testei isso em uma colocação remota e em nosso datacenter e, em 99% das vezes, é 0, mas às vezes o mysql mostra 1s. No tráfego maciço, tive muitas colisões devido ao aplicativo cliente fazer duas solicitações, resultando em duas consultas, inserir e selecionar. Em alguns casos, a linha ainda não estava lá , então usamos o hash do userID e corrigimos o problema
Espero que você aprenda com meus erros ;-)