Verwenden der Replikation für das Scale-Out

8

Nachdem ich " Replikation für Scale-Out verwenden" gelesen habe , wie kann ich verschiedene Abfragen an verschiedene Server weiterleiten, z. B. SELECTmöchte ich an Slaves und NON-SELECTMaster weiterleiten . Ich gehe davon aus, dass ich als Loadbalancer Haproxy verwenden kann , aber ich habe nicht festgestellt , dass es möglich ist, zwischen Abfragen auf der Ebene von Haproxy zu unterscheiden . SELECTNehmen wir außerdem an, jemand hat den Master direkt erreicht. Wie kann der Master feststellen, dass es sich um eine Abfrage handelt, die an den Slave oder an den Loadbalancer gesendet wird?

com
quelle

Antworten:

3

Es gibt ein Projekt namens MySQL Proxy , das versucht, die Lese- / Schreibaufteilung in der Proxy-Schicht zu handhaben, aber nicht produktionsbereit ist. Weitere Informationen zu den Problemen finden Sie auf dieser Seite . Beachten Sie dabei den Abschnitt über bekannte Probleme.

Wie andere bereits bemerkt haben, müssen Sie vorerst das Routing durch Ihre Anwendung übernehmen.

Derek Downey
quelle
In ähnlicher Weise (aber ich glaube, ist produktionsbereit): scalebase.com/solution/architecture
Nick Chammas
2

Es ist Ihre Aufgabe, web clientzu bestimmen, ob eine Transaktion, die an die Datenbank gesendet werden soll, read-onlyoder ist, read-writeund slavedie masterentsprechende oder die entsprechende zu wählen .

Raihan
quelle
2

Mir ist keine Proxy-Software bekannt, die dies für Sie erledigt. Haproxy ist ein Proxy auf HTTP-Ebene. Dies hat keine Auswirkungen auf Ihre Datenbank. Sie müssen dies als Teil der Geschäftslogik Ihrer Webanwendung implementieren.

Im Herzen Ihrer Persistenzschicht sollten Sie in der Lage sein, diese Anrufe abzufangen und sie basierend auf der Art der ausgeführten Transaktion an die entsprechende Datenbank weiterzuleiten. Beispielsweise SELECTkönnten Abfragen an Ihre schreibgeschützten Server UPDATE/INSRET/DELETEgesendet werden, aber Abfragen würden an den Master-Server gesendet.

Nate
quelle
Haproxy ist ein TCP-Load-Balancer und kann für andere Protokolle, einschließlich MySQL, verwendet werden, obwohl dies möglicherweise nicht die beste Wahl ist.
Aaron Brown