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.