{CentOS7}{LAB 9.3} PosgreSQL Database Replication
Assalamualaikum wr wbPada kesempatan kali ini saya akan melanjutkan posting tentang database, yang saat ini sudah sampai pada pembahasan Database Replication. Kali ini saya akan mencoba membuat Database Replication nya dengan menggunakan PostgreSQL.
Apa itu Database Replication?
Database Replication adalah suatu metode yang digunakan untuk menyalin dan mendistribusikan data dari satu database ke database yang lain.
Tujuan dibuatnya Database Replication ini adalah agar bersifat redudant, ketika salah satu server mati maka akan masih ada pengganti lainnya. Selain itu, Database Replication ini digunakan sebagai backup dari suatu database untuk mengantisipasi kehilangan data akibat serangan DOS ataupun faktor lainnya
Topologi
Konfigurasi Server Database
Langkah pertama buat domain untuk web replicate nya, jadi nanti database replicate juga bisa di lihat dari web. Disini saya membuat domain node1 untuk database replication nya.
1) Edit file forward.tkj tambahkan domain dan ip address nya
nano /var/named/forward.tkj
2) Jangan lupa untuk menambahkan domain node1 nya pada file reverse.tkj nya juga ya.
nano /var/named/reverse.tkj
3) Restart service named, kemudian cek apakah domain yang tadi ditambahkan sudah bisa dijalankan atau belum. saya mengeceknya dengan perintah nslookup.
systemctl restart named
nslookup node1.pandutama.net
Jika sudah menambahkan domain untuk replicationnya, barulah kita mulai mengkonfigurasi untuk membuat database Replicationnya.
1) Edit file konfigurasi postgresql yaitu postgresql.conf yang terletak di /var/opt/rh/rh-postgresql95/lib/pgsql/data/
nano /var/opt/rh/rh-postgresql95/lib/pgsql/data/postgesql.conf
2) Cari serta uncomment syntak archive_mode, kemudian atur optionnya menjadi on. Setelah itu uncomment syntak archive_command dan atur optionnya menjadi command atau perintah yang digunakan untuk perngarsipan.
penjelasan :
archive mode adalah opsi yang digunakan sebagai pengaturan mode arsip, Ketika archive_mode diaktifkan (on), WAL segmen dikirim ke penyimpanan arsip dengan mengatur archive_command. archive_mode tidak dapat diaktifkan saat wal_level disetel 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.3) Cari lagi dan Uncomment script wal_level, setelah itu atur optionnya menjadi hot_standby. Kemudian Uncomment juga pada synchronous_type, dan ubah optionnya menjadi local
penjelasan :
Write-Ahead Logging (WAL) adalah 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) adalah opsi yang memungkinkan transaksi antara server DB dan Replica 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. Disini saya mengaurnya value nya menjadi local, karena saya membuat sinkronisasi antar master dan salve (local)
4) Cari lagi dan uncomment pada syntak listen_address. kemudian ubah pointnya menjadi tanda * ini berarti ip berapa saja dapat mengakses replicationnya.
5) cari lagi dan uncomment syntak max_wal_sender. Max wal sender ini digunakan untuk menuntukan jumlah koneksi maksimum dari standby server. karna disini saya hanya mempunyai dua server, yaitu master dan slave, maka disini sata mengatur valuenya menjadi 2. Kemudian uncomment juga oada baris wal_keep_segments. Wal keep segments ini merupakan besar logfile segments, satuannya MB. Pada contoh ini saya mengaturnya menjadi 10
6) cari lagi dan uncomment pada syntak synchronous_standby_names, baris ini merupakan pendefinisian dari nama server standby manakah yang akan akan digunakan untuk Database Replication. Nama yang dimaksud yaitu berupa hostname/domain.
7) Edit file pg_hba.conf yang terletak di /var/opt/rh/rh-postgresql95/lib/pgsql/data/
nano /var/opt/rh/rh-postgresql95/lib/pgsql/data/pg_hba.conf
8) Cari syntak yang sudah saya tandai pada gambar dibawah ini, Uncomment setiap local host yang ada, kemudian edit yang tadinya masih user pogtres, ubah menjadi replica, karna nanti pada tahap selanjutnya kita akan membuat user replica.. Lakukan pengeditan pada ketiga host, 1 host dengan ip loopback, dan 2 sisanya merupakan ip dari sever master maupun slave (server db dan server db replica), dan jangan lupa ketiganya atur methodnya menjadi md5. Sedangkan pada baris local biarkan seperti default, cukup ganti nama user serta uncomment syntaknya saja.
9) Restart service rh-postgresql95-postgresql agar konfigurasi diatas berjalan dengan baik
systemctl restart rh-postgresql95-postgresql
10) Masuk ke shell postgres, disini kita akan membuat user replica beserta passwordnya
su - postgres
createuser --replication -P replica
Konfigurasi Server Node1 (Replica)
1) Langkah pertama, stop service rh-postgersql, caranya bisa dengan perintah berikutsystemctl stop rh-postgresql95-postgresql
2) Kemudian remove semua file yang ada pada directory /var/opt/rh/rh-postgresql95/lib/pgsql/data/
3) Masuk ke shell postgresql kemudian lakukan sinkronisasi dari server node1 ke server master database.
su - postgres
pg_basebackup -h "ip server master db" -U "user replica" -D /var/opt/rh/rh postgresql95/lib/pgsql/data/ -P --xlog
4) keluar dari shell, kemudian masuk edit file konfigurasi postgresql dengan perintah berikut
nano /var/opt/rh/rh-postgresql95/lib/pgsql/data/postgresql.conf
5) Seperti tadi pada server master db, syntak wal_level kita atur menjadi hot_standby. Nah maka dari itu pada server slave ini kita harus menyalakan hot_standby nya dengan cara uncomment pada baris tersebut, kemudian atur optionnya menjadi on.
6) Copy file recovery.conf.sample, kemudian ubah nama file tersebut menjadi recovery.conf
nano /opt/rh/rh-postgresql95/root/usr/share/pgsql/recovery.conf.sample /opt/rh/rh-postgresql95/lib/pgsql/data/recovery.conf
7) Edit file recovery.conf yang telah ter-copy tadi
nano /var/opt/rh/rh-postgresql95/lib/pgsql/data/recovery.conf
Pada command ini terdapat perintah scp (secure copy) dan dibelakangnya diikut oleh ip dari server master db 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.
9) Scroll kebawah, hidupkan Standby mode pada slave dengan cara uncomment pada baris standby_mode dan ubah optionnya menjadi on. Standy mode ini digunakan untuk Menentukan apakah akan memulai server PostgreSQL sebagai standby. Jika parameter ini aktif, server tidak akan berhenti untuk me-recovery saat akhir WAL yang diarsipkan tercapai, namun akan terus mencoba melanjutkan recovery (pemulihan) dengan mengambil segmen WAL baru menggunakan restore_command dan / atau dengan menghubungkan ke server utama seperti yang ditentukan oleh pengaturan primary_conninfo.
10) Cari dan uncomment syntak primary_conninfo, Primary conninfo ini digunakan Menentukan string koneksi yang akan digunakan agar server standby terhubung dengan server primary (server master db). Edit baris tersebut menjadi seperti yang sudah saya tandai pada gambar dibawah ini
penjelasan :
host=192.168.1.105 merupakan pendefinisan dari server primary
port=5432 yaitu port yang digunakan postgresql
user=replica merupakan user replikasi
passwd=123!@#Pandu merupakan password dari user replica11) Karena tadi service postgresql nya di matikan, sekarang jalankan kembali service postgresql nya
systemctl start rh-postgresql95-postgresql
Konfiguasi Server Master Database
1) Masuk ke shell postgress, kemudian masukan perintah berikut untuk melihat apakah master dan replica sudah tersinkron atau belum
Verifikasi Client
1) Lakukan pengetesan pada client dengan cara mengakses database via web dengan phpPgAdmin. Login dengan user yang sudah dibuat.
2) Untuk pengujian, coba buat database, namanya apa saja terserah kalian
3) Pastikan database tersebut berhasil dibuat.
4) Selanjutnya masuk ke phpPgAdmin server replica(node1) nya.
5) Pastikan pada server replica(node1) juga berhasil dibuat database yang dibuat oleh master.
Alhamdulillah selesai
Semoga Bermanfaat
Wassalamualaikum wr wb
0 comments: