Usando replicação para expansão

8

Depois de ler Usando a replicação para expansão , como posso rotear consultas diferentes para servidores diferentes, por exemplo, SELECTquero rotear para escravos e NON-SELECTmestre. Presumo que, como loadbalancer , posso usar haproxy , mas não achei possível diferenciar 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 isso é SELECTconsulta e mostrar que é enviado ao escravo ou ao loadbalancer.

com
fonte

Respostas:

3

Existe um projeto chamado MySQL Proxy que está tentando lidar com a divisão de leitura / gravação na camada proxy, mas ele não está pronto para produção. Você pode ler mais sobre os problemas desta página , prestando atenção à seção de problemas conhecidos.

Por enquanto, como outros observaram, você precisa lidar com o roteamento através do seu aplicativo.

Derek Downey
fonte
Em uma veia similar (mas, creio eu, é a produção pronta): scalebase.com/solution/architecture
Nick Chammas
2

É o seu trabalho web clientdeterminar se uma transação que está prestes a enviar ao banco de dados é read-onlyou read-writee escolhe a designada slaveou a correspondente master.

Raihan
fonte
2

Não conheço nenhum software proxy para fazer isso por você. O haproxy é um proxy no nível HTTP, isso não terá nenhum impacto no seu banco de dados. Você precisará implementar isso como parte da lógica de negócios do seu aplicativo da web.

No coração da sua camada de persistência, você deve poder interceptar essas chamadas e "rotear" elas para o banco de dados apropriado com base no tipo de transação que está sendo executada. Por exemplo, as SELECTconsultas podem ser enviadas para os servidores somente leitura, mas as UPDATE/INSRET/DELETEconsultas são enviadas para o servidor mestre.

Nate
fonte
O haproxy é um balanceador de carga TCP e pode ser usado para outros protocolos, incluindo o MySQL, embora possa não ser a melhor opção.
Aaron Brown