Assalamualaikum Wr. Wb.
Pada postingan saya kali ini saya ingin membahas mengenai PostgreSQL Database Replication di CentOS 7. Sebelumnya apa sih Database Replication itu?
Replikasi database adalah seperangkat teknologi yang digunakan untuk menyalin dan mendistribusikan data dari satu database ke database yang lain. Dan selanjutnya, mensinkronisasikan antar database untuk menjaga konsistensi.
Adapun tujuan dibuatnya database replication adalah agar database bersifat redudant, ketika salah satu server mati maka 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.
Dan dibawah ini adalah topologi yang saya gunakan
Lanjut ke langkah-langkahnya yaa :
Konfigurasi Server Database (DB)
1. Langkah pertama yang kita lakukan adalah kita tambahkan domain untuk node1 nya didalam folder forward.laila.net, yang terdapat di dalam direktori /var/named/.
nano /var/named/forward.laila.net
2. Selanjutnya kita tambahkan domain node1 dengan menggunakan IP Address 172.16.11.228.
3. Jika tadi kita menambahkan domain di file forward.laila.net, sekarang kita tambahkan domain untuk node1 yang didalam folder reverse.laila.net, yang terdapat di dalam direktori /var/named/ (juga)
4. Maka kita tambahkan domain dari si node1 (database replication), dan tambahkan ip dari node 1.
5. Kemudian kita restart service namednya agar apa yang telah kita konfigurasikan dapat berjalan dengan baik.
6. Setelah kita restart kita coba dig dns kita, yang gunanya adalah untuk melakukan pengetesan dari domain yang telah kita tambahkan tadi, dengan mengetikkan perintah dig (nama domain)
7. Dan seperti inilah hasil pengetesan dari domainnya, ini menandakan bahwa domain kita berhasil ditambahkan.
8.Selanjutnya kita edit file kofigurasi postgresql yang terletak pada direktori /var/opt/rh/rh-postgresql95/lib/pgsql/data/. Maka kita ketikkan perintah nano /var/opt/rh/rh-postgresql95/lib/pgsql/data/postgresql.conf.
9. Kemudian kita cari syntax listen_addresses, kita uncomment (menghapus tanda pagar) pada listen_addresses dan mengubah valuenya menjadi *.
10. Selanjutnya kita cari syntax wal_level, lalu kita uncomment dan ganti optionnya menjadi hot_standby. Pada bagian synchronous_commit kita uncomment juga dan ganti valuenya menjadi local
Ket :
- Write-Ahead Logging / WAL adalah suatu metode standar untuk memastikan integritas data. Konsep WAL adalah 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. Dan disini kenapa saya menggantinya menjadi hot_standby? Karena 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 suatu opsi yang memungkinkan transaksi antara server DB dan Replica selesai lebih cepat. Dengan synchronous commit ini, master dapat melanjutkan dengan kecepatan penuh. Disini saya mengatur value nya menjadi local, karena saya membuat sinkronisasi antar master dan salve. Dan kita mengubahnya menjadi local, dimana commit menunggu sampai catatan transaksi diputar ke disk lokal.
11. Setelah itu kita cari syntax archive_mode, lalu kita uncomment archive_mode dan ubah modenya menjadi on. Pada syntax archive_command, kita uncomment juga archive_command nya dan ubah commandnya menjadi command atau suatu perintah yang digunakan untuk perngarsipan.
Ket :
- Archive mode adalah opsi yang digunakan sebagai pengaturan mode arsip, Ketika archive_mode diaktifkan on, maka 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.
12. Setelah itu kita cari syntax max_wal_senders. Dibagian ini kita uncomment wal_senders nya. Wal senders ini sendiri digunakan untuk menetukan jumlah koneksi maksimum dari standby server, disini saya mengatur valuenya menjadi 2, mengapa? Karena disini saya hanya mempunyai dua server, yaitu server database (master) dan server replication (slave / node1).
Kita uncomment juga bagian keep_segmets. Wal keep segments ini merupakan besar logfile segments, dan satuannya adalah MB. Pada contoh ini saya atur menjadi 10.
Kita uncomment juga bagian keep_segmets. Wal keep segments ini merupakan besar logfile segments, dan satuannya adalah MB. Pada contoh ini saya atur menjadi 10.
13. Sekarang kita cari bagian synchronous_standby_names, dibagian synchronous ini kita uncomment juga dan kita tambahkan hostname dari node kita.
14. Selanjutnya kita akan edit file kofigurasi pg_hba.conf yang terletak pada file /var/opt/rh/rh-postgresql95/lib/pgsql/data/
nano /var/opt/rh/rh-postgresql95/lib/pgsql/data/pg_hba.conf
15. Kemudian cari script seperti gambar dibawah ini. Kita uncomment setiap localhost yang ada dan edit bagian user, user sebelumnya adalah user postgres, ubah menjadi replica, karena kita akan membuat user replica. Edit ketiga host tersebut, dimana host pertama 1 host dengan ip loopback, dan 2 sisanya menggunakan ip dari sever master dan ip slave / node1, jangan lupa untuk mengatur methodnya menjadi md5.
16. Lalu kita restart sistem postgresql nya agar apa yang telah kita konfigurasi dapat berjalan dengan baik.
17. Selanjutnya kita masuk kedalam shell postgres, maka ketikkan perintah su - postgres, dan disinilah kita akan membuat user replica dengan perintah createuser --replication -P replica, lalu isikan password sesuai keinginan kita.
Konfigurasi Server Replication (Slave / node1)
1. Sekarang kita beralih ke server replication. Yang kita lakukan pertama adalah stop terlebih dahulu service postgresql yang terdapat pada server node1.
2. Selanjutnya kita masuk kedalam direktori data, dimana letak direktori data ini ada di /var/opt/rh/rh-postgresql95/lib/pgsql/data/. Dan kita hapus semua file yang terdapat dalam direktory data tersebut dengan menggunakan perintah rm - rf *
3. Lalu kita masuk ke kedalam shell postgres dengan menggunakan perintah su - postgres dan disini kita akan lakukan sinkronisasi antar server slave / node1 dan server master / controller.
Ket :
- pg_basebackup digunakan 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 172.16.11.28 menandakan bahwa base backup cluster database berasal dari host 172.16.11.28 yang merupakan ip server master / controller
- -U adalah user yang kita gunakan, pada contoh ini user yang kita gunakan yaitu replica
- -D /var/opt/rh/rh-postgresql95/lib/pgsql/data/ merupakan directory mana file backup cluster database tersebut.
- -P merupakan Password
- --xlog digunakan untuk membuat catatan terhadap semua log yang dihasilkan selama backup
4. Selanjutnya kita keluar dari shell postgres dengan menggunakan perintah exit. Lalu kita akan edit file dari postgresql.conf yang terletak di /var/opt/rh/rh-postgresql95/lib/pgsql/data/
nano /var/opt/rh/rh-postgresql95/lib/pgsql/data/postgresql.conf
5. Kemudian kita cari syntax hot_standby, kita uncomment dibagian ini lalu kita ubah optionnya menjadi on.
6. Selanjutnya kita copy file recovery.conf.sample dan kita ganti nama file tersebut menjadi recovery.conf.
7. Edit file recovery.conf yang sudah di copy tadi.
nano /var/opt/rh/rh-postgresql95/lib/pgsql/data/recovery.conf
8.
- Pada baris 44 restore_command. 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 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 ini adalah, proses penyalinannya secara secure, yaitu melalui ssh.
- Pada baris 116 standby_node. Uncomment Standby_mode pada slave / node1 dengan cara 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.
- Pada baris 123 primary_conninfo. Pada bagian ini uncomment primary_conninfo, Primary conninfo ini digunakan untuk menentukan string koneksi yang akan digunakan agar server standby terhubung dengan server primary / server master db.
Keterangan untuk baris 123 :
- host=172.16.11.28 merupakan pendefinisan dari server primary.
- port=5432 yaitu port yang digunakan oleh postgresql.
- user=replica merupakan user replikasi, yang kita buat sebelumnya.
- passwd=laila merupakan password dari user replica.
- application_name=laila-node1 merupakan hostname dari server slave / node1.
9. Karna diawal tadi kita mematikan sistem service postgresql, sekarang kita jalankan lagi service postgresql agar apa yang kita konfigurasi dapaat berjalan dengan baik.
10. Jalankan firewall, dan izinkan service postgresq. Dan jangan lupa untuk di reload.
Konfigurasi Server Database (DB)
1. Sekarang kita beralih (lagi) ke server controller, dan masuk ke dalam shell postgres dengan menggunakan perintah su - postgres, dan setelah itu lakukan pengecekan apakah sudah sinkronasi atau belum antara server controller dan server node/slave. Dan terlihat disini bahwa server controller dengan node sudah berhasil tersinkronisasi.
psql -c "select application_name, state, sync_priority, sync_state from pg_stat_replication;"
2. Kemudian kita buat user baru dengan akses super user, karena user biasa tidak bisa membuat database, jangan lupa untuk menyertakan passwordnya juga.
Verifikasi Client
1. Lakukan pengetesan dengan cara mengakses di web browser client, maka ketikkan (nama domain)/phpPgAdmin. Dan seperti inilah tampilan awalnya.
2. Selanjutnya kita klik Postgresql, kemudian kita login dengan username dan password yang sudah kita buat sebelumnya
3. Terlihat disini kita telah masuk sebagai user nurlaila. Dan sekarang kita akan coba membuat database baru dengan cara klik Create database.
4. Buat user dan komennya sesuai dengan keinginan kita. Jika sudah maka klik Create.
5. Dan terlihat disini user berhasil ditambahkan.
6. Kemudian kita beralih ke domain node. Masih sama seperti sebelumya, ketikkan (nama domain)/phpPgAdmin.
7. Lalu klik Postgresql, kemudian kita login dengan username dan password yang sudah kita buat sebelumnya.
8. Dan pastikan user yang telah kita buat pada domain pertama ada pada node1.
Mungkin itu saja yang dapat saya sampaikan kurang lebihnya saya mohon maaf.
Wassalamualaikum Wr. Wb.
0 komentar:
Posting Komentar