Wednesday, June 15, 2016

Replikasi Database MySQL Master-Master pada Ubuntu

Pada pembahasan kali ini saya akan coba menjelaskan beberapa replikasi database MySQL dengan metode master-master(kadang disebut aktif-aktif). Singkatnya membuat 2 server database mysql yang saling sinkron sehingga data didalamnya sama. 

Alasan menerapkan replikasi pada database server adalah agar ketersediaan database tinggi, jadi ketika salah satu node mati maka ketersediaan database akan tetap ada ditangani oleh node yang masih hidup.

Pada contoh kasus kali ini kita akan menggunakan:
  • Server A : 192.168.0.100
  • Server B : 192.168.0.101

OS : Ubuntu 16.04 Lts (Xenial)

=> Install MySQL 
 $sudo apt-get update
 $sudo install mysql-server mysql-client -y  

=> Pastikan service mysql dengan status running, dan saran jika ingin menjalankan mysql pada saat boot/server dinyalakan dapat menggunakan
 $sudo systemctl enable mysql

=> Modifikasi konfigurasi MySQL
Pada langkah ini kita dapat menambahkan code-code dibawah pada file “/etc/mysql/my.cnf” atau 
membuat baru file konfigurasi pada folder “/etc/mysql/mysqld/conf.d/mysql-rep.cnf”
Pada kasus ini saya membuat file baru pada tiap server

 $sudo vi /etc/mysql/mysql.conf.d/mysql-rep.cnf  


Server A
[mysqld]
bind-address                    = 192.168.0.100
server_id                       = 1
log_bin                         = /var/log/mysql/mysql-bin.log
log_bin_index                   = /var/log/mysql/mysql-bin.log.index
relay_log                       = /var/log/mysql/mysql-relay-bin
relay_log_index                 = /var/log/mysql/mysql-relay-bin.index
expire_logs_days                = 10
max_binlog_size                 = 100M
binlog-format                   = row
log_slave_updates               = 1
auto-increment-offset           = 1
auto-increment-increment        = 2

Server B
[mysqld]
bind-address                    = 192.168.0.101
server_id                       = 2
log_bin                         = /var/log/mysql/mysql-bin.log
log_bin_index                   = /var/log/mysql/mysql-bin.log.index
relay_log                       = /var/log/mysql/mysql-relay-bin
relay_log_index                 = /var/log/mysql/mysql-relay-bin.index
expire_logs_days                = 10
max_binlog_size                 = 100M
binlog-format                   = row
log_slave_updates               = 1
auto-increment-offset           = 2
auto-increment-increment        = 2

Setelah melakukan konfigurasi mysql pada tiap server, restart mysql service.



=> Buat user mysql dan beri spesifik akses
Login mysql untuk setiap server jalankan perintah

 $mysql -u root -p

 mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication'@'XXXX' IDENTIFIED BY 'Password'; 

Makna 'XXXX' adalah IP/Hostname dari server lawan dan code grant tersebut berfungsi untuk membuat user 'replication' serta memiliki akses untuk diakses dari alamat lawan.

Pastikan bahwa user 'replication' dapat mengakses mysql server lawan.
$mysql -ureplication -p -h 'XXXX' -P 3306

 $mysql -ureplication -p -h 'XXXX' -P 3306


=> Konfigurasi Database Replikasi

- Pada server A login ke mysql dan lihat master status


Informasi master database ini akan digunakan berikutnya pada server lawan.
Pada server B login ke mysql dan assign mysql server lawan sebagai Master dengan cara:

mysql> STOP SLAVE; 
mysql> CHANGE MASTER TO master_host='192.168.0.100', master_port=3306, master_user='replication', master_password='password', master_log_file='mysql-bin.000012', master_log_pos=154; 
mysql> START SLAVE;

- Pada server B login ke mysql dan lihat master status


Pada server A login ke mysql dan assign mysql server lawan sebagai Master dengan cara:

mysql> STOP SLAVE; 
mysql> CHANGE MASTER TO master_host='192.168.0.101', master_port=3306, master_user='replication', master_password='password', master_log_file='mysql-bin.000004', master_log_pos=154; 
mysql> START SLAVE;

Setelah langkah-langkah tersebut, maka kedua database server tersebut telah sinkron. Tes replikasi database dengan create database di server A, lalu cek database tersebut apakah sudah ada di server B

Server A
mysql> create database test;

Server B
mysql> show databases;

Hasil yang tampil seharusnya database test ada di daftar database pada server B. Demikianlah cluster database MySQL master-master dari saya, semoga bermanfaat.

Sumber:

https://www.linode.com/docs/databases/mysql/mysql-master-master-replication 

No comments:

Post a Comment