Uso de la replicación para escalar horizontalmente

8

Después de leer Uso de la replicación para escalar horizontalmente , ¿cómo puedo enrutar diferentes consultas a diferentes servidores? Por ejemplo, SELECTquiero enrutar a esclavos y NON-SELECTa maestros. Supongo que como Loadbalancer puedo usar haproxy , pero no encontré que sea posible distinguir entre consultas en el nivel de haproxy . Además, supongamos que alguien ha llegado al maestro directamente, ¿cómo puede el maestro identificar que se trata de una SELECTconsulta y un programa para enviarlo al esclavo o al equilibrador de carga?

com
fuente

Respuestas:

3

Hay un proyecto llamado MySQL Proxy que está tratando de manejar la división de lectura / escritura en la capa proxy, pero no está listo para la producción. Puede leer más sobre los problemas en esta página , prestando atención a la sección de problemas conocidos.

Por ahora, como otros han señalado, debe manejar el enrutamiento a través de su aplicación.

Derek Downey
fuente
En una línea similar (pero, creo, está lista para producción): scalebase.com/solution/architecture
Nick Chammas
2

Es el trabajo que web clientdebe determinar si una transacción que está a punto de enviar a la base de datos es read-onlyo read-writeelegir su designado slaveo el mastercorrespondiente.

Raihan
fuente
2

No conozco ningún software proxy que haga esto por usted. haproxy es un proxy de nivel HTTP, esto no tendrá ningún impacto en su base de datos. Deberá implementar esto como parte de la lógica empresarial de su aplicación web.

En el corazón de su capa de persistencia, debe poder interceptar estas llamadas y "enrutarlas" a la base de datos apropiada en función del tipo de transacción que se ejecuta. Por ejemplo, las SELECTconsultas podrían enviarse a sus servidores de solo lectura, pero las UPDATE/INSRET/DELETEconsultas se enviarían al servidor maestro.

Nate
fuente
haproxy es un equilibrador de carga TCP y puede usarse para otros protocolos, incluido MySQL, aunque puede no ser la mejor opción.
Aaron Brown