Jumat, 23 Maret 2018

MySQL Master to Master


Master to Master Replication adalah sebuah metode dalam database   kita dapat mengcopy isi database dari suatu server MySQL ke satu atau beberapa server MySQL yang lain.


  1. Memecah pekerjaan antara beberapa MySQL server.
    Server MySQL utama menjalankan proses bisnis, server MySQL hasil replikasi menjalankan analisa data. Dengan cara ini saat MySQL replikasi melakukan analisa data yang mungkin menguras memory dan proses tidak akan mempengaruhi proses bisnis yang dijalankan.
  2. Realtime backup 
    Hasil MySQL Replication bisa menjadi backup yang realtime. Meskipun demikian kita tetap harus membuat backup yang bersifat periodik.

Working Linux OS like CentOS 6.9
Haproxy Server address is : 192.168.67.135 
Master and Master work in two node
Master1 IP Address is: 192.168.67.139
Master2 IP Address is: 192.168.67.140
Database                     : kampus

Langkah 1 Server Master 1
Install Mysql Server
root@masterDB# yum install mysql-server mysql
Edit konfigurasi MySQL di /etc/my.cnf dan tambahkan entri berikut
[mysqld]
log-bin=mysql-bin
binlog-do-db=kampus
server-id=1
Restart MySQL
root@masterDB# /etc/init.d/mysqld restart
Buat DataBase
mysql> create database kampus;
mysql> create table pcr (
     > id int(11) primary key,
     > nama varchar(20));
Langkah selanjutnya kita akan membuat  user agar replication client bisa terkoneksi
# mysql -u root -p
Passowrd: 
mysql> GRANT REPLICATION SLAVE ON *.* TO 'harumin1'@'%' IDENTIFIED BY 'harumin1';
mysql> FLUSH PRIVILEGES;
Selanjutnya lihat status mysql server sebagai master
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 |      106 | kampus       |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)




Langkah 2  Master 2
Lakukan hal yang sama diserver Master 2
[mysqld]
log-bin=mysql-bin
binlog-do-db=kampus
server-id=2
Restart MySQL
root@masterDB2# /etc/init.d/mysqld restart
Buat Databse yang serupa dengan Master1
mysql> create database kampus;
mysql> create table pcr (
     > id int(11) primary key,
     > nama varchar(20));
Buat user agar replication client bisa terkoneksi
# mysql -u root -p
Passowrd: 
mysql> GRANT REPLICATION SLAVE ON *.* TO 'harumin1'@'%' IDENTIFIED BY 'harumin1';
mysql> FLUSH PRIVILEGES;
Selanjutnya lihat status mysql server sebagai master
mysql> show master status
    -> ;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000005 |      567 | kampus       |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
Langkah berikut merupakan inti dari replication, kita akan melakukan setting bahwa server-2 merupakan Replication dari server-1. Opsi yang kita masukkan dibawah ini adalah keterangan yang ada di server 1 baik IP, log file dan posisitionnya kita sesuaikan dengan yang di server 1. Settingnya di mysql Master 2
mysql>  CHANGE MASTER TO MASTER_HOST='192.168.67.139',
    -> MASTER_USER='repl_user',
    -> MASTER_PASSWORD='secretpassword',
    -> MASTER_LOG_FILE='mysql-bin.000002',
    -> MASTER_LOG_POS=106;
Langkah berikut merupakan inti dari replication, kita akan melakukan setting bahwa server-1 merupakan Replication dari server-2. Opsi yang kita masukkan dibawah ini adalah keterangan yang ada di server 2 baik IP, log file dan posisitionnya kita sesuaikan dengan yang di server 1. Settingnya di mysql Master 1
mysql>  CHANGE MASTER TO MASTER_HOST='192.168.67.140',
    -> MASTER_USER='repl_user',
    -> MASTER_PASSWORD='secretpassword',
    -> MASTER_LOG_FILE='mysql-bin.000005',
    -> MASTER_LOG_POS=465;
Langkah terakhir lakukan di Server Master1 dan Server Master 2
mysql> SLAVE START;
mysql> show slave status \G

Konfigurasi Haproxy di haprovy.cfg --> vi /etc/haproxy.cfg

#   http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
#
#---------------------------------------------------------------------

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    log         127.0.0.1 local2 info
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     256
    maxsslconn  256
    user        haproxy
    group       haproxy
    daemon

defaults
      # set "mode tcp" for Layer4
    mode               tcp
    log                global
    timeout connect    10s
    timeout client     30s
    timeout server     30s

# define frontend and backend servers
frontend  mysql-in
    bind *:3306
    default_backend    backend_servers

backend backend_servers
    balance            roundrobin
    server             db01 192.168.67.137:3306 check
    server             db02 192.168.67.33:3306 check


output :

mysql> slave start
    -> ;
Query OK, 0 rows affected, 1 warning (0.00 sec)
 Uji testing insert data di Master 1. Seharusnya di Master2 akan otomatis update.

Tidak ada komentar: