Modul 7 Replikasi Multi Master (Two Way)

  

MODUL III

REPLIKASI MULTI-MASTER (TWO-WAY)

A. TUJUAN Memahami konsep dasar dan implementasi jaringan komputer.

  Memahami konsep sistem basis data terdistribusi. Mampu mengimplementasikan sistem basis data terdistribusi secara nyata.

  B. PETUNJUK

  C. DASAR TEORI

1. Replikasi Multi-Master

  Replikasi multi-master merupakan sebuah metode replikasi (penduplikasian) basis data yang memungkinkan data untuk disimpan di sejumlah site/node dan di-update dari semua site. Jadi, semua lokasi dapat melakukan operasi pembacaan (read) maupun penulisan (write).

  Perbedaan mendasar bentuk replikasi ini dengan one-way adalah kemampuan operasi penulisan, di mana pada one-way hanya dilakukan di salah satu server—yang selanjutnya disebut master. Pada bentuk multi-master, setiap site akan berperan sebagai master bagi site-site lainnya.

  Di praktikum ini, pendekatan replikasi multi-master akan diimplementasikan pada DBMS MySQL. Hal ini juga berarti bahwa materi ini masih memiliki keterhubungan dengan materi sebelumnya (replikasi natif / one way).

  Jurusan Teknik Informatika

D. LATIHAN

  1. Menguji Client/Server MySQL

  Di praktikum sebelumnya, kita telah melakukan pengujian akses ke server master dari mesin slave. Adapun karena di sini kita ingin memposisikan kedua mesin sebagai server dan juga slave, maka perlu dipastikan bahwa akses menyilang (cross access) dapat dilakukan dengan baik.

  Pengujian pada tahap ini dilakukan dengan cara menciptakan user di mesin server 2 dan diakses dari mesin server 1. Akses kebalikannya juga bisa dicoba, namun sebenarnya sudah kita lakukan pada pertemuan sebelumnya. Setelah akses client/server secara menyilang dapat dilakukan, barulah kita bisa melangkah ke tahap selanjutnya, yakni pembuatan user replikasi untuk kedua mesin.

  2. Membuat User Replikasi

  Tahap ini—meski baru sebagian—sebenarnya juga sudah pernah kita lakukan pada pertemuan pertama. Adapun agar lebih jelas, di sini akan dilakukan lagi dari awal dan dengan identitas yang berbeda.

  Membuat User di Server 1 Di Server 1, kita perlu menciptakan user dengan hak akses replication slave.

  Adapun langkah-langkahnya adalah sebagai berikut: 1. Buka terminal di Server 1.

  2. Login sebagai root mysql -u root –p mysql

  3. Setelah login berhasil, ketikkan perintah pembuatan user seperti berikut: GRANT REPLICATION SLAVE ON *.* TO 'server2'@'%' IDENTIFIED BY 'server2';

  4. Perintah di atas akan menciptakan user baru bernama server2 dan dengan password server2.

  5. Terapkan modifikasi pada tabel sistem. flush privileges;

  Membuat User di Server 2

  Sama seperti pembuatan user di Server 1, lakukan langkah-langkahnya untuk Server 2.

  1. Buka terminal di Server 2.

  2. Login sebagai root mysql -u root –p mysql

  Jurusan Teknik Informatika

  3. Setelah login berhasil, ketikkan perintah pembuatan user seperti berikut: GRANT REPLICATION SLAVE ON *.* TO 'server1'@'%' IDENTIFIED BY 'server1';

  4. Perintah di atas akan menciptakan user baru bernama server1 dan dengan password server1.

  5. Terapkan modifikasi pada tabel sistem. flush privileges;

  Tujuan pembuatan user di Server 1 sebenarnya adalah untuk digunakan oleh Server 2, begitu juga sebaliknya. Oleh karena itu, di Server 1 kita menciptakan user bernama server2, dan sebaliknya di Server 2. Jadi, perhatikan baik-baik agar tidak keliru.

3. Konfigurasi Replikasi

  Konfigurasi ini merupakan langkah sesungguhnya di dalam pendistribusian basis data. Langkah ini dilakukan pada kedua komputer, baik Server 1 maupun Server 2.

  Konfigurasi Server 1 Konfigurasi ini dilakukan dengan posisi di Server 1.

  1. Buka terminal.

  2. Buka file konfigurasi MySQL. sudo gedit /etc/my.cnf

  3. Cari directive [mysqld] , kemudian tambahkan/modifikasi baris berikut: [mysqld]

  # Id unik untuk identifikasi master

  server-id = 1 replicate-same-server-id = 0

  # pengaturan field auto increment

  auto-increment-increment = 2

  auto-increment-offset = 1 # IP address master (Server 2) master-host = 192.168.0.200 # nama user dan password master master-user = server1 master-password = server1

  master-connect-retry = 60

  # Menetapkan basis data yang direplikasi

  replicate-do-db = db_rep

  # file log

  log-bin = /var/log/mysql/mysql-bin.log

  # Me-log update ke log biner

  binlog-do-db = db_rep relay-log = /var/lib/mysql/slave-relay.log

  Jurusan Teknik Informatika

  relay-log-index = /var/lib/mysql/slave-relay-log.index expire_logs_days = 5 max_binlog_size = 100M Perhatikan, jangan sampai keliru dalam mengetikkan baris konfigurasi. Sesuaikan juga nama host, user, dan password dengan konfigurasi sebelumnya.

  4. Simpan kembali file konfigurasi MySQL.

  5. Kembali ke terminal, kemudian restart MySQL server. sudo /etc/init.d/mysql restart

  Konfigurasi di Server 1 menyatakan bahwa komputer siap menjadi slave bagi Server 2. Untuk memeriksa status master, gunakan perintah .

  SHOW MASTER STATUS

  mysql> SHOW MASTER STATUS;

  • | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  • | mysql-bin.000001 | 98 | db_rep | |
  • 1 row in set (0.00 sec)

  Konfigurasi Server 2 Di Server 2, kita juga melakukan langkah-langkah yang sama seperti Server 1.

  Tujuannua di sini adalah menetapkan agar Server 2 siap menjadi slave bagi Server 1. Langkah-langkah konfigurasi yang dilakukan adalah sebagai berikut: 1. Buka terminal.

  2. Buka file konfigurasi MySQL. sudo gedit /etc/my.cnf

  3. Cari directive , kemudian tambahkan/modifikasi baris

  [mysqld]

  berikut: server-id = 2 replicate-same-server-id = 0 auto-increment-increment = 2

  auto-increment-offset = 2 # IP address master (Server 1) master-host = 192.168.0.100 master-user = server2 master-password = server2

  master-connect-retry = 60 replicate-do-db = db_rep log-bin = /var/log/mysql/mysql-bin.log binlog-do-db = db_rep relay-log = /var/lib/mysql/slave-relay.log relay-log-index = /var/lib/mysql/slave-relay-log.index

  Jurusan Teknik Informatika

  expire_logs_days = 5 max_binlog_size = 100M

  4. Simpan kembali file konfigurasi MySQL.

  5. Kembali ke terminal, kemudian restart MySQL server. sudo /etc/init.d/mysql restart

  Untuk memeriksa status master, gunakan perintah SHOW MASTER STATUS . mysql> SHOW MASTER STATUS;

  • | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  • | mysql-bin.000001 | 98 | db_rep | |
  • 1 row in set (0.00 sec)

  Aktivasi Replikasi

  Konfigurasi ini dilakukan untuk sinkronisasi informasi di master dan slave serta memulai replikasi. Mengingat konfigurasi ini perlu dilakukan secara bergantian di Server 1 dan Server 2, maka sebaiknya hati-hati dan lakukan dengan cermat.

  Penting sekali diperhatikan, dalam melakukan konfigurasi ini maka kedua komputer harus tetap berhubungan. Dengan kata lain, tidak boleh ada salah satu komputer yang dimatikan.

  Konfigurasi dan Aktivasi Server 2

  Untuk melakukan konfigurasi akhir dan aktivasi replikasi di Server 2, lakukan langkah-langkah berikut:

  1. Masuk prompt MySQL atau gunakan prompt yang masih terbuka.

  2. Lihat status terbaru dari master. Misalkan hasilnya seperti berikut: mysql> SHOW MASTER STATUS;

  • | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  • | mysql-bin.000001 | 98 | db_rep | |
  • 1 row in set (0.00 sec)

  3. Jalankan perintah berikut untuk menjadikan Server 2 sebagai slave Server 1. Perhatikan, nilai-nilai atribut berikut HARUS disesuaikan dengan informasi status master dan konfigurasi utama. mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.100',

  • > MASTER_USER='server2',
  • > MASTER_PASSWORD='server2',
  • > MASTER_LOG_FILE='mysql-bin.000001',
  • > MASTER_LOG_POS=98;

  Jurusan Teknik Informatika

  • 1. row ************************* Master_Host: 192.168.0.100 Master_User: server2 Master_Port: 3306 Connect_retry: 60 Master_Log_File: mysql-bin.000001
  • 1. row ************************* Id: 1 User: system user Host: db: NULL Command: Connect Time: 197
  • 2. row ************************* Id: 2 User: system user Host: db: NULL

  Jurusan Teknik Informatika

  Sekali lagi, nilai MASTER_LOG_FILE dan MASTER_LOG_POS harus merujuk ke informasi status master terbaru.

  4. Jalankan Server 2 sebagai slave. mysql> START SLAVE;

  5. Untuk memastikan bahwa Server 2 telah siap menjadi slave, periksa statusnya. mysql> SHOW SLAVE STATUS\G

  Read_Master_Log_Pos: 98 Relay_Log_File: slave-relay.log Relay_Log_Pos: 235 Relay_Master_Log_File: mysql-bin.000001

   Slave_IO_Running: Yes Slave_SQL_Running: Yes

  Replicate_do_db: db_rep Replicate_ignore_db: Last_errno: 0 Last_error: Skip_counter: 0 Exec_master_log_pos: 98 Relay_log_space: 44 1 row in set (0.00 sec) Atribut paling penting dari pemeriksaan di atas adalah

  Slave_IO_Running dan Slave_SQL_Running . Di mana indikator

  berhasilnya replikasi dinyatakan melalui nilai Yes pada kedua atribut ini. Apabila ternyata replikasi belum berhasil, periksa kembali langkah- langkah sebelumnya. Gunakan informasi di /var/log/syslog untuk memudahkan pelacakan kesalahan. Sebagai tambahan, untuk mengetahui bahwa proses replikasi telah berhasil dengan baik—di mana server slave siap mengejar operasi penulisan pada server master, gunakan perintah SHOW PROCESSLIST .. Hasilnya kurang lebih terlihat seperti berikut: mysql> SHOW PROCESSLIST\G

   State: Waiting for master to send event

  Info: NULL

  • 3. row ************************* Id: 3 User: root Host: localhost db: db_rep Command: Query Time: 0 State: NULL

  master dan Server 2 sebagai slave.

  4. Jalankan Server 2 sebagai slave. mysql> START SLAVE;

  Sekali lagi, nilai MASTER_LOG_FILE dan MASTER_LOG_POS harus merujuk ke informasi status master terbaru.

  3. Jalankan perintah berikut untuk menjadikan Server 1 sebagai slave Server 2. Perhatikan, nilai-nilai atribut berikut HARUS disesuaikan dengan informasi status master dan konfigurasi utama. mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.200',

  2. Lihat status terbaru dari master. Misalkan hasilnya seperti berikut: mysql> SHOW MASTER STATUS;

  1. Masuk prompt MySQL atau gunakan prompt yang masih terbuka.

  Untuk melakukan konfigurasi akhir dan aktivasi replikasi di Server 1, lakukan langkah-langkah berikut:

  Setelah Server 2 berhasil menjadi slave bagi Server 1, selanjutnya adalah melakukan hal yang sebaliknya. Dengan demikian, bentuk distribusi master-master bisa tercapai. Bagaimanapun, kondisi saat ini adalah terciptanya desain master-slave, di mana Server 1 berperan sebagai

  Konfigurasi dan Aktivasi Server 1

  Info: SHOW PROCESSLIST 3 rows in set (0.00 sec)

  Info: NULL

   State: Has read all relay log;

  Command: Connect Time: 197

  • | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  • | mysql-bin.000005 | 100 | db_rep | |
  • 1 row in set (0.00 sec)
    • > MASTER_USER='server1',
    • > MASTER_PASSWORD='server1',
    • > MASTER_LOG_FILE='mysql-bin.000005',
    • > MASTER_LOG_POS=100;
      • 1. row ************************* Master_Host: 192.168.0.200 Master_User: server1 Master_Port: 3306

  Jurusan Teknik Informatika

  5. Untuk memastikan bahwa Server 2 telah siap menjadi slave, periksa statusnya. mysql> SHOW SLAVE STATUS\G

  Connect_retry: 60 Master_Log_File: mysql-bin.000005 Read_Master_Log_Pos: 100 Relay_Log_File: slave-relay.log Relay_Log_Pos: 235 Relay_Master_Log_File: mysql-bin.000005

   Slave_IO_Running: Yes Slave_SQL_Running: Yes

  Replicate_do_db: db_rep Replicate_ignore_db: Last_errno: 0 Last_error: Skip_counter: 0 Exec_master_log_pos: 100 Relay_log_space: 44 1 row in set (0.00 sec) Apabila atribut Slave_IO_Running dan Slave_SQL_Running juga sudah bernilai Yes, berarti konfigurasi replikasi master-master telah berhasil dilakukan dengan baik.

  Sebagai tambahan, ada baiknya juga kita memeriksa informasi proses melalui perintah SHOW PROCESSLIST .. Misalkan hasilnya terlihat seperti berikut: mysql> SHOW PROCESSLIST\G

  • 1. row ************************* Id: 1 User: system user Host: db: NULL Command: Connect Time: 197

   State: Waiting for master to send event

  Info: NULL

  • 2. row ************************* Id: 2 User: system user Host: db: NULL Command: Connect Time: 197

   State: Has read all relay log;

  Info: NULL

  • 3. row ************************* Id: 3 User: root Host: localhost db: db_rep Command: Query Time: 0 State: NULL

  Info: SHOW PROCESSLIST 3 rows in set (0.00 sec)

4. Me-reset Konfigurasi

  Pada saat melakukan konfigurasi, sangat mungkin terjadi kesalahan yang tidak disengaja, misalkan keliru menuliskan nilai atribut

  Jurusan Teknik Informatika

  MASTER_LOG_FILE . Kesalahan seperti ini tentu akan berakibat fatal, di mana kedua server tidak akan pernah bisa berkomunikasi.

  Untuk mengantisipasi kesalahan-kesalahan yang mungkin, kita bisa me- reset konfigurasi slave maupun master.

  Reset Slave Untuk me-reset mesin slave, gunakan perintah RESET SLAVE . mysql> RESET SLAVE;

  Untuk mendapatkan informasi mengenai status slave, gunakan perintah SHOW SLAVE STATUS .

  mysql> SHOW SLAVE STATUS\G

  Adapun untuk menghentikan atau menjalankan kembali mesin slave, gunakan perintah STOP SLAVE dan START SLAVE .

  mysql> RESET SLAVE; Reset Master

  Di mesin master, kita juga bisa me-reset konfigurasi dengan menggunakan perintah RESET MASTER.

  mysql> RESET MASTER;

  Perintah di atas akan me-reset file index binlog dan menjadikan file tersebut kosong seperti keadaan awal. Namun demikian, perintah ini tidak akan mengubah konfigurasi yang telah Anda lakukan pada file my.cnf.

5. Menguji Basis Data Terdistribusi

  Meskipun secara konfigurasi sudah selesai, namun kita perlu memastikan bahwa basis data terdistribusi dapat berjalan. Tentu saja pengujian yang diperlukan adalah melakukan operasi penulisan di salah satu master dan kemudian melihat hasilnya di komputer lain.

  Sekadar ilustrasi, kita akan melakukan penambahan data di Server 1.

  1. Masuk ke prompt mysql. mysql –u root -p 2. Pilih basis data db_rep sebagai basis data aktif. mysql> USE db_rep 3. Lakukan penambahan sebuah record di tabel mahasiswa. mysql> INSERT INTO mahasiswa

  • > VALUES(123, 'didik dwi', 'Jl. Surabaya'); Query OK, 1 row affected (0.00 sec)

  Jurusan Teknik Informatika

  4. Lihat hasilnya. mysql> SELECT * FROM mahasiswa;

  • | nim | nama | alamat |
  • | 123 | didik dwi | Jl. Surabaya |
  • 1 rows in set (0.00 sec)

  Langkah selanjutnya, gunakan komputer Server 2, kemudian lakukan langkah-langkah berikut: Sekadar ilustrasi, kita akan melakukan penambahan data di Server 1.

  1. Masuk ke prompt mysql. mysql –u root -p 2. Pilih basis data db_rep sebagai basis data aktif. mysql> USE db_rep 3. Lakukan seleksi di tabel mahasiswa. mysql> SELECT * FROM mahasiswa;

  • | nim | nama | alamat |
  • | 123 | didik dwi | Jl. Surabaya |
  • 1 rows in set (0.00 sec)

  4. Jika hasilnya seperti di atas, berarti pendistribusian telah berhasil dengan baik. Sampai langkah ini, setidaknya kita sudah memiliki gambaran dan pemahaman mengenai konsep, desain, dan implementasi sistem basis data terdistribusi.

  Jurusan Teknik Informatika

E. TUGAS PRAKTIKUM

  1. Untuk menguji sinkronisasi pada replikasi multi-master, lakukan langkah- langkah-langkah berikut: a. Masuk ke mesin server 1, kemudian lakukan operasi penambahan data baru. Periksa hasilnya, baik di mesin server 2. Lakukan hal yang sama di mesin server 2. Bagaimana hasilnya? Berikan penjelasan yang deskriptif! b. Matikan status slave mesin server 2 melalui perintah SLAVE STOP, kemudian lakukan operasi penambahan data di mesin server 1.

  Selanjutnya, jalankan kembali mesin server 2, dan amati serta jelaskan hasilnya.

  c. Lakukan operasi penambahan dengan waktu yang bersamaan— disesuaikan sendiri. Sebagai contoh, server 1 meng-update nama mahasiswa dengan nim 101; server 2 meng-update alamat mahasiswa dengan nim 101. Selanjutnya, amati hasil operasi di kedua mesin.

  Jurusan Teknik Informatika