Saturday, June 3, 2017

[CentOS 7] LAB 9.9 Replication Database for MySQL

Assalamuallaikum 
WarahmatullahiWabarakatuh.

السَّلاَمُ عَلَيْكُمْ وَرَحْمَةُ اللهِ وَبَرَكَاتُهُ

Selamat pagi semua, udahlah gausah basa - basi lagi selamat pagi selamat pagian hehe. Intinya pada artikel kali ini yang mau ane sharing mengenai cara Replication Database jika kita menggunakan MySQL.


Replication database adalah suatu metode yang digunakan untuk menyalin dan mendistribusikan data dari satu database ke database yang lain. Dan selanjutnya, mensinkronisasikan antar database, sehingga konsistensi data dapat terjamin. Replication database dapat digunakan pada banyak sistem manajemen Database, yang dimana proses ini terbentuk dari hasil sikronisasi antara master dengan slave, atau antara yang asli dan salinannya, yang tentunya memerlukan beberapa konfigurasi tambahan agar Replication ini dapat bekerja. Dengan menggunakan teknik replikasi ini, data dapat didistribusikan ke lokasi yang berbeda melalui koneksi jaringan lokal maupun internet. 

Tujuan dibuatnya Database Replication ini adalah agar bersifat redudant, ketika salah satu server mati maka nantinya masih ada pengganti lainnya. Selain itu, Replication database ini digunakan sebagai backup dari suatu database untuk mengantisipasi kehilangan data akibat serangan DOS ataupun faktor lainnya.

Untuk topologi yang ane gunakan adalah sebagai berikut. Yang sudah ane katakan diatas, database nantinya akan disalin atau di sinkronasikan dari Server Master ke Server Slave, maka dari itu kita memerlukan satu Server lagi yang nantinya digunakan sebagai Slave. Di dalam topologi ane sudah memiliki satu Server lagi yang digunakan untuk Slave, yang menggunakan IP Address 192.168.43.123/24 dan IP DNS nya diarahkan ke IP Address Server Master. Untuk Server Slave yang ane gunakan merupakan hasil cloningan dari Server Master, maka dari itu pada Server Slave nya sudah terinstall dan terkonfigurasi MariaDB dan phpMyAdminnya.


Berikut adalah langkah - langkah konfigurasinya.

Konfigurasi Server Master (Rizky)

1.) Supaya nantinya dapat mengakses phpMyAdmin Server Slave menggunakan nama domain, disini kita perlu menambahkan sub domain untuk Server Slave nya. Maka dari itu kita edit file forward."nama filenya" yang terletak di directory /var/named. Untuk membuka file, jalankan perintah
nano /var/named/forward."nama filenya" 
Pada bagian paling bawah tambahkan subdomain untuk Server Slave nya, disini nama yang ane gunakan adalah "node1", jangan lupa IP Address Server Slavenya juga diikut sertakan.


2.) Kemudian edit pada file reverse."nama filenya" yang terletak di directory yang sama. Untuk membuka file jalankan perintah 
nano /var/named/reverse."nama filenya" 
Setelah itu tambahkan command untuk membuat subdomain node1 nya seperti gambar dibawah, dan pastikan IP Address Server Slave diikut sertakan, supaya dapat diakses dan menandakan subdomain node1 berasal dari Server Slave.


3.) Restart service named supaya konfigurasi dapat berjalan dengan baik 
systemctl restart named


4.) Kemudian kita test apakah domain berhasil dibuat atau tidak dengan menjalankan perintah dig. Apabila muncul output seperti gambar dibawah, maka dapat dipastikan subdomain sudah berhasil dibuat dengan baik.


5.) Nah disini merupakan hal yang amat terpenting apabila kita ingin membuat Replication Database menggunakan MySQL. Jadi karena Server Slave nya ini ane clone dari Server Master, makan UUID si Server Slave ini menyerupai / sama dengan UUID yang dimilik oleh Server Master. Jika kita memiliki 2 buah Server dengan UUID yang sama maka kita tidak dapat melakukan Replication Database. Maka dari itu jika materi atau konfigurasi ini dilakukan untuk keperluan pekerjaan, kita tidak bisa melakukan Cloning Server Master nya, dan kita harus melakukan Konfigurasi Server Slave dari awal, supaya UUID yang dimilik kedua server berbeda dan kita dapat melakukan Replication Database.

Untuk melihat UUID bisa buka file auto.conf yang terletak di directory /var/opt/rh/rh-mysql57/lib/mysql. Untuk membuka file jalankan perintah
nano /var/opt/rh/rh-mysql57/lib/mysql/auto.conf


6.) Karena materi dan konfigurasi ini hanya digunakan untuk pembelajaran, maka UUID nya bisa kita ganti/dibuat berbeda dengan Server Masternya. Contoh nya disini UUID Server Slave akhirannya ane ganti menjadi 20.


7.) Kemudian edit file rh-mysql57-mysql-server.cnf yang terletak pada directory /etc/opt/rh/rh-mysql57/my.cnf.d. Untuk membuka file jalankan perintah 
nano /etc/opt/rh/rh-mysql57/my.cnf.d/rh-mysql57-mysql-server.cnf 
Cari pada Line 9. tepatnya pada bagian [server] kita tekan enter sehingga membentuk baris baru di line 10. Kemudian tambahkan syntax seperti gambar dibawah yang sudah ane blok berwarna biru.
Keterangan : 
  • log-bin=mysql-bin : Merupakan binary logging sql, yaitu mysql.bin 
  • server-id=111 : Merupakan penamaan untuk server master ini, penamaan ini tidak bisa menggunakan kata-kata atau kalimat, hanya berlaku untuk angka. Disini contohnya ane memberikan penamaan untuk server master ini dengan 111


8.) Restart service MySQL nya, supaya konfigurasi dapat berjalan dengan baik 
systemctl restart rh-mysql57-mysqld


9.) Kemudian masuk ke shell MySQL 
mysql -u root -p 
Setelah itu kita stop atau matikan mode slave pada Server Master 
stop slave; 
Selanjutnya buat user beserta password untuk replicationnya. Disini password yang ane gunakan adalah An4nda_13. Disini untuk pemberian password harus menggunakan kombinasi huruf besar, symbol dan angka.
grant replication slave on *.* to replica@'%' identified by 'passwordnyaapa'; 
Terakhir Jalankan perintah 
flush privileges; 
Flush Privileges adalah sinonim untuk reload. Perintah reload menyuruh server untuk membaca ulang tabel hak akses. 
Kemudian keluar dari shell MySQL 
exit


10.) Masukan service mysql kedalam firewall agar dapat diakses nantinya, kemudian kita reload 
firewall-cmd --add-service=mysql --permanent 
firewall-cmd --reload
Keterangan : 
  • firewall-cmd : Perintah untuk masuk ke settingan Firewall 
  • firewall --permanent : Perintah untuk menambahkan sesuatu secara permanent didalam firewall 
  • firewall. --add-service=mysql : Perintah untuk menambahkan service mysql supaya dapat melewati firewall

Konfigurasi Server Slave (Node1Rizky)

1.) edit file rh-mysql57-mysql-server.cnf yang terletak pada directory /etc/opt/rh/rh-mysql57/my.cnf.d. Untuk membuka file jalankan perintah 
nano /etc/opt/rh/rh-mysql57/my.cnf.d/rh-mysql57-mysql-server.cnf 
Cari pada Line 9. tepatnya pada bagian [server] kita tekan enter sehingga membentuk baris baru di line 10. Kemudian tambahkan syntax seperti gambar dibawah yang sudah ane blok berwarna biru.

Keterangan : 
  • log-bin=mysql-bin : Merupakan binary logging sql, yaitu mysql.bin 
  • server-id=111 : Merupakan penamaan untuk server master ini, penamaan ini tidak bisa menggunakan kata-kata atau kalimat, hanya berlaku untuk angka. Disini contohnya ane memberikan penamaan untuk server master ini dengan 111 
  • read_only=1 : Disini diatur menjadi 1, dengan demikian berarti tidak ada pembaruan yang diizinkan kecuali dari pengguna dengan hak superuser atau Server Slave yang diperbarui dari Server Master. Variabel read_only berguna bagi Server Slave untuk memastikan tidak ada pembaruan yang sengaja dilakukan di luar apa yang dilakukan pada Server Master 
  • report-host=Node1Rizky : Merupakan hostname dari Server Slave itu sendiri, atau bisa juga di atur menjadi nama Domain, Hostname, atau IP Address Server Slave


2.) Restart service MySQL nya, supaya konfigurasi dapat berjalan dengan baik 
systemctl restart rh-mysql57-mysqld


3.) Masukan service mysql kedalam firewall agar dapat diakses nantinya, kemudian kita reload
firewall-cmd --permanent --add-service=mysql 
firewall-cmd --reload
Keterangan : 
  • firewall-cmd : Perintah untuk masuk ke settingan Firewall 
  • firewall --permanent : Perintah untuk menambahkan sesuatu secara permanent didalam firewall 
  • firewall --add-service=mysql : Perintah untuk menambahkan service mysql supaya dapat melewati firewall

Back to Server Master (Rizky)

1.) Masuk ke dalam shell MySQL 
mysql -u root -p 
Lakukan flush terhadap semua table yang terbuka 
flush tables with read lock; 
Table baru hanya diperbolehkan dibuka dengan read lock sampai perintah unlock tables; dijalankan. Kemudian lihat informasi status tentang binary log files pada Server Master, yang dimana informasi ini akan digunakan dan dicocokan pada Server Slave nantinya 
show master status; 
Kemudian keluar dari shell MySQL 
exit


2.) Jalankan perintah 
mysqldump -u root -p --all-databases --lock-all-tables --events > mysql_dump.sql 
Mysqldump ini adalah bagian dari paket database relasional mysql yang memungkinkan kita untuk "dump" database, atau kumpulan database, untuk backup atau transfer ke server SQL lain. Nah kemudian kita coba ls, maka nanti akan terlihat hasil dump yang berhasil dibuat.
Keterangan : 
  • --all-databases : Digunakan untuk Dump semua table di semua database 
  • --lock-all-tables : Digunakan untuk mengunci semua table di semua database 
  • --events : Digunakan untuk Dump events terhadap database yang di dump 
  • mysql_dump.sql : Merupakan hasil file yang terbuat dari proses mysqldump


3.) Masuk ke dalam shell MySQL 
mysql -u root -p 
Lakukan unlock tables; 
unlock tables; 
Penggunaan unlock tables ini untuk melepas (semua) read lock yang diperoleh pada perintah flush tables with read lock; 
Kemudian keluar dari shell MySQL
exit 


4.) Kemudian kita copy file hasil dump yang telah terbentuk tadi ke Server Slave. Disini untuk mengcopy file tersebut kita menggunakan perintah scp, scp ini merupakan secure copy yang merupakan pengiriman yang di enkripsi seperti ssh. Sebagai contoh disini ane coba mengirim file hasil dump tadi ke Server Slave tepatnya di directory /tmp/ 
scp mysql_dump.sql "domain server slave:/"filetujuan"/

Back to Server Slave (Node1Rizky)

1.) Kemudian masukkan file hasil dump nya ke Server Slave, supaya nanti nya terjadi sinkronisasi antara Server Master dan Server Slave 
mysql -u root -p < /"letakfile"/mysql_dump.sql


2.) Masuk ke shell MySQL 
mysql -u root -p 
Kemudian lakukan kaya semacam join atau connecting antara Server Slave dan Server Master 
change master to master_host='192.168.43.122', 
master_user='replica',
master_password='An4nda_13',
master_log_file='mysql-bin.000001',
master_log_pos=592; 
Setelah itu start atau aktifkan mode slave pada Server Slave 
start slave;


3.) Untuk melihat apakah Server Master dan Server Slave berhasil sinkron antara satu sama lain atau tidak bisa menjalankan perintah 
show slave status\G
Kemudian lihat pada bagian Slave_IO_Running dan Slave_SQL_Running, apabila optionnya menunjukkan kata Yes, maka dapat dikatakan kedua Server berhasil melakukan sinkronisasi.

Verifikasi Client

1.) Seperti biasa pastikan client DNS nya sudah diarahkan ke IP Server Master. Jika sudah kemudian buka web browser dan kemudian akses menggunakan domain. Disini domain nya adalah anandarizky.co.id dan subdomain untuk Server Master adalah www. Kemudian disertai /phpMyAdmin di belakangnya. Setelah itu coba lakukan login menggunakan user yang ada, disini user yang ane coba untuk login menggunakan user root.


2.) Nah berhasil masuk, sekarang coba kita buat Database baru. Contoh nya disini nama databasenya adalah Test Dari ww.anandarizky.co.id.


3.) Database Test Dari ww.anandarizky.co.id berhasil dibuat.


4.) Sekarang coba akses menggunakan sub domain yang dimilik oleh Server Slave yaitu node1 dengan disertai nama domain dan /phpMyAdmin/ di belakangnya. Kemudian lakukan login.


5.) Maka terlihat jelas database Test Dari ww.anandarizky.co.id yang sebelumnya dibuat pada Server Master juga terlihat atau tersinkron pada Server Slave.


6.) Lalu bagaimana jika kedua server memiliki UUID yang sama ? Silahkan simak di video berikut.
Seperti apa yang ane katakan diatas, apabila kedua server memiliki UUID yang sama maka dapat dipastikan kedua server tidak dapat melakukan sinkronasi atau Replication Database, berbeda halnya jika menggunakan PostgreSQL dan MariaDB. Oiya untuk materi database sudah habis sampai MySQL ini yaaa..
Mungkin hanya sekian yang dapat ane sharing mohon maaf bila banyak kesalahan dan kekurangan baik dari segi kata maupun penulisan.
Terima Kasih. Semoga Bermanfaat. 

Wassalamuallaikum Warahmatullahi Wabarakatuh.

 وَ السَّلاَمُ عَلَيْكُمْ وَرَحْمَةُ اللهِ وَبَرَكَاتُهُ

0 komentar:

Post a Comment