Replikasi PostgreSQL: Panduan Praktis untuk Ketersediaan Tinggi
Replikasi merupakan fitur krusial dalam PostgreSQL untuk memastikan ketersediaan data yang tinggi (High Availability) dan pemulihan bencana (Disaster Recovery). Artikel ini akan memandu Anda melalui langkah-langkah dasar untuk mengkonfigurasi Replikasi Streaming Asinkron antara dua server PostgreSQL.
Prasyarat: Konfigurasi Server Utama (Primary/Master)
Sebelum memulai, pastikan Anda memiliki dua server PostgreSQL yang berjalan. Server 1 akan bertindak sebagai Primary, dan Server 2 sebagai Standby. Semua langkah konfigurasi di bawah menggunakan data dan alamat IP dari prompt Anda sebagai contoh. Ganti dengan nilai yang sesuai di lingkungan Anda.
1. Membuat Pengguna Khusus Replikasi
Buat pengguna khusus pada server **Primary** yang hanya akan digunakan untuk tujuan replikasi. Pengguna ini harus memiliki hak akses `REPLICATION`.
CREATE USER repuser WITH REPLICATION ENCRYPTED PASSWORD 'repuser123';
Catatan: Ganti 'repuser123' dengan kata sandi yang kuat.
2. Mengkonfigurasi `pg_hba.conf`
Edit file konfigurasi autentikasi klien, `pg_hba.conf`, pada server **Primary** untuk mengizinkan koneksi replikasi dari server **Standby** (misalnya, dengan IP 192.168.1.2).
host replication repuser 192.168.1.2/32 md5
Baris ini mengizinkan pengguna `repuser` untuk melakukan koneksi jenis `replication` dari host `192.168.1.2` menggunakan autentikasi `md5` (kata sandi terenkripsi).
3. Mengkonfigurasi `postgresql.conf`
Edit file konfigurasi utama, `postgresql.conf`, pada server **Primary** dan atur parameter berikut:
listen_addresses = '*'
wal_level = hot_standby
max_wal_senders = 5
wal_keep_segments = 128
archive_mode = on
hot_standby = on
archive_command = 'cp %p /opt/PostgreSQL/9.2/archive/%f'
- `listen_addresses = '*'`: Mengizinkan koneksi dari semua alamat IP. (Sebaiknya dibatasi ke IP tertentu di lingkungan produksi).
- `wal_level = hot_standby`: Diperlukan untuk replikasi dan operasi standby.
- `max_wal_senders = 5`: Jumlah maksimum proses pengiriman WAL.
- `wal_keep_segments = 128`: Jumlah file WAL yang akan dipertahankan untuk standby.
- `archive_mode = on` dan `archive_command`: Diperlukan untuk pengarsipan WAL dan penting untuk pemulihan bencana.
4. Membuat Direktori Arsip WAL
Buat direktori yang ditentukan dalam `archive_command` dan pastikan hak aksesnya benar.
mkdir -p /opt/PostgreSQL/9.2/archive
chown postgres:postgres /opt/PostgreSQL/9.2/archive
5. Restart atau Reload PostgreSQL
Setelah perubahan pada `pg_hba.conf` dan `postgresql.conf`, Anda perlu me-restart layanan PostgreSQL pada server **Primary** agar perubahan berlaku.
Konfigurasi Server Standby (Replica)
1. Sinkronisasi Data Awal
Pada server **Standby**, Anda harus mengambil salinan basis data awal dari server **Primary** (misalnya, dengan IP 192.168.1.1). Gunakan alat `pg_basebackup` setelah menghentikan layanan PostgreSQL pada Standby.
# Hentikan layanan PostgreSQL pada Standby (sesuaikan dengan sistem inisiasi Anda)
/etc/init.d/postgresql-9.2 stop
# Hapus data lama (JIKA Standby adalah instalasi baru/kosong)
rm -rf /opt/PostgreSQL/9.2/data/*
# Ambil base backup dari Primary
/opt/PostgreSQL/9.2/bin/pg_basebackup -h 192.168.1.1 -U repuser -D /opt/PostgreSQL/9.2/data -P -Xs
# Ganti /opt/PostgreSQL/9.2/data/ dengan path data Anda.
2. Membuat File `recovery.conf`
Buat file bernama `recovery.conf` di dalam direktori data PostgreSQL server **Standby** (/opt/PostgreSQL/9.2/data/). File ini mendefinisikan koneksi ke server Primary dan mengaktifkan mode standby.
# Buat file recovery.conf
nano /opt/PostgreSQL/9.2/data/recovery.conf
Isi file `recovery.conf` dengan konfigurasi berikut:
standby_mode = 'on'
primary_conninfo = 'host=192.168.1.1 port=5432 user=repuser password=repuser123'
trigger_file = '/tmp/postgresql.trigger'
- `standby_mode = 'on'`: Mengaktifkan mode standby.
- `primary_conninfo`: Detail koneksi ke server **Primary** (
192.168.1.1). - `trigger_file`: File yang, jika dibuat, akan memicu failover (promosi) Standby menjadi Primary.
Catatan: Pada versi PostgreSQL yang lebih baru (12+), `recovery.conf` digantikan oleh file `standby.signal` dan parameter dalam `postgresql.conf`.
3. Mengatur Hak Akses File
Pastikan kepemilikan dan izin file/direktori data pada server **Standby** sudah benar.
chown -R postgres:postgres /opt/PostgreSQL/9.2/data/
chmod 600 /opt/PostgreSQL/9.2/data/recovery.conf
4. Memulai Layanan Standby
Mulai layanan PostgreSQL pada server **Standby**. Server akan membaca `recovery.conf` dan mulai terhubung ke Primary, lalu mulai mereplikasi data.
# Mulai layanan PostgreSQL pada Standby
/etc/init.d/postgresql-9.2 start
Verifikasi Replikasi
Untuk memverifikasi, sambungkan ke server **Primary** dan jalankan query berikut:
SELECT client_addr, state, sync_state FROM pg_stat_replication;
Anda seharusnya melihat alamat IP server **Standby** (client_addr) dengan status (state) `streaming` atau `catching up`, menandakan replikasi berhasil.
Kesimpulan
Dengan mengikuti langkah-langkah ini, Anda telah berhasil mengkonfigurasi Replikasi Streaming PostgreSQL, yang memungkinkan Standby menerima perubahan secara real-time dari Primary. Ini adalah fondasi penting untuk arsitektur basis data yang tangguh dan ketersediaan tinggi.

