Memanfaatkan MariaDB MaxScale Sebagai Load Balancing Untuk Galera Cluster pada CentOS 8
MariaDB adalah sistem manajemen database relasional yang dikembangkan dari MySQL. MariaDB dikembangkan oleh komunitas pengembang yang sebelumnya berkontribusi untuk database MySQL.
MariaDB saat ini telah mempunyai MaxScale salah satu produk open source dibawah Business Source License (BSL). Mariadb MaxScale dirancang untuk meningkatkan scalability, high availability dan security serta mengakomodir infrastruktur database.
MariaDB MaxScale merupakan sebuah proxy yang duduk diantara database server dan client lalu meneruskan request client ke database server. Mariadb MaxScale juga dapat mengatur request routing, filter, tracing log, monitoring, bahkan dapat digunakan sebagai load balancing, autentikasi dan yang lainnya. Selengkapnya Anda dapat merujuk pada link berikut: MariaDB-MaxScale.
Sebenarnya terdapat beberapa pemilihan dalam menentukan load balancing database diantaranya
- Menggunakan HAProxy
- Menggunakan ProxySQL
- Menggunakan MaxScale
Di tutorial kali ini kami tidak membahas kelebihan dan kekurangannya dan untuk komparasi diatas Anda dapat melihat nya pada link berikut: StackShare β HAProxy vs MaxScale vs ProxySQL.
Pada tutorial ini akan dibahas cara instalasi dan konfigurasi MariaDB MaxScale sebagai load Balancing MariaDB Galera Cluster, oleh karena itu pastikan Anda sudah melakukan instalasi MariaDB Galera Cluster terlebih dahulu.
Berikut topologi yang akan digunakan.
Berikut detail keterangan dari topologi diatas:
- Galera Cluster Menggunakan 3 node dengan detail IP dan Hostname sebagai berikut:
Node01:
β Hostname: galera01.nurhamim.my.id
β IP: 192.168.10.9
Node02:
β Hostname: galera02.nurhamim.my.id
β IP: 192.168.10.18
Node03
β Hostname: galera03.nurhamim.my.id
β IP: 192.168.10.21 - Load Balancing MariaDB MaxScale akan diinstall di node04 dengan detail sebagai berikut
β Hostaname: mariadb-maxscale.nurhamim.my.id
β IP: 192.168.10.15
Disini untuk Galera Cluster sudah kami install sebelumnya, jika Anda belum melakukan instalasi Galera Cluster silakan merujuk pada link berikut: _ Cara Instalasi dan Konfigurasi MariaDB Galera Cluster di CentOS 8 _.
Untuk melakukan instalasi MariaDB MaxScale di node04 langkah pertama yaitu mengunduh dan menambahkan repository MariaDB
1
2
3
4
5
6
[root@mariadb-maxscale ~]#
[root@mariadb-maxscale ~]# curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | 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
[root@mariadb-maxscale ~]#
Jika sudah silakan install MariaDB MaxScale menggunakan command berikut
1
2
[root@mariadb-maxscale ~]#
[root@mariadb-maxscale ~]# dnf install maxscale -y
Tunggu proses instalasi yang membutuhkan beberapa waktu sampai selesai, apabila sudah selesai langkah selanjutnya membuat user database MaxScale di sisi node01 galera cluster, user tersebut digunakan untuk menghububungkan node galera cluster (node01) dengan MaxScale untuk kebutuhan authentikasi, monitoring dan yang lainnya.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[root@galera01 ~]#
[root@galera01 ~]# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 24
Server version: 10.3.17-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
MariaDB [(none)]>
MariaDB [(none)]> create user 'belajarlinux'@'192.168.10.15' identified by 'secret';
Query OK, 0 rows affected (0.024 sec)
MariaDB [(none)]> grant select on mysql.user to 'belajarlinux'@'192.168.10.15';
Query OK, 0 rows affected (0.019 sec)
MariaDB [(none)]> grant select on mysql.db to 'belajarlinux'@'192.168.10.15';
Query OK, 0 rows affected (0.012 sec)
MariaDB [(none)]> grant select on mysql.tables_priv to 'belajarlinux'@'192.168.10.15';
Query OK, 0 rows affected (0.021 sec)
MariaDB [(none)]> grant show databases on *.* to 'belajarlinux'@'192.168.10.15';
Query OK, 0 rows affected (0.015 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.013 sec)
MariaDB [(none)]>
Noted: IP yang diinput merupakan IP node04 (lb-mariadb-maxscale) dan silakan sesuaikan username dan password user sesuai keinginan
Selanjutnya buat user baru dengan hak istimewa untuk terhubung secara remote dari instance manapun. User ini akan digunakan oleh aplikasi kita untuk terhubung ke cluster MariaDB Galera.
1
2
3
4
5
6
7
8
9
10
11
12
13
MariaDB [(none)]>
MariaDB [(none)]> create user hamim@'%' identified by 'secret';
Query OK, 0 rows affected (0.027 sec)
MariaDB [(none)]> grant show databases on *.* to hamim@'%';
Query OK, 0 rows affected (0.034 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.027 sec)
MariaDB [(none)]> exit
Bye
[root@galera01 ~]#
Noted: Silakan sesuaikan nama user dengan keinginan Anda.
Selanjutnya konfigurasi MaxScale di node04. Sebenarnya secara default sudah ada konfigurasi yang dapat Anda gunakan, namun kali ini kami akan membuat konfigurasi yang baru (from scratch).
Silakan simpan default konfigurasi dari MaxScale
1
2
[root@mariadb-maxscale ~]#
[root@mariadb-maxscale ~]# mv /etc/maxscale.cnf /etc/maxscale.cnf.old
Buat konfigurasi baru MaxScale
1
2
[root@mariadb-maxscale ~]#
[root@mariadb-maxscale ~]# vim /etc/maxscale.cnf
Berikut full konfigurasi dari MaxScale
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#Global MaxScale Settings
[maxscale]
threads=auto
#Define Server Nodes
[galera01]
type=server
address=192.168.10.9
port=3306
protocol=MariaDBBackend
[galera02]
type=server
address=192.168.10.18
port=3306
protocol=MariaDBBackend
[galera03]
type=server
address=192.168.10.21
port=3306
protocol=MariaDBBackend
#Define Monitoring Service
[Galera-Monitor]
type=monitor
module=galeramon
servers=galera01,galera02,galera03
user=belajarlinux
password=secret
monitor_interval=1000
#Define Galera Service
[Galera-Service]
type=service
router=readconnroute
router_options=synced
servers=galera01,galera02,galera03
user=belajarlinux
password=secret
#Define Galera Listener
[Galera-Listener]
type=listener
service=Galera-Service
protocol=MariaDBClient
port=4306
#Define Administration Service
[MaxAdmin-Service]
type=service
router=cli
#Define Administration Listener
[MaxAdmin-Listener]
type=listener
service=MaxAdmin-Service
protocol=maxscaled
socket=default
_ Penjelasan beberapa rule konfigurasi MaxScale: _
- Global MaxScale Settings
Secara default konfigurasi Global MaxScale yaitu 1, namun Anda dapat menyesuaikan dengan kebutuhan ini, dalam case ini kami set menjadi auto - _ Define Server Nodes _
Disini Anda dapat menentukan berapa node atau server yang ingin Anda gunakan beserta IP, Port dari masing β masing node yang Anda gunakan. - _ Define Monitoring Service _
MaxScale akan menganalisis node atau server yang diberikan secara internal secara berkala berdasarkan modul monitor yang diberikan. Modul dasar diantaranya:
β _ β Mysqlmon β β Periksa kesehatan replikasi asli dan status server (Master atau Slave)._
β β Galeramon β β Kesehatan cluster Galera dan status node dipantau dengan modul. - _ Define Galera Service _
MaxScale bisa dibilang sebagai router untuk koneksi yang akan digunakan. MaxScale mempunyai beberapa algoritma router yang ditentukan diantaranya:
β βreadwritesplitβ : Digunakan untuk membagi incoming write ke satu master dan read ke sejumlah slave yang diberikan.
β βreadconnrouteβ β Ini akan membagi koneksi masuk dengan mekanisme round robin. Pada tutorial kali kami menggunakan readconncoute. - _ Define Galera Listener _
MaxScale membutuhkan listener untuk menerima koneksi masuk untuk setiap layanan yang ditentukan - _ Define Administration Service _
MaxScale monitoring console.
Jika sudah selanjutnya start dan enabl MaxScale service
1
2
3
[root@mariadb-maxscale ~]# systemctl start maxscale.service
[root@mariadb-maxscale ~]# systemctl enable maxscale.service
[root@mariadb-maxscale ~]#
Cek status service MaxScale
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@mariadb-maxscale ~]#
[root@mariadb-maxscale ~]# systemctl status maxscale.service
β maxscale.service - MariaDB MaxScale Database Proxy
Loaded: loaded (/usr/lib/systemd/system/maxscale.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2020-08-30 19:32:03 UTC; 13min ago
Main PID: 4749 (maxscale)
Tasks: 5 (limit: 11328)
Memory: 3.7M
CGroup: /system.slice/maxscale.service
ββ4749 /usr/bin/maxscale
Aug 30 19:32:03 mariadb-maxscale.nurhamim.my.id maxscale[4749]: Listening for connections at [::]:4306
Aug 30 19:32:03 mariadb-maxscale.nurhamim.my.id maxscale[4749]: Service 'Galera-Service' started (1/2)
Aug 30 19:32:03 mariadb-maxscale.nurhamim.my.id maxscale[4749]: Listening for connections at [/var/run/maxscale/maxadmin.sock]:0
Aug 30 19:32:03 mariadb-maxscale.nurhamim.my.id maxscale[4749]: Service 'MaxAdmin-Service' started (2/2)
Aug 30 19:32:03 mariadb-maxscale.nurhamim.my.id maxscale[4749]: Removing stale journal file for monitor 'Galera-Monitor'.
Aug 30 19:32:03 mariadb-maxscale.nurhamim.my.id maxscale[4749]: Server 'galera03' charset: latin1
Aug 30 19:32:03 mariadb-maxscale.nurhamim.my.id maxscale[4749]: Server 'galera03' version: 10.3.17-MariaDB
Aug 30 19:32:03 mariadb-maxscale.nurhamim.my.id maxscale[4749]: Server changed state: galera01[192.168.10.9:3306]: new_master. [Running] -> [Master, Synced, Running]
Aug 30 19:32:03 mariadb-maxscale.nurhamim.my.id maxscale[4749]: Server changed state: galera02[192.168.10.18:3306]: new_slave. [Running] -> [Slave, Synced, Running]
Aug 30 19:32:03 mariadb-maxscale.nurhamim.my.id maxscale[4749]: Server changed state: galera03[192.168.10.21:3306]: new_slave. [Running] -> [Slave, Synced, Running]
[root@mariadb-maxscale ~]#
Distatus diatas sudah terlihat untuk node01, node02, node03 sudah berada di MaxScale.
Selanjutnya verifikasi, untuk memverifikasi dapat mengguankan _ maxadmin atau maxcrl _ kita coba menggunakan maxadmin terlebih dahulu
1
2
3
4
5
6
7
8
9
10
11
12
[root@mariadb-maxscale ~]#
[root@mariadb-maxscale ~]# maxadmin
MaxScale> list servers
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server | Address | Port | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
galera01 | 192.168.10.9 | 3306 | 0 | Master, Synced, Running
galera02 | 192.168.10.18 | 3306 | 0 | Slave, Synced, Running
galera03 | 192.168.10.21 | 3306 | 0 | Slave, Synced, Running
-------------------+-----------------+-------+-------------+--------------------
MaxScale>
Berikut perintah dan output jika menggunakan _ maxctrl _
1
2
3
4
5
6
7
8
9
10
11
12
[root@mariadb-maxscale ~]#
[root@mariadb-maxscale ~]# maxctrl list servers
ββββββββββββ¬ββββββββββββββββ¬βββββββ¬ββββββββββββββ¬ββββββββββββββββββββββββββ¬βββββββ
β Server β Address β Port β Connections β State β GTID β
ββββββββββββΌββββββββββββββββΌβββββββΌββββββββββββββΌββββββββββββββββββββββββββΌβββββββ€
β galera01 β 192.168.10.9 β 3306 β 0 β Master, Synced, Running β β
ββββββββββββΌββββββββββββββββΌβββββββΌββββββββββββββΌββββββββββββββββββββββββββΌβββββββ€
β galera02 β 192.168.10.18 β 3306 β 0 β Slave, Synced, Running β β
ββββββββββββΌββββββββββββββββΌβββββββΌββββββββββββββΌββββββββββββββββββββββββββΌβββββββ€
β galera03 β 192.168.10.21 β 3306 β 0 β Slave, Synced, Running β β
ββββββββββββ΄ββββββββββββββββ΄βββββββ΄ββββββββββββββ΄ββββββββββββββββββββββββββ΄βββββββ
[root@mariadb-maxscale ~]#
Anda juga dapat melihat users, dan services yang ada menggunakan maxctl contohnya
Anda dapat mempelajari command line dari _ maxctrl _ pada link berikut: MaxCtrl Commands
Selanjutnya kita akan menguji coba failover atau load balancer MaxScale
Test 01: Matikan service mariadb node01 dan lihat statusnya di node MaxScale seharusnya down
Test 02: Mastikan service mariadb node02 dan lihat status node02 di MaxScale akan down
Terlihat pada gambar diatas tersisa node03 yang secara otomatis menjadi master, disinilah proses failover atau load balancer berjalan, dimana ada node yang terdeteksi down maka node yang lain akan menghandle nya.
Test 03: Start mariadb node02
Test 04: Start mariadb node01
Saat ini semua node database sudah running semua secara real time dan tentunya otomatis.
Selamat mencoba π