Menggunakan Replikasi untuk Scale-Out

8

Setelah membaca Menggunakan Replikasi untuk Scale-Out , bagaimana saya bisa merutekan berbagai kueri ke server yang berbeda, misalnya, SELECTsaya ingin merutekan ke slave dan NON-SELECTmenguasai. Saya menganggap sebagai loadbalancer saya bisa menggunakan haproxy , tapi saya tidak menemukan kemungkinan untuk membedakan antara pertanyaan pada tingkat haproxy ? Selain itu, katakanlah seseorang telah mencapai master secara langsung, bagaimana master dapat mengidentifikasi bahwa ini adalah SELECTpermintaan dan acara dikirim ke budak, atau ke loadbalancer.

com
sumber

Jawaban:

3

Ada proyek yang disebut MySQL Proxy yang berusaha menangani pemisahan baca / tulis di lapisan proxy, tetapi tidak siap untuk diproduksi. Anda dapat membaca lebih lanjut tentang masalah di halaman ini , memperhatikan bagian masalah yang diketahui.

Untuk saat ini, seperti yang telah dicatat orang lain, Anda harus menangani perutean melalui aplikasi Anda.

Derek Downey
sumber
Dalam nada yang sama (tapi, saya percaya, sudah siap berproduksi): scalebase.com/solution/architecture
Nick Chammas
2

web clientAdalah tugas Anda untuk menentukan apakah suatu transaksi yang akan dikirim ke database adalah read-onlyatau read-writedan memilih yang ditunjuk slaveatau mastersesuai.

Raihan
sumber
2

Saya tidak mengetahui adanya perangkat lunak proxy untuk melakukan ini untuk Anda. haproxy adalah proxy level HTTP, ini tidak akan berdampak pada database Anda. Anda perlu menerapkan ini sebagai bagian dari logika bisnis aplikasi web Anda.

Di jantung lapisan bertahan Anda, Anda harus dapat mencegat panggilan ini dan "merutekan" mereka ke database yang sesuai berdasarkan jenis transaksi yang dieksekusi. Misalnya, SELECTkueri dapat dikirim ke server baca-saja Anda, tetapi UPDATE/INSRET/DELETEkueri akan dikirim ke server master.

Nate
sumber
haproxy adalah penyeimbang beban TCP dan dapat digunakan untuk protokol lain, termasuk MySQL, meskipun itu mungkin bukan pilihan terbaik.
Aaron Brown