Ada berbagai alasan untuk menambahkan penyeimbang beban antara aplikasi dan database Anda. Jika Anda memiliki lalu lintas tinggi (dan Anda ingin menyeimbangkan lalu lintas antara node basis data yang berbeda) atau Anda ingin menggunakan penyeimbang beban sebagai titik akhir tunggal (jadi jika terjadi kegagalan, penyeimbang beban ini akan mengatasi masalah ini dengan mengirimkan lalu lintas ke tersedia/sehat node.) Bisa juga Anda ingin menggunakan port yang berbeda untuk menulis dan membaca data dari database Anda.
Dalam semua kasus ini, penyeimbang beban akan berguna bagi Anda, dan jika Anda memiliki klaster MariaDB, salah satu opsi untuk ini adalah menggunakan MaxScale yang merupakan proxy database untuk database MariaDB.
Di blog ini, kami akan menunjukkan kepada Anda cara menginstal dan mengkonfigurasinya secara manual, dan bagaimana ClusterControl dapat membantu Anda dalam tugas ini. Untuk contoh ini, kita akan menggunakan cluster replikasi MariaDB dengan 1 master dan 1 node slave, dan CentOS8 sebagai sistem operasinya.
Cara Memasang MaxScale
Kami akan menganggap Anda memiliki dan menjalankan database MariaDB Anda, dan juga mesin (virtual atau fisik) untuk menginstal MaxScale. Kami menyarankan Anda menggunakan host yang berbeda, jadi jika terjadi kegagalan master, MaxScale dapat melakukan failover ke node slave, jika tidak, MaxScale tidak dapat mengambil tindakan apa pun jika server yang menjalankannya mati.
Ada berbagai cara untuk menginstal MaxScale, dalam hal ini, kami akan menggunakan repositori MariaDB. Untuk menambahkannya ke server MaxScale, Anda harus menjalankan:
$ curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
[info] Repository file successfully written to /etc/yum.repos.d/mariadb.repo
[info] Adding trusted package signing keys...
[info] Successfully added trusted package signing keys
Sekarang, instal paket MaxScale:
$ yum install maxscale
Sekarang Anda telah menginstal node MaxScale Anda, sebelum memulai, Anda perlu mengkonfigurasinya.
Cara Mengonfigurasi MaxScale
Saat MaxScale melakukan tugas seperti autentikasi, pemantauan, dan lainnya, Anda perlu membuat pengguna database dengan beberapa hak istimewa:
MariaDB [(none)]> CREATE USER 'maxscaleuser'@'%' IDENTIFIED BY 'maxscalepassword';
MariaDB [(none)]> GRANT SELECT ON mysql.user TO 'maxscaleuser'@'%';
MariaDB [(none)]> GRANT SELECT ON mysql.db TO 'maxscaleuser'@'%';
MariaDB [(none)]> GRANT SELECT ON mysql.tables_priv TO 'maxscaleuser'@'%';
MariaDB [(none)]> GRANT SELECT ON mysql.roles_mapping TO 'maxscaleuser'@'%';
MariaDB [(none)]> GRANT SHOW DATABASES ON *.* TO 'maxscaleuser'@'%';
MariaDB [(none)]> GRANT REPLICATION CLIENT on *.* to 'maxscaleuser'@'%';
Perlu diingat bahwa MariaDB versi 10.2.2 hingga 10.2.10 juga memerlukan:
MariaDB [(none)]> GRANT SELECT ON mysql.* TO 'maxscaleuser'@'%';
Sekarang pengguna database sudah siap, mari kita lihat file konfigurasinya. Saat Anda menginstal MaxScale, file maxscale.cnf akan dibuat di bawah /etc/. Ada beberapa variabel dan cara berbeda untuk mengonfigurasinya, jadi mari kita lihat contohnya:
$ cat /etc/maxscale.cnf
# Global parameters
[maxscale]
threads = auto
log_augmentation = 1
ms_timestamp = 1
syslog = 1
# Server definitions
[server1]
type=server
address=192.168.100.126
port=3306
protocol=MariaDBBackend
[server2]
type=server
address=192.168.100.127
port=3306
protocol=MariaDBBackend
# Monitor for the servers
[MariaDB-Monitor]
type=monitor
module=mariadbmon
servers=server1,server2
user=maxscaleuser
password=maxscalepassword
monitor_interval=2000
# Service definitions
[Read-Only-Service]
type=service
router=readconnroute
servers=server2
user=maxscaleuser
password=maxscalepassword
router_options=slave
[Read-Write-Service]
type=service
router=readwritesplit
servers=server1
user=maxscaleuser
password=maxscalepassword
# Listener definitions for the services
[Read-Only-Listener]
type=listener
service=Read-Only-Service
protocol=MariaDBClient
port=4008
[Read-Write-Listener]
type=listener
service=Read-Write-Service
protocol=MariaDBClient
port=4006
Dalam konfigurasi ini, kami memiliki 2 node database, 192.168.100.126 (Master) dan 192.168.100.127 (Slave), seperti yang Anda lihat di bagian Definisi Server.
Kami juga memiliki 2 layanan yang berbeda, satu untuk read-only, di mana ada node slave, dan satu lagi untuk read-write di mana ada node master.
Akhirnya, kami memiliki 2 pendengar, satu untuk setiap layanan. Listener read-only, mendengarkan di port 4008, dan read-write, mendengarkan di port 4006.
Ini adalah file konfigurasi dasar. Jika Anda memerlukan sesuatu yang lebih spesifik, Anda dapat mengikuti dokumentasi resmi MariaDB.
Sekarang Anda siap untuk memulainya, jadi jalankan saja:
$ systemctl start maxscale.service
Dan periksa:
$ maxctrl list services
ff $ maxctrl list servers
Anda dapat menemukan daftar perintah maxctrl di sini, atau Anda bahkan dapat menggunakan maxadmin untuk mengelolanya.
Sekarang mari kita uji koneksinya. Untuk ini, Anda dapat mencoba mengakses database Anda menggunakan alamat IP MaxScale dan port yang ingin Anda uji. Dalam kasus kami, lalu lintas pada port 4006 harus dikirim ke server1, dan lalu lintas pada port 4008 ke server2.
$ mysql -h 192.168.100.128 -umaxscaleuser -pmaxscalepassword -P4006 -e 'SELECT @@hostname;'
+------------+
| @@hostname |
+------------+
| server1 |
+------------+
$ mysql -h 192.168.100.128 -umaxscaleuser -pmaxscalepassword -P4008 -e 'SELECT @@hostname;'
+------------+
| @@hostname |
+------------+
| server2 |
+------------+
Berhasil!
Cara Menyebarkan MaxScale dengan ClusterControl
Mari kita lihat sekarang, bagaimana Anda dapat menggunakan ClusterControl untuk menyederhanakan tugas ini. Untuk ini, kami akan menganggap Anda telah menambahkan klaster MariaDB Anda ke ClusterControl.
Buka ClusterControl -> Pilih MariaDB cluster -> Cluster Actions -> Add Load Balancer -> MaxScale.
Di sini Anda dapat menerapkan node MaxScale baru atau Anda juga dapat mengimpor yang sudah ada satu. Jika Anda menerapkannya, Anda perlu menambahkan Alamat IP atau Nama Host, kredensial admin dan pengguna MaxScale, jumlah utas, dan port (tulis dan baca-saja). Anda juga dapat menentukan node database mana yang ingin Anda tambahkan ke konfigurasi MaxScale.
Anda dapat memantau tugas di bagian Aktivitas ClusterControl. Setelah selesai, Anda akan memiliki node MaxScale baru di cluster MariaDB Anda.
Dan menjalankan perintah MaxScale dari UI ClusterControl tanpa perlu mengakses server melalui SSH.
Kelihatannya lebih mudah daripada menerapkannya secara manual, bukan?
Kesimpulan
Memiliki Load Balancer adalah solusi yang baik jika Anda ingin menyeimbangkan atau membagi lalu lintas Anda, atau bahkan untuk tindakan failover, dan MaxScale, sebagai produk MariaDB, adalah pilihan yang baik untuk database MariaDB.
Instalasinya mudah, tetapi konfigurasi dan penggunaannya bisa jadi sulit jika itu sesuatu yang baru untuk Anda. Dalam hal ini, Anda dapat menggunakan ClusterControl untuk menerapkan, mengonfigurasi, dan mengelolanya dengan cara yang lebih mudah.