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 🙂

8 Komentar
    • tidak perlu direstart, di node baru di bagian
      cluster_wsrep_address=gcomm://
      tinggal tambahkan ip address node baru, dan pada wsrep_node_address dan wsrep_node_name tinggal di sesuaikan, lalu tinggal jalankan mariadb seperti biasa, dan akan otomatis join ke cluster.
      systemctl start mariadb
      tinggal cek aja apakah cluster sizenya sudah bertambah
      show status like "wsrep_cluster_size"

      • Oke mas,,
        tapi saya ada masalah, ada node yg mati, jadi data gak sama dengan server lain,,
        1. gimana untuk sinkron ulang nya..
        2. jadi saya coba sinkron kn ulang dengan jalankan galera_new_cluster, eh ketika start mariadb, malah gak bisa ,, mlah eror gini

        tbosss@tbosss:~$ sudo /etc/init.d/mysql start
        [….] Starting mysql (via systemctl): mysql.serviceJob for mysql.service failed because the control process exited with error code.
        See “systemctl status mysql.service” and “journalctl -xe” for details.
        failed!

        3. karna error gitu cluster saya rusak,, jadi buat ulang lagi dengan nama cluster baru pun tetap gak bisa,, akhir nya saya uninsstall lagi maria db nya..
        4. bisa gak kalau cluster rusak gak perlu uninstall maria db,, kn sulit kalau db nya udah banyak,, butuh waktu satu harian untuk install baru dan backup.

        karna kebetulan di kantor saya db nya udah banyak.
        mohon pencerahannya mas

        • semisal ada salah satu node yang mati, tinggal restart service mariadbnya aja di node yg mati, dia akan otomatis join lagi ke cluster. ga perlu jalanin galera_new_cluster lagi.

          semisal pas di restart ga bisa join lagi silahkan cek lognya, bisa diliat pake journalctl

  • mas.. kalau install cluster tpi file my.cnf nya gak ada yg ada hanya file mariadb.cnf

    ===isi nya hanya gini ===

    # MariaDB-specific config file.
    # Read by /etc/mysql/my.cnf

    [client]
    # Default is Latin1, if you need UTF-8 set this (also in server section)
    #default-character-set = utf8

    [mysqld]
    #
    # * Character sets
    #
    # Default is Latin1, if you need UTF-8 set all this (also in client section)
    #
    #character-set-server = utf8
    #collation-server = utf8_general_ci
    #character_set_server = utf8
    #collation_server = utf8_general_ci
    # Import all .cnf files from configuration directory
    !includedir /etc/mysql/mariadb.conf.d/

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *