Tutorial Membangun MySQL Cluster-set Replikasi dengan Galera Cluster

MySQL secara bawaan menyediakan fitur bagi penggunanya untuk membangun sistem replikasi berbasis master-slave dimana ada satu node server yang menjadi master dengan kemampuan dapat menulis dan membaca suatu record ke database yang ada di dalamnya. Ada juga node server yang bertugas sebagai master cadangan dimana dia berperan sebagai asisten bagi master untuk mengurangi beban operasi database untuk proses read dan aggregasi.

Namun bila menggunakan fitur bawaan MySQL tentunya kamu harus mengkonfigurasi sendiri setiap node-nya dan membagi peran beberapa node untuk menjadi master dan sisanya menjadi master yang membantu node pertama.

Namun ada sebuah tools yang dapat mempermudah kita untuk membangun cluster-set replikasi untuk MySQL. Alat tersebut bernama Galera Cluster. Dimana MySQL yang biasa digunakan sudah dimodifikasi oleh mereka dan kita dapat menggunakannya untuk membangun cluster-set yang ingin digunakan.

Selebihnya silahkan simak di bagian pembahasan selanjutnya.

1. Instalasi

Di tutorial ini, kita akan mencoba membangun cluster-set replikasi MySQL dengan menggunakan 1 node sebagai master dan 2 node sebagai master cadangan. untuk tutorial ini, kamu dapat gunakan instance server yang memiliki RAM 1GB dan Harddisk 32GB. Bila tak memiliki VPS sendiri, kamu dapat gunakan juga Vagrant sebagai simulasi.

Kita asumsikan bahwa kamu telah berhasil memiliki tiga buah server serta sudah memasang sistem operasinya juga. Anggap saja kamu telah memasang Ubuntu beserta melakukan konfigurasi awal seperti sudo apt-get update.

Kita asumsikan bahwa alamat IP yang dimiliki antara lain: 192.168.33.50, 192.168.33.51, 192.168.33.52.

1.1 Menambahkan APT Source Galera Cluster di Server

Kita mulai dari node pertama dulu. Mari kita tambahkan apt-key di server pertama:

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv BC19DDBA

Kemudian buat source list baru dengan nama galera.list:

$ sudo nano /etc/apt/sources.list.d/galera.list

Isikan beberapa alamat sumber repositori berikut ini:

deb http://releases.galeracluster.com/mysql-wsrep-5.6/ubuntu xenial main
deb http://releases.galeracluster.com/galera-3/ubuntu xenial main

Lalu keluarlah dari nano dan buka file galera.pref untuk mengatur pilihan versi yang akan dipasang di server:

$ sudo nano /etc/apt/preferences.d/galera.pref

Ubah konfigurasi untuk pemilihan versi Galera Cluster menjadi seperti ini:

# Prefer Codership repository
Package: *
Pin: origin releases.galeracluster.com
Pin-Priority: 1001

Terakhir, mari kita update dahulu sistem operasi Ubuntu kita beserta apt-source yang akan digunakan:

sudo apt-get update

Silahkan ulangi proses diatas untuk node 2 dan 3 yang akan digunakan sebagai master tambahan.

1.2 Memasang MySQL dan Galera Cluster

Setelah menambahkan sumber repositori untuk Galera Cluster, sekarang kita akan lakukan proses instalasi Galera Cluster dan MySQL. Lakukan dari node 1 dahulu:

$ sudo apt-get install galera-3 galera-arbitrator-3 mysql-wsrep-5.6

Setelah memastikan bahwa Galera Cluster dan MySQL versi Galera sudah terpasang, tinggal kita pasangrsync di sistem operasi kita:

sudo apt-get install rsync

Perangkat rsync digunakan oleh Galera Cluster untuk menyebar setiap perubahan yang ada di master ke master lainnya. Selanjutnya silahkan lakukan dua perintah diatas di node 2 dan 3.

2. Konfigurasi Galera Cluster

Konfigurasi ini dibagi menjadi dua, pertama adalah konfigurasi untuk mengumpulkan node yang ada menjadi cluster-set, sedangkan yang kedua adalah untuk membuka firewall di masing – masing server agar dapat saling mengakses satu sama lain.

Sekarang mari kita mulai konfigurasinya.

2.1 Konfigurasi setiap Node untuk Cluster-set

Dimulai dari node 1 kita akan mulai mengubah konfigurasi Galera Cluster yang ada di dalamnya. Pertama silahkan buka file galera.cnf yang ada di node 1:

$ sudo nano /etc/mysql/conf.d/galera.cnf

Lalu ubahlah beberapa bagian isinya menjadi seperti konfigurasi dibawah ini:

[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

# Galera Cluster Configuration
wsrep_cluster_name="mysql_cluster_demo"
wsrep_cluster_address="gcomm://192.168.33.50,192.168.33.51,192.168.33.52"

# Galera Synchronization Configuration
wsrep_sst_method=rsync

# Galera Node Configuration
wsrep_node_address="192.168.33.50"
wsrep_node_name="node_1"

Selanjutnya silahkan lakukan dua perintah diatas di node 2 dan 3. Karena relatif sama isi konfigurasinya maka untuk node 2, kamu hanya perlu mengubah bagian ini:

...

# Galera Node Configuration
wsrep_node_address="192.168.33.51"
wsrep_node_name="node_2"

Dan untuk node 3, kamu hanya perlu mengubah bagian ini:

...

# Galera Node Configuration
wsrep_node_address="192.168.33.52"
wsrep_node_name="node_3"

Mudah bukan? mari kita lanjutkan ke bagian berikutnya.

2.2 Konfigurasi Firewall

Karena setiap node harus dapat mengakses satu sama lain node yang tergabung dalam cluster-set maka beberapa port yang diperlukan harus dibuka agar Galera Cluster dapat berjalan semestinya.

Dimulai dari node 1 silahkan ubah konfigurasi firewall dengan mengikuti perintah dibawah ini:

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

Selanjutnya silahkan lakukan dua perintah diatas di node 2 dan 3.

3. Pengujian

3.1 Menjalankan Setiap Node

Pada node 1 silahkan eksekusi beberapa perintah berikut:

$ sudo systemctl stop mysql
$ sudo /etc/init.d/mysql start --wsrep-new-cluster

Dan periksa status cluster dengan perintah berikut:

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

Maka kamu akan melihat informasi seperti ini:

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

Sedangkan di node 2, silahkan eksekusi beberapa perintah berikut:

$ sudo systemctl stop mysql
$ sudo systemctl start mysql

Dan periksa status cluster dengan perintah berikut:

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

Maka kamu akan melihat informasi seperti ini:

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

Terakhir di node 3, kita lakukan perintah yang hampir sama dengan yang diterapkan di node 2:

$ sudo systemctl stop mysql
$ sudo systemctl start mysql

Dan periksa status cluster dengan perintah berikut:

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

Maka kamu akan melihat informasi seperti ini:

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

Dengan demikian selesai sudah proses instalasi dan konfigurasi MySQL dengan menjadikannya cluster-set replikasi dengan menggunakan Galera Cluster. Sekarang saatnya menguji coba DDL dan DML pada cluster-set tersebut.

3.2 Melakukan DDL dan DML di Cluster-set

Untuk pengujian lebih lanjut, kita dapat membuat database dan table di salah satu node, lalu lihat apakah database dan table dapat dibaca di node lain. Misal di node 1 mari kita coba eksekusi perintah berikut:

$ mysql -u root -p

mysql> create database mydb;
Query OK, 1 row affected (0.01 sec)

mysql> use mydb;
Database changed

mysql> create table sensor(id INT PRIMARY KEY AUTO_INCREMENT, temperature FLOAT NOT NULL, created_at TIMESTAMP NOT NULL);

Sekarang silahkan coba buka konsol yang mengakses node 2 dan 3, lalu coba eksekusi beberapa perintah berikut di masing – masing node:

$ mysql -u root -p

mysql>  use mydb;
Database changed

mysql> show tables;
+----------------+
| Tables_in_mydb |
+----------------+
| sensor         |
+----------------+
1 row in set (0.07 sec)

mysql> describe sensor;
+-------------+-----------+------+-----+-------------------+-----------------------------+
| Field       | Type      | Null | Key | Default           | Extra                       |
+-------------+-----------+------+-----+-------------------+-----------------------------+
| id          | int(11)   | NO   | PRI | NULL              | auto_increment              |
| temperature | float     | NO   |     | NULL              |                             |
| created_at  | timestamp | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------------+-----------+------+-----+-------------------+-----------------------------+
3 rows in set (0.20 sec)

Sekarang di konsol yang membuka node 3, silahkan coba tambahkan data ke tabel sensor, dengan query berikut ini:

mysql> insert into sensor (temperature) values (10.4);
Query OK, 1 row affected (0.12 sec)

mysql> insert into sensor (temperature) values (31.4);
Query OK, 1 row affected (0.06 sec)

mysql> insert into sensor (temperature) values (77.8);
Query OK, 1 row affected (0.18 sec)

Hampir sama dengan pengujian sebelumnya, coba query data yang baru saja di masukkan di konsol node 1 dan 2 dengan perintah yang sama dibawah ini:

mysql> select * from sensor;
+----+-------------+---------------------+
| id | temperature | created_at          |
+----+-------------+---------------------+
|  1 |        10.4 | 2018-07-28 20:02:15 |
|  2 |        31.4 | 2018-07-28 20:02:19 |
|  3 |        77.8 | 2018-07-28 20:02:25 |
+----+-------------+---------------------+
3 rows in set (0.00 sec)

4. Bagaimana Cara Menambah Node Baru?

Bila kamu perhatikan bagaimana kita mengkonfigurasi Galera Cluster, salah satu konfigurasi sederhana yang kita lakukan adalah mendaftarkan setiap alamat IP dari node yang akan dijadikan anggota cluster . Hanya saja salah satu hal yang harus diperhatikan adalah saat menambah node baru,

Cara mudah yang paling beresiko adalah mematikan semua node yang tergabung sebelumnya, kemudian diubah konfigurasinya dengan menambah alamat IP baru, dan akhirnya kita nyalakan kembali semua node yang ada.

 

source : http://labbasdat.cs.upi.edu/artikel/tutorial-membangun-mysql-cluster-set-replikasi-dengan-galera/

Posted on: December 30, 2020, by :