Modul Praktikum Basis Data Terdistribusi
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
Awali setiap aktivitas dengan do’a, semoga berkah dan mendapat kemudahan. Pahami tujuan, dasar teori, dan latihan-latihan praktikum dengan baik dan benar. Kerjakan tugas-tugas praktikum dengan baik, sabar, dan jujur. Tanyakan kepada asisten/dosen apabila ada hal-hal yang kurang jelas.
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 Universitas Muhammadiyah Malang (UMM)
22
Modul Praktikum Basis Data Terdistribusi
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 Universitas Muhammadiyah Malang (UMM)
23
Modul Praktikum Basis Data Terdistribusi
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 Universitas Muhammadiyah Malang (UMM)
24
Modul Praktikum Basis Data Terdistribusi relay-log-index = /var/lib/mysql/slave-relay-log.index expire_logs_days max_binlog_size
= 5 = 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 [mysqld], kemudian tambahkan/modifikasi baris 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 Universitas Muhammadiyah Malang (UMM)
25
Modul Praktikum Basis Data Terdistribusi expire_logs_days max_binlog_size
= 5 = 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 STATUS.
MASTER
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 Universitas Muhammadiyah Malang (UMM)
26
Modul Praktikum Basis Data Terdistribusi
Sekali lagi, nilai MASTER_LOG_FILE dan merujuk ke informasi status master terbaru.
harus
MASTER_LOG_POS
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 ************************ 1. row ************************* Master_Host: 192.168.0.100 Master_User: server2 Master_Port: 3306 Connect_retry: 60 Master_Log_File: mysql-bin.000001 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 langkahlangkah 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 ************************ 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
Jurusan Teknik Informatika Universitas Muhammadiyah Malang (UMM)
27
Modul Praktikum Basis Data Terdistribusi 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)
Konfigurasi dan Aktivasi Server 1 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 master dan Server 2 sebagai slave. Untuk melakukan konfigurasi akhir dan aktivasi replikasi di Server 1, 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.000005 | 100 | db_rep | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
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', MASTER_USER='server1', MASTER_PASSWORD='server1', MASTER_LOG_FILE='mysql-bin.000005', MASTER_LOG_POS=100;
Sekali lagi, nilai MASTER_LOG_FILE dan merujuk ke informasi status master terbaru.
MASTER_LOG_POS
harus
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 ************************ 1. row ************************* Master_Host: 192.168.0.200 Master_User: server1 Master_Port: 3306
Jurusan Teknik Informatika Universitas Muhammadiyah Malang (UMM)
28
Modul Praktikum Basis Data Terdistribusi 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. Id: 1 User: system user Host: db: NULL Command: Connect Time: 197 State: Waiting for master Info: NULL ************************ 2. Id: 2 User: system user Host: db: NULL Command: Connect Time: 197 State: Has read all relay Info: NULL ************************ 3. 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)
row *************************
to send event row *************************
log; row *************************
4. Me-reset Konfigurasi Pada saat melakukan konfigurasi, sangat mungkin terjadi kesalahan yang tidak disengaja, misalkan keliru menuliskan nilai atribut
Jurusan Teknik Informatika Universitas Muhammadiyah Malang (UMM)
29
Modul Praktikum Basis Data Terdistribusi
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 mereset 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 Universitas Muhammadiyah Malang (UMM)
30
Modul Praktikum Basis Data Terdistribusi
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 Universitas Muhammadiyah Malang (UMM)
31
Modul Praktikum Basis Data Terdistribusi
E. TUGAS PRAKTIKUM 1. Untuk menguji sinkronisasi pada replikasi multi-master, lakukan langkahlangkah-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 Universitas Muhammadiyah Malang (UMM)
32