ProxySQL adalah penyeimbang beban khusus untuk MySQL yang hadir dengan berbagai fitur termasuk, namun tidak terbatas pada pengalihan kueri, cache kueri, atau pembentukan lalu lintas. Ini dapat digunakan untuk dengan mudah mengatur pemisahan baca-tulis dan pengalihan kueri ke node backend yang terpisah. Akibatnya, ini memberikan banyak alasan kuat untuk digunakan. Di sisi lain, HAProxy adalah penyeimbang beban yang hebat tetapi tidak didedikasikan untuk database dan meskipun dapat digunakan, HAProxy tidak dapat dibandingkan secara fitur dengan ProxySQL. Ini mungkin alasan lingkungan yang masih mengandalkan HAProxy untuk mencoba bermigrasi ke ProxySQL.
Dalam entri blog singkat ini, kami akan membagikan beberapa saran terkait proses migrasi.
Merencanakan Peningkatan Anda
Ini cukup jelas dan tidak perlu dipertanyakan lagi, tetapi kami tetap ingin menyampaikannya secara tertulis. Rencanakan peningkatan Anda. Pastikan Anda terbiasa dengan prosesnya, bahwa Anda menguji semuanya secara ekstensif. Siapkan lingkungan pengujian tempat Anda dapat memverifikasi berbagai pendekatan untuk peningkatan versi dan memutuskan mana yang paling cocok untuk Anda.
Uji Split Baca/Tulis di ProxySQL jika Anda Mempertimbangkan Untuk Menggunakannya
Tergantung pada kebutuhan Anda, Anda mungkin ingin mempertimbangkan untuk menggunakan split baca/tulis di ProxySQL. Ini, mungkin, salah satu alasan paling kuat untuk peningkatan. Alih-alih mengimplementasikannya di sisi aplikasi (atau tidak mengimplementasikannya sama sekali jika Anda tidak dapat melakukannya di aplikasi), Anda dapat mengandalkan ProxySQL untuk melakukan pemisahan baca/tulis untuk Anda. Penyiapannya sangat mudah, terutama jika Anda menerapkan ProxySQL menggunakan ClusterControl - ini terjadi hampir secara otomatis.
Selama Anda tidak menggunakan transaksi implisit, ClusterControl akan menyiapkan baca/tulis split untuk Anda menggunakan seperangkat aturan kueri:
Meskipun sangat sederhana untuk menerapkan pemisahan baca/tulis, Anda harus berhati-hatilah saat Anda berencana melakukannya. Aplikasi mungkin bergantung pada beberapa fungsi yang tidak benar-benar berfungsi di luar kotak di ProxySQL. Dalam sebagian besar kasus, konfigurasi tambahan akan memberi Anda manfaat dari fitur ini, tetapi sangat penting selama fase pengujian untuk mengidentifikasi apakah aplikasi Anda hanya akan berfungsi atau Anda perlu menambahkan beberapa konfigurasi khusus. Terutama bagian yang rumit adalah masalah baca-setelah-tulis - dalam hal ini Anda mungkin harus mengonfigurasi ulang ProxySQL untuk menonaktifkan multiplexing koneksi untuk beberapa kueri.
Lupakan Tentang File Konfigurasi di ProxySQL
Ini adalah salah satu hal yang mengejutkan bagi pengguna baru ProxySQL. Itu tidak benar-benar menggunakan file konfigurasi. Ada satu, ya, tetapi ini berfungsi sebagai cara untuk mem-bootstrap ProxySQL selama awal pertama. ProxySQL menggunakan database SQLite yang berisi konfigurasinya dan cara yang tepat untuk membuat perubahan konfigurasi adalah melalui klien MySQL yang terhubung ke port administratif ProxySQL. Dari sana Anda dapat membuat perubahan konfigurasi pada waktu proses, hampir tanpa perlu memulai ulang ProxySQL.
Tentu saja, ClusterControl UI juga memungkinkan Anda untuk mengkonfigurasi ulang ProxySQL:
Pola Penerapan ProxySQL
Ada dua cara utama yang Anda inginkan untuk menerapkan ProxySQL. Anda dapat menggunakan server khusus untuk menerapkan ProxySQL di:
Atau Anda dapat menempatkan ProxySQL dengan server aplikasi:
Ini memungkinkan aplikasi Anda terhubung ke instance ProxySQL lokal menggunakan soket Unix, yang lebih baik dari segi kinerja daripada menggunakan koneksi TCP jarak jauh. Ini juga menyederhanakan penyiapan - tidak perlu mengimplementasikan Keepalive atau beberapa penyedia IP Virtual lainnya untuk memuat keseimbangan di seluruh instans ProxySQL. Aplikasi hanya terhubung ke ProxySQL lokal dan itu saja.
Gunakan Cluster ProxySQL untuk Penerapan yang Lebih Besar
Memastikan instans ProxySQL Anda berisi konfigurasi yang sama sepanjang waktu mungkin sulit, terutama jika jumlahnya besar. Ada banyak cara untuk menghadapi tantangan seperti itu - Ansible/Chef/Puppet, skrip shell, dan sebagainya. Kami menyarankan untuk mengandalkan solusi bawaan - ProxySQL Cluster. Hanya dengan beberapa perubahan konfigurasi, Anda dapat mengonfigurasi node ProxySQL untuk membentuk cluster di mana perubahan konfigurasi pada salah satu node akan disebarkan ke semua anggota cluster.
Tinker Dengan SO_REUSEPORT untuk Pengalihan Load Balancer yang Anggun
Salah satu bagian yang lebih menantang mungkin adalah memastikan bahwa Anda akan mengalihkan lalu lintas dari HAProxy ke ProxySQL dengan cara yang meminimalkan dampak pada aplikasi. Biasanya Anda harus mengubah setidaknya satu pengaturan - nama host atau port tempat aplikasi harus terhubung. Tergantung pada lingkungan Anda, ini mungkin tidak ideal, terutama jika konfigurasi konektivitas database dibangun di dalam aplikasi. Itu akan, cukup banyak, membutuhkan perubahan dalam basis kode dan mendorong kode baru ke produksi. Bukan kesepakatan terbesar tetapi Anda bisa melakukan lebih dari itu.
Bagian yang menarik adalah ProxySQL dan HAProxy versi terbaru (mulai dari 1.8) dapat menggunakan SO_REUSEPORT. Opsi soket ini tersedia di Linux mulai dari kernel 3.9 dan memungkinkan beberapa proses untuk berbagi port yang sama. ProxySQL dapat menggunakannya untuk peningkatan yang anggun antara versi ProxySQL, HAProxy menggunakannya untuk memuat ulang konfigurasi tanpa berdampak apa pun pada aplikasi. Yang menarik, ProxySQL dapat dikonfigurasi untuk berbagi port dengan HAProxy untuk migrasi tanpa hambatan antara kedua penyeimbang beban tersebut.
Ada beberapa hal yang harus Anda pertimbangkan ketika mencoba melakukan ini - pertama, ProxySQL tidak menggunakan opsi ini secara default, Anda harus menambahkan flag -r ke ProxySQL saat startup. Anda dapat melakukannya dengan mengedit file unit sistem ProxySQL:
[email protected]:~# systemctl edit proxysql --full
dan ubah direktif ExecStart menjadi:
ExecStart=/usr/bin/proxysql -c /etc/proxysql.cnf -r
Keterbatasan lain yang harus Anda ketahui di Linux adalah bahwa hanya proses yang dimulai oleh ID pengguna yang sama yang dapat berbagi port. Ini berarti Anda harus mengonfigurasi ulang ProxySQL untuk dijalankan sebagai pengguna “haproxy”.
Seperti biasa, Anda mungkin ingin menjalankan pengujian sebelum mencoba melakukan operasi ini di lingkungan produksi. Sangat mungkin untuk mencapai prestasi ini, tetapi Anda harus berhati-hati dan memeriksa ulang apakah itu tidak akan memengaruhi produksi Anda karena semacam konfigurasi non-standar yang terkait dengan lingkungan Anda.
Kami berharap blog singkat ini akan memberi Anda wawasan tentang proses migrasi dari HAProxy ke ProxySQL. Untuk backend database, perubahan ini akan sangat bermanfaat, meskipun bagian persiapannya mungkin memakan waktu lama. Jika Anda menjalani pengujian yang tepat, migrasi terakhir seharusnya cukup mudah dan aman.