Thursday, May 25, 2017

[CentOS 7] LAB 9.3 Replication Database for PostgreSQL

Assalamuallaikum 
WarahmatullahiWabarakatuh.

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

Selamat sore semua, ketemu lagi dengan ane. Langsung ke topik aja, pada artikel kali ini yang mau ane sharing adalah mengenai Replication pada sebuah database. Disini ane mau menjelaskan sedikit mengenai replication database tersebut.


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 memilik 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 PostgreSQL dan phpPgAdminnya.


Untuk langkah - langkah konfigurasinya adalah sebagai berikut.

Konfigurasi Server Master (Rizky)

1.) Supaya nantinya dapat mengakses phpPgAdmin 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.) Setelah itu edit file postgresql.conf yang terleteak pada directory /var/opt/rh-rh-postgresql95/lib/pgsql/data. Untuk membuka file jalankan perintah
nano /var/opt/rh-rh-postgresql95/lib/pgsql/data/postgresql.conf
Kemudian cari pada Line 173 dan 176. Disitu pada wal_level yang default optionnya minimal diubah menjadi hot_standby dan synchronous_commit yang default optionnya on diubah menjadi off, dan jangan lupa uncomment atau dengan kata lain hilangkan tanda pagar di depan kedua syntax tersebut. 
Keterangan :
  • Write-Ahead Logging (WAL) : Merupakan metode standar untuk memastikan integritas data. Konsep WAL adalah bahwa perubahan pada file data (di mana tabel dan indeks berada) harus ditulis hanya setelah perubahan tersebut dicatat, yaitu setelah catatan log yang menjelaskan perubahan telah terdapat pada penyimpanan permanen. wal_level menentukan berapa banyak informasi yang ditulis ke WAL. Disini saya mengaturnya menjadi hot_standby. Hot Standby adalah istilah yang digunakan untuk menggambarkan kemampuan untuk terhubung ke server dan menjalankan query read-only sementara server sedang berada dalam recovery arsip atau mode standby. 
  • synchronous_commit (synchronous replication) : Merupakan opsi yang memungkinkan transaksi antara Server Master dan Server Slave selesai lebih cepat. Dengan synchronous commit, penundaan replikasi secara langsung mempengaruhi waktu penyelesaian transaksi pada master, dan dengan synchronous comit ini, master dapat melanjutkan dengan kecepatan penuh. Synchronous commit menjamin bahwa data ditulis ke setidaknya dua node sebelum pengguna atau aplikasi diberitahu bahwa transaksi telah dilakukan. Karena disini ane membuat sinkronasi antara master dan slave (local), maka optionnya ane atur atau ubah menjadi local.


6.) Masih di file yang sama, cari pada Line 206 dan 208, kemudan pada baris archive_mode yang default optionnya off diubah menjadi on dan pada baris archive_command yang default optionnya kosong atau null diubah menjadi syntax yang digunakan untuk pengarsipan. Dan jangan lupa uncomment kedua syntax tersebut.
Keterangan : 
  • archive_mode : Merupakan opsi yang digunakan sebagai pengaturan mode arsip, ketika archive_mode diaktifkan, WAL segmen dikirim ke penyimpanan arsip dengan mengatur archive_command. archive_mode tidak dapat diaktifkan saat wal_level diatur menjadi minimal 
  • archive_command : Merupakan command yang digunakan untuk mengarsip logfile segmen %p : Dalam string digantikan oleh nama path dari file yang akan diarsipkan, dan %f diganti hanya dengan nama file


7.) Dan masih di file yang sama, kemudian cari pada Line 224 dan 226. Disitu pada baris max_wal_senders yang default optionnya kosong atau null diubah menjadi 2 dan pada baris wal_keep_segments yang default optionnya juga kosong atau null diubah, disini ane ubah menjadi 15. Dan jangan lupa uncomment kedua syntax tersebut.


8.) Terakhir di file ini nih, cari lagi pada Line 238, pada baris synchronous_standby_names jangan lupa di uncomment, dan pada baris ini merupakan pendefinisian dari nama server standby mana yang akan akan digunakan untuk Replication database. Nama yang dimaksud merupakan hostname (Server Slave).

Nah konfigurasi pada file ini sudah selesai, kemudian kita save dengan menekan CTRL + X --> Y (Yes).


9.) Selanjutnya edit file pg_hba.conf yang terletak pada directory /var/opt/rh/rh-postgresql95/lib/data. Untuk membuka file, jalankan perintah
nano /var/opt/rh/rh-postgresql95/lib/data/pg_hba.conf
Kemudian cari pada Line 87,88 dan 89. Uncomment ketiga baris syntax tersebut. Kemudian pada bagian local diubah menjadi host, kemudian edit yang defaultnya postgres menjadi replica, dan pada  host ke 2 dan ke 3 masukkan IP Address, untuk host yang ke 2 masukkan IP Address Server Master dan untuk host yang ke 3 masukkan IP Address Server Slave. Untuk methodnya semua menggunakan md5.
Kemudian kita save dengan menekan CTRL + X --> Y (Yes).


10.) Setelah itu restart service postgresql supaya konfigurasi dapat berjalan dengan baik
systemctl restart rh-postgresql95-postgresql


11.) Kemudian masuk ke database PostgreSQL
su - postgres
Setelah itu buat user replica beserta passwordnya
createuser --replication -P replica

Konfigurasi Server Slave (Node1Rizky)

1.) Stop terlebih dahulu service PostgreSQL nya
systemctl stop rh-postgresql95-postgresql


2.) Kemudian remove semua file yang berada di directory /var/opt/rh/rh-postgresql95/lib/pgsql/data
rm -rf *
Pastikan masih di directory ini. Jangan pindah ke directory mana pun. 


3.) Masuk ke database PostgreSQL 
su - postgres
Setelah itu lakukan sinkronasi ke Server Master (Rizky) nya.
pg_basebackup -h 192.168.43.122 -U replica -D /var/opt/rh/rh-postgresql95/lib/pgsql/data/ -P --xlog
Keterangan :
  • pg_basebackup : Untuk mengambil base backup cluster database PostgreSQL yang sedang berjalan. Pg_basebackup membuat salinan biner dari file cluster database, sambil memastikan sistem dimasukkan ke dalam dan keluar dari mode backup secara otomatis 
  • -h 192.168.43.122 : Merupakan pendifisian bahwa base bacup cluster database berasal dari host 192.168.43.122 (IP Server Master) 
  • -U : Merupakan pendifisian dari user, pada contoh ini usernya yaitu replica 
  • -D /var/opt/rh/rh-postgresql95/lib/pgsql/data/ : Merupakan pendefinisan pada Directory mana file backup cluster database tersebut
  • -P : Merupakan pendifinisian dari Password 
  • --xlog : Untuk membuat catatan terhadap semua log yang dihasilkan selama backup


4.) Kemudian edit file postgresql.conf yang terletak pada directory /var/opt/rh/rh-postgresql95/lib/pgsql/data. Karena kita masih berada di directory tersebut, maka untuk membuka file nya kita hanya perlu menjalankan perintah
nano postgresql.conf
Setelah itu cari pada Line 247, pada baris hot_standby ubah option yang defaultnya off menjadi on. Dan jangan lupa di uncomment pada syntax tersebut. 
Kemudian kita save dengan menekan CTRL + X --> Y (Yes).


5.) Copy file recovery.conf.sample dan ubah namanya menjadi recovery.conf
nano /opt/rh/rh-postgresql95/root/usr/share/pgsql/recovery.conf.sample /var/opt/rh/rh-postgresql95/lib/pgsql/data/recovery.conf


6.) Kemudian edit file recovery yang sudah tercopy tadi. Untuk membuka file jalankan perintah
nano recovery.conf
Kemudian cari pada Line 44. Pada baris restore_command kemudian uncomment pada syntax tersebut.
Restore command ini merupakan Perintah shell yang digunakan untuk mengambil segmen file WAL yang diarsipkan. Parameter ini diperlukan untuk pemulihan arsip, tapi opsional untuk streaming replikasi. Setiap% f dalam string diganti dengan nama file yang akan diambil dari arsip, dan setiap% p diganti dengan nama tujuan jalur salin pada server. Pada command ini terdapat perintah scp (secure copy) dan dibelakangnya diikut oleh IP dari Server Master serta tujuan pada directory mana file tersebut diletakan, ini berarti segmen file WAL yang diarsipkan di salin dari host tersebut ke destination directory yang telah ditentukan, Sedangkan maksud dari secure copy in dalah, proses penyalinannya secara secure, via ssh.
Kemudian kita save dengan menekan CTRL + X --> Y (Yes).


7.) Edit file recovery.conf yang terletak di directory /var/opt/rh/rh-postgresql95/lib/pgsql/data/. Untuk membuka file tersebut jalankan perintah 
nano /var/opt/rh/rh-postgresql95/lib/pgsql/data/recovery.conf
Apabila masih di directory /var/opt/rh/rh-postgresql95/lib/pgsql/data/, untuk membuka file hanya perlu menjalankan perintah
nano recovery.conf
Kemudian cari pada Line 123, disitu pada baris primary_conninfo kita uncomment. Primary conninfo ini digunakan Menentukan string koneksi yang akan digunakan agar server standby terhubung dengan server primary (Servere Master). Edit baris tersebut menjadi seperti yang sudah ane tandai pada gambar dibawah ini 
Keterangan :
  • host=192.168.43.122 : Merupakan pendefinisan dari server primary (Master Server)
  • port=5432 : Merupakan port yang digunakan postgresql 
  • user=replica : Merupakan user replikasi 
  • passwd=anandarizky : Merupakan password dari user replika 
  • application_name=Node1Rizky : Merupakan hostname dari Server Slave 


8.) Karena tadi service PostgreSQL nya kita stop, maka sekarang kita start dan enable kan kembali
systemctl restart rh-postgresql95-postgresql
systemctl enable rh-postgresql95-postgresql

Back to Server Master (Rizky) 

1.) Kemudian kita kembali ke Server Master, dan cek apakah sudah berhasil melakukan sinkronasi antara Server Master dan Server Slave. Pertama masuk terlebih dahulu ke shell PostgreSQL
su - postgres
Kemudian kita cek apakah berhasil melakukan sinkron atau tidak 
psql -c "select application_name, state, sync_priority, sync_state from pg_stat_replication;"
Nah apabila muncul output seperti diatas berarti berhasil sinkron hehe.


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 /phpPgAdmin di belakangnya. Setelah itu coba lakukan login menggunakan user yang satunya yaitu "rizky1".


2.) Nah pada user rizky1 ini terdapat database yang sebelumnya dibuat, sekarang coba kita buat Schemas baru.


3.) Kemudian coba buat Schema baru.


4.) Dan Schema behasil dibuat.


5.) Sekarang coba buat Table baru.


6.) Kemudian coba buat Table baru, disini ane coba buat table dengan 4 kolom.



7.) Coba buat Table nya. Setiap kolom nya ane namakan dengan nama yang berbeda.


8.) Dan Table berhasil dibuat.


9.) Dan sekarang coba akses menggunakan subdomain yang dimilik oleh Server Slave yaitu node1 yang disertai /phpPgAdmin di belakangnya. Dan coba login menggunakan user yang tadi dibuat untuk membuat Schema dan Table yaitu user rizky1.


10.) Dan berhasil tersinkron dan terlihat juga Schema dan Table yang tadi dibuat jika kita menggunakan Server Slave.

Mungkin hanya itu yang dapat ane sharing, mohon maaf bila banyak kesalahan dan kekurangan baik dari segi kata dan penulisan.
Terima Kasih. Semoga Bermanfaat. 

Wassalamuallaikum Warahmatullahi Wabarakatuh.

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

0 komentar:

Post a Comment