Saat website/aplikasi anda menjadi populer, kebutuhan database juga meningkat. Selain upgrade hardware database MySQL alternative lainnya menggunakan cluster. Salah satu yang populer digunakan adalah Galera Cluster, beberapa kelebihannya

– True Multi-master, Active-Active Cluster Read and write to any node at any time.
– Synchronous Replication No slave lag, no data is lost at node crash.
– Tightly Coupled All nodes hold the same state. No diverged data between nodes allowed.
– Multi-threaded Slave For better performance. For any workload.
– No Master-Slave Failover Operations or Use of VIP.
– Hot Standby No downtime during failover (since there is no failover).
– Automatic Node Provisioning No need to manually back up the database and copy it to the new node.
– Supports InnoDB.
– Transparent to Applications Required no (or minimal changes) to the application.
– No Read and Write Splitting Needed.
– Easy to Use and Deploy

Untuk kebutuhan server sendiri disarankan minimal 3 server dengan spesifikasi yang sama/mirip, spesifikasi ini sangat penting sama antar server agar tidak menjadi titik lemah dari cluster. Karena semua server di galera cluster dianggap sama, maka bila ada server yang paling kecil didalamnya, dia akan mengikuti standar tersebut.

Disini saya akan membuat 3 buah server/cloud untuk Galera Cluster

64 GB Memory
2x 512 SSD

Ketiga server memiliki IP dan dinamai

192.168.1.1 cluster01
192.168.1.2 cluster02
192.168.1.3 cluster03

Install MariaDB

Install MariaDB di masing-masing server, gunakan versi yang sama. Diketiga server jalankan

apt update; apt upgrade -y
apt install mariadb-server -y
systemctl stop mariadb

di repository Debian 10, versi MariaDB yang digunakan adalah 10.3, disini sudah termasuk galera, jadi tidak perlu di install terpisah.

Server Database 1

Buat baru file /etc/mysql/mariadb.conf.d/galera.cnf, tambahkan konfigurasi

[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
 
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
 
wsrep_cluster_name="jaranguda_cluster"
wsrep_cluster_address="gcomm://192.168.1.1,192.168.1.2,192.168.1.3"
 
wsrep_sst_method=rsync
 
wsrep_node_address="192.168.1.1"
wsrep_node_name="cluster01"

jalankan galera_new_cluster dari terminal. Ingat hanya jalankan perintah ini satu kali. Di server selanjutnya hanya menjalankan systemctl start mariadb
Cek status server cluster

mysql  -e "SHOW STATUS LIKE 'wsrep_cluster_size'"

outputnya

+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 1     |
+--------------------+-------+

Server Database 2

Buat baru file /etc/mysql/mariadb.conf.d/galera.cnf, tambahkan konfigurasi

[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
 
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
 
wsrep_cluster_name="jaranguda_cluster"
wsrep_cluster_address="gcomm://192.168.1.1,192.168.1.2,192.168.1.3"
 
wsrep_sst_method=rsync
 
wsrep_node_address="192.168.1.2"
wsrep_node_name="cluster02"

jalankan mariadb

systemctl start mariadb

Cek status server cluster

mysql  -e "SHOW STATUS LIKE 'wsrep_cluster_size'"

outputnya

+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 2     |
+--------------------+-------+

Server Database 3

Buat baru file /etc/mysql/mariadb.conf.d/galera.cnf, tambahkan konfigurasi

[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
 
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
 
wsrep_cluster_name="jaranguda_cluster"
wsrep_cluster_address="gcomm://192.168.1.1,192.168.1.2,192.168.1.3"
 
wsrep_sst_method=rsync
 
wsrep_node_address="192.168.1.3"
wsrep_node_name="cluster03"

jalankan mariadb

systemctl start mariadb

Cek status server cluster

mysql  -e "SHOW STATUS LIKE 'wsrep_cluster_size'"

outputnya

+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 3     |
+--------------------+-------+

Testing Cluster

Dari server 1 buat database dan table baru

CREATE DATABASE jaranguda;
CREATE TABLE jaranguda.cluster ( `id` INT NOT NULL AUTO_INCREMENT , `pesan` TEXT NOT NULL , PRIMARY KEY (`id`));
INSERT INTO `cluster` (`id`, `pesan`) VALUES (NULL, 'hello');

dari server 2 dan 3, coba jalankan

mysql -e "select * from jaranguda.cluster"

hasilnya di kedua server

+----+-------+
| id | pesan |
+----+-------+
|  1 | hello |
+----+-------+

Catatan

Setelah terinstall galera cluster, sekarang muncul pertanyaan, bagaimana cara untuk konek ke cluster tersebut, karena ada 3 ip yang digunakan. Cara pertama yang tidak perlu ribet tetapi reliabilitynya dipertanyakan menggunakan IP tables untuk rotating ketiga IP tersebut. Cara lainnya adalah dengan menggunakan HaProxy, sangat disarankan karena HaProxy memiliki health check untuk monitoring sederhana status cluster anda.

Leave a comment

Your email address will not be published. Required fields are marked *