Depois de ler Using Replication for Scale-Out , como posso rotear diferentes consultas para diferentes servidores, por exemplo, SELECT
desejo rotear para escravos e NON-SELECT
para mestre. Presumo que como loadbalancer posso usar haproxy , mas não achei possível distinguir entre consultas no nível de haproxy ? Além disso, digamos que alguém tenha alcançado o mestre diretamente, como o mestre pode identificar que esta é uma SELECT
consulta e mostrar ser enviado ao escravo ou ao balanceador de carga.
relate perguntas
-
Onde posso encontrar o log lento do mysql?
-
Como posso otimizar um mysqldump de um banco de dados grande?
-
Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?
-
Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?
-
Como um grupo pode rastrear alterações no esquema do banco de dados?
Existe um projeto chamado MySQL Proxy que está tentando lidar com a divisão de leitura/gravação na camada de proxy, mas não está pronto para produção. Você pode ler mais sobre os problemas nesta página , prestando atenção na seção de problemas conhecidos.
Por enquanto, como outros observaram, você precisa lidar com o roteamento por meio de seu aplicativo.
É seu trabalho
web client
determinar se uma transação que está prestes a enviar para o banco de dados éread-only
ouread-write
e escolher seu designadoslave
ou o correspondentemaster
.Não conheço nenhum software de proxy para fazer isso por você. haproxy é um proxy de nível HTTP, isso não terá nenhum impacto em seu banco de dados. Você precisará implementar isso como parte da lógica de negócios do seu aplicativo da web.
No centro de sua camada de persistência, você deve ser capaz de interceptar essas chamadas e "roteá-las" para o banco de dados apropriado com base no tipo de transação que está sendo executada. Por exemplo,
SELECT
as consultas podem ser enviadas para seus servidores somente leitura, masUPDATE/INSRET/DELETE
as consultas seriam enviadas para o servidor mestre.