ClusterControl adalah alat yang hebat untuk menyebarkan dan mengelola cluster database - jika Anda menggunakan MySQL, Anda dapat dengan mudah menggunakan cluster berdasarkan replikasi master-slave MySQL tradisional, Galera Cluster atau MySQL NDB Cluster. Untuk mencapai ketersediaan tinggi, menyebarkan cluster saja tidak cukup. Node mungkin (dan kemungkinan besar akan) turun, dan sistem Anda harus mampu beradaptasi dengan perubahan tersebut.
Adaptasi ini dapat terjadi pada level yang berbeda. Anda dapat menerapkan beberapa jenis logika dalam aplikasi - itu akan memeriksa status node cluster dan mengarahkan lalu lintas ke node yang dapat dijangkau pada saat tertentu. Anda juga dapat membangun lapisan proxy yang akan menerapkan ketersediaan tinggi di sistem Anda. Dalam posting blog ini, kami ingin berbagi beberapa tips tentang bagaimana Anda dapat mencapainya menggunakan ClusterControl.
Menyebarkan HAProxy Menggunakan ClusterControl
HAProxy adalah standar - salah satu proxy paling populer yang digunakan sehubungan dengan MySQL (tetapi tidak hanya, tentu saja). ClusterControl mendukung penyebaran dan pemantauan node HAProxy. Ini juga membantu untuk menerapkan ketersediaan tinggi dari proxy itu sendiri menggunakan keepalive.
Deployment cukup sederhana - Anda perlu memilih atau mengisi alamat IP dari host tempat HAProxy akan diinstal, memilih port, kebijakan load balancing, memutuskan apakah ClusterControl harus menggunakan repositori yang ada atau kode sumber terbaru untuk menyebarkan HAProxy. Anda juga dapat memilih node backend mana yang ingin Anda sertakan dalam konfigurasi proxy, dan apakah node tersebut harus aktif atau cadangan.
Secara default, instance HAProxy yang digunakan oleh ClusterControl akan berfungsi di MySQL Cluster (NDB), Galera Cluster, replikasi streaming PostgreSQL, dan Replikasi MySQL. Untuk replikasi master-slave, ClusterControl dapat mengonfigurasi dua listener, satu untuk read-only dan satu lagi untuk read-write. Aplikasi kemudian harus mengirim baca dan tulis ke port masing-masing. Untuk replikasi multi-master, ClusterControl akan menyiapkan penyeimbangan beban TCP standar berdasarkan algoritme penyeimbangan koneksi paling sedikit (misalnya, untuk Galera Cluster yang semua nodenya dapat ditulisi).
Keepalive digunakan untuk menambahkan ketersediaan tinggi ke lapisan proxy. Bila Anda memiliki setidaknya dua node HAProxy di sistem Anda, Anda dapat menginstal Keepalive dari UI ClusterControl.
Anda harus memilih dua node HAProxy dan mereka akan dikonfigurasi sebagai pasangan aktif - siaga. IP Virtual akan ditetapkan ke server aktif dan, jika gagal, itu akan dipindahkan ke proxy siaga. Dengan cara ini Anda cukup terhubung ke VIP dan semua pertanyaan Anda akan dialihkan ke node HAProxy yang aktif dan berfungsi saat ini.
Anda dapat menemukan detail lebih lanjut tentang bagaimana internal dikonfigurasi dengan membaca tutorial HAProxy kami.
Menyebarkan ProxySQL Menggunakan ClusterControl
Meskipun HAProxy adalah proxy yang kokoh dan pilihan yang sangat populer, HAProxy tidak memiliki kesadaran basis data, misalnya, pemisahan baca-tulis. Satu-satunya cara untuk melakukannya di HAProxy adalah dengan membuat dua backend dan mendengarkan di dua port - satu untuk membaca dan satu untuk menulis. Ini, biasanya, baik-baik saja tetapi mengharuskan Anda untuk mengimplementasikan perubahan dalam aplikasi Anda - aplikasi harus memahami apa yang membaca dan menulis, dan kemudian mengarahkan kueri tersebut ke port yang benar. Akan jauh lebih mudah untuk menyambungkan ke satu port dan membiarkan proxy memutuskan apa yang harus dilakukan selanjutnya - ini adalah sesuatu yang tidak dapat dilakukan HAProxy karena hanya merutekan paket - tidak ada inspeksi paket yang dilakukan dan, terutama, tidak ada pemahaman tentang protokol MySQL.
ProxySQL memecahkan masalah ini - ia berbicara tentang protokol MySQL dan dapat (antara lain) melakukan pemisahan baca-tulis melalui aturan kueri yang kuat dan merutekan lalu lintas MySQL yang masuk menurut berbagai kriteria. Instalasi ProxySQL dari ClusterControl sederhana - Anda ingin pergi ke Manage -> Load Balancer bagian dan isi tab “Deploy ProxySQL” dengan data yang diperlukan.
Singkatnya, kita perlu memilih di mana ProxySQL akan diinstal, pengguna administrasi dan sandi apa yang harus dimiliki, pengguna pemantau mana yang harus digunakan untuk terhubung ke backend MySQL dan memverifikasi status dan status monitornya. Dari ClusterControl, Anda dapat membuat pengguna baru untuk digunakan oleh aplikasi - Anda dapat memutuskan nama, kata sandi, akses ke database mana yang diberikan dan hak istimewa MySQL apa yang akan dimiliki pengguna. Pengguna tersebut akan dibuat di kedua sisi MySQL dan ProxySQL. Opsi kedua, lebih cocok untuk infrastruktur yang ada, adalah menggunakan pengguna database yang ada. Anda harus memasukkan nama pengguna dan kata sandi, dan pengguna tersebut hanya akan dibuat di ProxySQL.
Terakhir, Anda perlu menjawab pertanyaan:apakah Anda menggunakan transaksi implisit? Dengan itu kami memahami transaksi dimulai dengan menjalankan SET autocommit=0; Jika Anda menggunakannya, ClusterControl akan mengonfigurasi ProxySQL untuk mengirim semua lalu lintas ke master. Ini diperlukan untuk memastikan ProxySQL akan menangani transaksi dengan benar di ProxySQL 1.3.x dan sebelumnya. Jika Anda tidak menggunakan SET autocommit=0 untuk membuat transaksi baru, ClusterControl akan mengonfigurasi pemisahan baca/tulis.
ProxySQL, karena setiap proxy, dapat menjadi satu titik kegagalan dan harus dibuat berlebihan untuk mencapai ketersediaan tinggi. Ada beberapa metode untuk melakukannya. Salah satunya adalah dengan menempatkan ProxySQL pada node web. Idenya di sini adalah bahwa, sebagian besar waktu, proses ProxySQL akan bekerja dengan baik dan alasan ketidaktersediaannya adalah karena seluruh node mati. Dalam kasus seperti itu, jika ProxySQL ditempatkan dengan node web, tidak banyak kerugian yang terjadi karena node web tertentu juga tidak akan tersedia.
Metode lain, adalah menggunakan Keepalive dengan cara yang sama seperti yang kami lakukan dalam kasus HAProxy.
Anda dapat menemukan detail lebih lanjut tentang bagaimana internal dikonfigurasi dengan membaca tutorial ProxySQL kami.