Taufik Mulyana
Taufik Mulyana
Linux System Administrator, Interested in Linux, Cloud, Containers
March 5, 2018 4 min read

Clustering 3 Node MariaDB dengan Galera Cluster

Clustering 3 Node MariaDB dengan Galera Cluster

Clustering 3 Node MariaDB dengan Galera Cluster, Galera Cluster merupakan synchronous multi master untuk MariaDB, Galera hanya tersedia pada Distribusi GNU/Linux saja. dan hanya mendukung XtraDB/InnoDB storage engine, pada saat artikel ini ditulis dukungan untuk MyISAM masih experimental, galera sangat membantu untuk membuat sistem yang high available, dengan menggunakan Galera saya tidak perlu pusing jika ada server database yang mati, server lain akan otomatis menggantikannya dan tidak perlu khawatir akan kehilangan data, data akan tersinkron satu sama lain, dan untuk penambahan node terbilang cukup mudah.

Saya mencoba 3 node MariaDB, dan diatasnya terdapat sebuah LoadBalancer yang nantinya akan mendistribusikan beban ke setiap node, berikut infra yang saya buat

galera cluster

Instalasi MariaDB

Tambahkan repositori mariadb terlebih dahulu

$ sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
$ sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://mariadb.biz.net.id/repo/10.1/ubuntu xenial main'

Pasang MariaDB

$ sudo apt update
$ sudo apt install mariadb-server

Konfigurasi Galera

buka berkas my.cnf lalu cari bagian [galera], hilangkan tanda # pada konfigurasi yang akan kita gunakan, dan sesuaikan sesuai yang kita butuhkan, kira-kira seperti dibawah

$ sudo vim /etc/mysql/my.cnf

[galera]
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2

# Galera Cluster Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so

# Galera Provider Configuration
wsrep_cluster_address=gcomm://192.168.0.1,192.168.0.2,192.168.0.3
wsrep_cluster_name=mycluster

# Galera Node Configuration
wsrep_node_address=192.168.0.1
wsrep_node_name=node-1

# Galera Synchronization Configuration
wsrep_sst_method=rsync

# Allow server to accept connections on all interfaces.
bind-address=0.0.0.0

# Optional setting
#wsrep_slave_threads=1
innodb_flush_log_at_trx_commit=2

untuk setiap nodes tinggal lakukan langkah yang sama, wsrep_cluster_address=gcomm://xxx.xxx.xxx.xxx di isi dengan alamat ip setiap node, wsrep_cluster_name diisi dengan nama cluster, untuk wsrep_cluster_address dan wsrep_cluster_name disamakan untuk setiap node karena berada dalam satu cluster, wsrep_node_address diisi dengan alamt ip node, dan wsrep_node_name di isi dengan nama node

Konfigurasi Firewall

ijinkan semua port yang akan digunakan, berikut list port yang akan kita gunakan meliputi port mariadb dan galera

  • 3306 untuk koneksi klien mariadb
  • 4567 untuk trafik galera cluster replication, multicast replication menggunakan dua protokol TCP dan UDP
  • 4568 untuk Incremental State Transfer
  • 4444 untuk semua kondisi transfer snapshot

berikut perintah untuk mengijinkan port diatas dengan ufw

$ sudo ufw allow 3306,4567,4568,4444/tcp
$ sudo ufw allow 4567/udp

Menjalankan Cluster

pastikan semua layanan mariadb pada setiap node mati

$ sudo systemctl stop mariadb

Jalankan Node pertama dengan perintah galera_new_cluster

node-1 $ sudo galera_new_cluster

jika tidak terjadi galat, galera telah berhasil dijalankan untuk memastikannya akan kita cek di prompt mariadb

node-1 $ mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"

+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size |   1   |
+--------------------+-------+
1 row in set (0.002 sec)

dengan kueri diatas kan menampilkan jumlah node yang berada di cluster, untuk node berikutnya kita hanya perlu menjalankan layanan mariadb seperti biasa

node-2 $ sudo systemctl start mariadb

dan kita cek kembali apakah nodenya bertambah

node-2 $ mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"

+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size |   2   |
+--------------------+-------+
1 row in set (0.002 sec)

lakukan juga pada node yang ketiga

node-3 $ sudo systemctl start mariadb
node-3 $ mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"

+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size |   3   |
+--------------------+-------+
1 row in set (0.001 sec)

konfigurasi telah selesai, masing-masing node telah terhubung satu sama lain, ketika ada write di salah satu node maka node tersebut akan melakukan commit ke node lain, sehingga data disetiap node akan sama.

sekian, semoga bermanfaat 🙂