Anda di halaman 1dari 12

PRAKTIKUM V

Replikasi Database

1. Tujuan
Setelah menyelesaikan modul ini, anda diharapkan dapat :
1. Mahasiswa memahami konsep Replikasi Database
2. Mahasiswa mampu membuat Replikasi Database
3. Mahasiswa mampu menerapkan Replikasi Database pada lingkungan server

2. Dasar Teori
MySQL Group Replication adalah plugin untuk membuat arsitektur database
yang sangat toleran terhadap kesalahan. Replikasi grup menghilangkan
kemungkinan satu titik kegagalan / single point of failure (SPOF). Dalam modul
ini, Anda akan menginstal dan mengonfigurasi plugin MySQL Group Replication
untuk membuat cluster database yang sangat tersedia.

3. Daftar Alat dan Bahan


1. Personal Computer (Min. 4Core Processor, 8GB RAM)
2. Tools VirtualBox
3. Apche web server

34
4. Langkah Kerja
4.1 Persiapan
Pastikan memiliki minimal 2 server (boleh lebih) baik fisik, vps atau dalam
bentuk virtual machine. Pastikan sistem operasi yang digunakan merupakan
sistem operasi Ubuntuk versi 18.04 keatas, versi 20.04 yang direkomendasikan.

Catat IP dari masing-masing server yang digunakan, pada kasus ini, missal IP
yang digunakan:

1. 192.0.2.1 sebagai Master Server (VM-1)


2. 192.0.2.2 sebagai Node Server 1 (VM-2)
3. 192.0.2.3 sebagai Node Server 2 (VM-3)
* IP anda bisa saja berbeda, silahkan disesuaikan

4.2 Install MySQL Server pada Tiap Server


1. Lakukan SSH ke semua VM
2. Install MySQL server di semua VM:
$ sudo apt install mysql-server

3. Login pada MySQL sebagai root


$ sudo mysql

4. Ganti password root


mysql> ALTER USER 'root'@'localhost' IDENTIFIED
WITH mysql_native_password by 'Qwerty123456@';
Ganti Qwerty123456@ dengan password yang dikehendaki, syarat: harus
ada huruf besar, huruf kecil, angka dan karakter.
5. Keluar dari mysql
mysql > exit

6. Buat Root password untuk MySQL pada tiap VM (samakan passwordnya


untuk tiap server):

35
$ sudo mysql_secure_installation
- Jika ada permintaan password, masukkan password yang sama
dengan langkah 4.
- Masukkan no, untuk semua pilihan yang diminta
* Lakukan proses diatas pada ketiga server

4.3 Membuat Nama Group Replication


1. Lakukan SSH ke Master Server (VM-1)
2. Login ke MySQL
$ sudo mysql -u root -p
* masukkan password jika diminta
3. Generate UUID
mysql> SELECT UUID();

Contoh hasil:
+--------------------------------------+

| UUID() |

+--------------------------------------+

| 00000000-1111-2222-3333-444444444444 |

+--------------------------------------+

4. Catat UUID yang muncul, akan digunakan sebagai nama replikasi di


konfigurasi slave server pada tahap berikutnya.
5. Keluar dari MySQL
mysql> QUIT;

4.4 Konfigurasi Replikasi Master Server (VM-1)


1. SSH ke Server Master (VM-1)

36
2. Edit /etc/mysql/my.cnf
$ sudo nano /etc/mysql/my.cnf

3. Masukkan konfigurasi berikut pada bagian akhir file my.cnf


[mysqld]

server_id=1

bind-address=0.0.0.0

gtid_mode=ON

enforce_gtid_consistency=ON

binlog_checksum=NONE

plugin_load_add='group_replication.so'

group_replication_single_primary_mode=OFF

loose-group_replication_group_name="00000000-1111-
2222-3333-444444444444"

loose-group_replication_start_on_boot=ON

loose-group_replication_local_address=
"192.0.2.1:33061"

loose-
group_replication_group_seeds="192.0.2.1:33061,
192.0.2.2:33061, 192.0.2.3:33061"

loose-group_replication_bootstrap_group=OFF

report_host=192.0.2.1
Ganti:

37
- 00000000-1111-2222-3333-444444444444 dengan UUID dari
langkah 4.3.
- 192.0.2.1 dengan IP VM-1
- 192.0.2.2 dengan IP VM-2
- 192.0.2.3 dengan IP VM-3

Keterangan
- server_id=1 (Server 1 pada lingkungan replikasi)
- bind-address=0.0.0.0 (Listen semua IP yang ada pada
lingkungan replikasi)
- gtid_mode=ON (Jalankan replikasi dengan pengidentifikasi transaksi
global)
- enforce_gtid_consistency=ON (MySQL hanya akan
mengeksekusi query yang dapat dicatat dengan aman pada replikasi)
- plugin_load_add='group_replication.so' (jalankan
plugin replikasi)
- group_replication_single_primary_mode=OFF (semua
server punya akses untuk write dan read)
- loose-group_replication_group_name (nama UUID group
replikasi)
- loose-group_replication_start_on_boot (jalankan / tidak
replikasi jika server terestart)
- loose-group_replication_local_address (IP server yang
sedang di konfigurasi)
- loose-group_replication_group_seeds (IP semua server
yang terlibat replikasi)
- loose-group_replication_bootstrap_group=OFF
(mencegah bootstrap group agar tidak ada konflik)

38
- report_host (IP server yang sedang di konfigurasi)
4. Restart MySQL
$ sudo service mysql restart

4.5 Membuat Replication User dan Database Replikasi


1. Login pada MySQL di VM-1
$ sudo mysql -u root -p

2. Buat Replication User


mysql> SET SQL_LOG_BIN=0;

mysql> SET GLOBAL read_only = OFF;

mysql> CREATE USER 'replication_user'@'%'


IDENTIFIED WITH mysql_native_password BY
'Qwerty123456@';

mysql> GRANT REPLICATION SLAVE ON *.* TO


'replication_user'@'%';

mysql> FLUSH PRIVILEGES;

mysql> SET SQL_LOG_BIN=1;

mysql> CHANGE MASTER TO


MASTER_USER='replication_user',
MASTER_PASSWORD='Qwerty123456@' FOR CHANNEL
'group_replication_recovery';

Ganti:
- Qwerty123456@ dengan password MySQL, syarat: harus ada huruf
besar, huruf kecil, angka dan karakter

3. Cek tidak ada nama group yang sama, kemudian jalankan Group repliaksi
mysql> SET GLOBAL
group_replication_bootstrap_group=ON;

39
mysql> START GROUP_REPLICATION;

4. Matikan group_replication_bootstrap_group untuk menghindari pembuatan


banyak grup
mysql> SET GLOBAL
group_replication_bootstrap_group=OFF;

5. Verifikasi status grup replication_group_members


mysql> SELECT MEMBER_ID, MEMBER_HOST, MEMBER_STATE
FROM performance_schema.replication_group_members;

* Verifikasi output contoh mirip dengan ini:


+--------------------------------------+-------------+--------------+

| MEMBER_ID | MEMBER_HOST | MEMBER_STATE |

+--------------------------------------+-------------+--------------+

| 11111111-40c4-11e9-92b4-7a4c400acda6 | 192.0.2.1 | ONLINE |

+--------------------------------------+-------------+--------------+

6. Buat database dengan nama simak


mysql> CREATE DATABASE simak;

7. Use ke database simak


mysql> USE simak;

8. Buat test table dengan nama mahasiswa


mysql> CREATE TABLE mahasiswa (id INT PRIMARY KEY,
nama_mhs VARCHAR(30) NOT NULL) Engine = InnoDB;

9. Cek hasil table


mysql> SHOW TABLES;

40
+----------------------------+

| Tables_in_test_replication |

+----------------------------+

| mahasiswa |

+----------------------------+

4.6 Konfigurasi Node Server (VM-2 dan VM-3)


* Lakukan langkah-langkah berikut pada kedua server node
1. SSH ke VM-2/VM-3
2. Edit /etc/mysql/my.cnf
$ sudo nano /etc/mysql/my.cnf

3. Masukkan konfigurasi berikut pada bagian bawah dan save:


[mysqld]

server_id=2

bind-address=0.0.0.0

gtid_mode=ON

enforce_gtid_consistency=ON

binlog_checksum=NONE

plugin_load_add='group_replication.so'

group_replication_single_primary_mode=OFF

loose-group_replication_group_name="00000000-1111-

41
2222-3333-444444444444"

loose-group_replication_start_on_boot=ON

loose-group_replication_local_address=
"192.0.2.2:33061"

loose-
group_replication_group_seeds="192.0.2.1:33061,
192.0.2.2:33061, 192.0.2.3:33061"

loose-group_replication_bootstrap_group=OFF

report_host=192.0.2.2

Ganti:
- server_id=2 dengan 2 (untuk VM-2) dan 3 (untuk VM-3)
- 00000000-1111-2222-3333-444444444444 dengan UUID dari
langkah 4.3
- loose-group_replication_local_address=
"192.0.2.2:33061" dengan IP node server VM-2 / VM-3 (yang
sedang di konfigurasi)
- 192.0.2.1 dengan IP VM-1
- 192.0.2.2 dengan IP VM-2
- 192.0.2.3 dengan IP VM-3
- report_host=192.0.2.2 dengan IP node server VM-2 / VM-3
(yang sedang di konfigurasi)

4. Restart MySQL
$ sudo service mysql restart

5. Login ke MySQL
$ sudo mysql -u root -p

6. Buat replication user untuk server node (VM-2 dan VM-3):

42
mysql> SET SQL_LOG_BIN=0;

mysql> SET GLOBAL read_only = OFF;

mysql> CREATE USER 'replication_user'@'%'


IDENTIFIED WITH mysql_native_password BY
'Qwerty123456@';

mysql> GRANT REPLICATION SLAVE ON *.* TO


'replication_user'@'%';

mysql> FLUSH PRIVILEGES;

mysql> SET SQL_LOG_BIN=1;

mysql> CHANGE MASTER TO


MASTER_USER='replication_user',
MASTER_PASSWORD='Qwerty123456@' FOR CHANNEL
'group_replication_recovery';

Ganti:
- Qwerty123456@ dengan password MySQL, syarat: harus ada huruf
besar, huruf kecil, angka dan karakter

7. Jalankan replication pluggin


mysql> START GROUP_REPLICATION;

8. Verifikasi Server 2 / 3 sudah menjadi anggota grup replikasi


mysql> SELECT MEMBER_ID, MEMBER_HOST, MEMBER_STATE
FROM performance_schema.replication_group_members;

Hasil kurang lebih (tergantung sudah berapa server yang dihubungkan):


+--------------------------------------+-------------+--------------+

| MEMBER_ID | MEMBER_HOST | MEMBER_STATE |

+--------------------------------------+-------------+--------------+

| 11111111-40c4-11e9-92b4-7a4c400acda6 | 192.0.2.1 | ONLINE |

43
| 22222222-40c4-11e9-92b4-7a4c400acda6 | 192.0.2.2 | ONLINE |

+--------------------------------------+-------------+--------------+
* Ulangi tahap diatas untuk Server 3 dan seterusnya

4.7 Uji Coba Replikasi


1. Masuk ke MySQL tiap server
$ sudo mysql –u root -p

2. Verifikasi server 2 & 3 sudah dapat mengakses replikasi database yang dibuat
server 1
mysql> SHOW databases;

+--------------------+

| Database |

+--------------------+

| simak |

+--------------------+

3. Verifikasi server 2 / 3 sudah dapat mengakses replikasi table yang dibuat


server 1
mysql> USE simak;
mysql> SHOW TABLES;

+----------------------------+

| Tables_in_test_replication |

+----------------------------+

44
| mahasiswa |

+----------------------------+

4. Masukkan data pada table mahasiswa


mysql> insert into mahasiswa VALUES(1, 'yasir');

5. Cek hasilnya di semua server


mysql> select * from mahasiswa;

5. Pertanyaan dan Tugas


1. Buat replikasi database pada VM
2. Buktikan ujicoba replikasi database berjalan

45

Anda mungkin juga menyukai