Menggunakan cluster Galera adalah cara yang bagus untuk membangun lingkungan yang sangat tersedia untuk MySQL atau MariaDB. Ini adalah lingkungan cluster tanpa berbagi yang dapat diskalakan bahkan melebihi 12-15 node. Galera memiliki beberapa keterbatasan. Ini bersinar di lingkungan latensi rendah dan meskipun dapat digunakan di seluruh WAN, kinerjanya dibatasi oleh latensi jaringan. Performa Galera juga dapat terpengaruh jika salah satu node mulai berperilaku tidak benar. Misalnya, beban yang berlebihan pada salah satu node dapat memperlambatnya, mengakibatkan penanganan penulisan yang lebih lambat dan itu akan berdampak pada semua node lain dalam cluster. Di sisi lain, sangat tidak mungkin menjalankan bisnis tanpa menganalisis data Anda. Analisis semacam itu, biasanya, memerlukan menjalankan kueri berat, yang sangat berbeda dari beban kerja OLTP. Dalam posting blog ini, kita akan membahas cara mudah menjalankan kueri analitik untuk data yang disimpan di Galera Cluster untuk MySQL atau MariaDB, dengan cara yang tidak memengaruhi kinerja cluster inti.
Bagaimana cara menjalankan Analytical Query di Galera Cluster?
Seperti yang kami nyatakan, menjalankan kueri yang berjalan lama secara langsung di kluster Galera dapat dilakukan, tetapi mungkin bukan ide yang bagus. Tergantung pada perangkat keras, ini dapat menjadi solusi yang dapat diterima (jika Anda menggunakan perangkat keras yang kuat dan Anda tidak akan menjalankan beban kerja analitis multi-utas) tetapi bahkan jika penggunaan CPU tidak akan menjadi masalah, fakta bahwa salah satu node akan memiliki beban kerja campuran ( OLTP dan OLAP) sendiri akan menimbulkan beberapa tantangan kinerja. Kueri OLAP akan mengeluarkan data yang diperlukan untuk beban kerja OLTP Anda dari kumpulan buffer, dan ini akan memperlambat kueri OLTP Anda. Untungnya, ada cara sederhana namun efisien untuk memisahkan beban kerja analitik dari kueri biasa - slave replikasi asinkron.
Budak replikasi adalah solusi yang sangat sederhana - yang Anda butuhkan hanyalah host lain yang dapat disediakan dan replikasi asinkron harus dikonfigurasi dari Galera Cluster ke node tersebut. Dengan replikasi asinkron, slave tidak akan memengaruhi cluster lainnya dengan cara apa pun. Tidak masalah jika itu dimuat dengan berat, menggunakan perangkat keras yang berbeda (kurang kuat), itu hanya akan terus mereplikasi dari cluster inti. Skenario kasus terburuk adalah bahwa slave replikasi akan mulai tertinggal tetapi kemudian terserah Anda untuk menerapkan replikasi multi-utas atau, pada akhirnya untuk meningkatkan slave replikasi.
Setelah slave replikasi aktif dan berjalan, Anda harus menjalankan kueri yang lebih berat di atasnya dan membongkar kluster Galera. Ini dapat dilakukan dengan berbagai cara, tergantung pada pengaturan dan lingkungan Anda. Jika Anda menggunakan ProxySQL, Anda dapat dengan mudah mengarahkan kueri ke budak analitik berdasarkan host sumber, pengguna, skema, atau bahkan kueri itu sendiri. Jika tidak, aplikasi Anda akan mengirimkan kueri analitis ke host yang benar.
Menyiapkan budak replikasi tidak terlalu rumit tetapi masih bisa rumit jika Anda tidak mahir dengan MySQL dan alat-alat seperti xtrabackup. Seluruh proses akan terdiri dari menyiapkan repositori di server baru dan menginstal database MySQL. Kemudian Anda harus menyediakan host itu menggunakan data dari cluster Galera. Anda dapat menggunakan xtrabackup untuk itu tetapi alat lain seperti mydumper/myloader atau bahkan mysqldump akan berfungsi juga (selama Anda menjalankannya dengan benar). Setelah data ada di sana, Anda harus mengatur replikasi antara node master Galera dan slave replikasi. Terakhir, Anda harus mengonfigurasi ulang lapisan proxy untuk menyertakan slave baru dan mengarahkan lalu lintas ke sana atau membuat penyesuaian dalam cara aplikasi Anda terhubung ke database untuk mengalihkan sebagian beban ke slave replikasi.
Yang penting untuk diingat, pengaturan ini tidak tahan banting. Jika node Galera “master” akan down, link replikasi akan rusak dan akan mengambil tindakan manual untuk memisahkan replika dari node master lain di cluster Galera.
Ini bukan masalah besar, terutama jika Anda menggunakan replikasi dengan GTID (Global Transaction ID) tetapi Anda harus mengidentifikasi bahwa replikasi tersebut rusak dan kemudian mengambil tindakan manual.
Bagaimana cara mengatur slave asinkron ke Galera Cluster menggunakan ClusterControl?
Untungnya, jika Anda menggunakan ClusterControl, seluruh proses dapat diotomatisasi dan hanya memerlukan beberapa klik. Status awal telah disiapkan menggunakan ClusterControl - kluster Galera 3 node dengan 2 node ProxySQL dan 2 node Keepalive untuk ketersediaan tinggi dari database dan lapisan proxy.
Menambahkan budak replikasi hanya dengan sekali klik:
Replikasi, jelas, membutuhkan log biner untuk diaktifkan. Jika Anda tidak mengaktifkan binlog di node Galera Anda, Anda dapat melakukannya juga dari ClusterControl. Harap diingat bahwa mengaktifkan log biner akan memerlukan restart node untuk menerapkan perubahan konfigurasi.
Bahkan jika satu node dalam cluster memiliki log biner yang diaktifkan (ditandai sebagai "Master" pada tangkapan layar di atas), masih bagus untuk mengaktifkan log biner pada setidaknya satu node lagi. ClusterControl dapat secara otomatis melakukan failover pada slave replikasi setelah mendeteksi bahwa master Galera node mogok, tetapi untuk itu, master node lain dengan log biner yang diaktifkan diperlukan atau tidak akan ada yang gagal.
Seperti yang kami nyatakan, mengaktifkan log biner memerlukan restart. Anda dapat langsung menjalankannya, atau cukup membuat perubahan konfigurasi dan memulai ulang di lain waktu.
Setelah binlog diaktifkan pada beberapa node Galera, Anda dapat melanjutkan dengan menambahkan slave replikasi. Dalam dialog Anda harus memilih host master, berikan nama host atau alamat IP dari slave. Jika Anda memiliki cadangan terbaru (yang harus Anda lakukan), Anda dapat menggunakannya untuk menyediakan budak. Jika tidak, ClusterControl akan menyediakannya menggunakan xtrabackup - semua data master terbaru akan dialirkan ke slave dan kemudian replikasi akan dikonfigurasi.
Setelah pekerjaan selesai, budak replikasi telah ditambahkan ke cluster. Seperti yang dinyatakan sebelumnya, jika 10.0.0.101 mati, host lain di kluster Galera akan dipilih sebagai master dan ClusterControl akan secara otomatis menjalankan 10.0.0.104 dari node lain.
Saat kita menggunakan ProxySQL, kita perlu mengkonfigurasinya. Kami akan menambahkan server baru ke ProxySQL.
Kami membuat grup host lain (30) tempat kami menempatkan budak asinkron kami. Kami juga meningkatkan “Lag Replikasi Maks” menjadi 50 detik dari default 10. Terserah kebutuhan bisnis Anda seberapa parah kelambatan analitik sebelum menjadi masalah.
Setelah itu kita harus mengonfigurasi aturan kueri yang akan cocok dengan lalu lintas OLAP kita dan merutekannya ke grup host OLAP (30). Pada tangkapan layar di atas kami mengisi beberapa bidang - ini tidak wajib. Biasanya Anda perlu menggunakan satu, paling banyak dua. Tangkapan layar di atas berfungsi sebagai contoh sehingga kami dapat dengan mudah melihat bahwa Anda dapat mencocokkan kueri menggunakan skema (jika Anda memiliki skema terpisah dengan data analitis), nama host/IP (jika kueri OLAP dijalankan dari beberapa host tertentu), pengguna (jika aplikasi menggunakan pengguna tertentu untuk kueri analitis. Anda juga dapat mencocokkan kueri secara langsung dengan meneruskan kueri lengkap atau dengan menandainya dengan komentar SQL dan membiarkan ProxySQL merutekan semua kueri dengan string “OLAP_QUERY” ke grup host analitis kami.
Seperti yang Anda lihat, berkat ClusterControl kami dapat menerapkan slave replikasi ke Galera Cluster hanya dalam beberapa klik. Beberapa orang mungkin berpendapat bahwa MySQL bukanlah database yang paling cocok untuk beban kerja analitis dan kami cenderung setuju. Anda dapat dengan mudah memperluas penyiapan ini menggunakan ClickHouse dan dengan menyiapkan replikasi dari slave asinkron ke penyimpanan data kolom ClickHouse untuk kinerja kueri analitik yang jauh lebih baik. Kami menjelaskan penyiapan ini di salah satu entri blog sebelumnya.