1. Saya asumsikan anda sudah menginstall postgresql 9.4.x di dua server yg berbeda, satu akan dijadikan server master dan satu lagi akan dijadikan server slave. IP server master adalah 1.2.3.4 dan IP server slave adalah 5.6.7.8. Silahkan sesuaikan dengan versi postgre dan IP server yg anda gunakan.

Untuk mengecek versi postgresql, silahkan ketikan :

sudo su - postgres
psql

postgres-version

dan untuk exit ketik :

\q
exit

2. Create user replikasi di server master dengan masuk ke postgres terlebih dahulu

sudo su - postgres
psql
CREATE USER replicator REPLICATION LOGIN ENCRYPTED PASSWORD 'password';

create-user

3. Edit file postgresql.conf di server master (/etc/postgresql/9.4/main/postgresql.conf) seperti berikut ini

listen_addresses = '*'
wal_level = hot_standby
max_wal_senders = 3
checkpoint_segments = 8
wal_keep_segments = 8

edit-postgresql-conf postgresql-conf

4. Edit pg_hba.conf, masih di server master dan folder yg sama

Tambahkan baris berikut ini, boleh diletakkan di mana saja :

host     replication       replicator       5.6.7.8/32         md5

pg_hba

5. Restart master

restart-postgre

6. Sekarang beralih ke server slave, edit postgresql.conf sama dengan server master

listen_addresses = '*'
wal_level = hot_standby
max_wal_senders = 3
checkpoint_segments = 8
wal_keep_segments = 8

7. Masih di server slave. Sekarang jalankan perintah-perintah berikut ini

sudo service postgresql stop
sudo su - postgres
rm -rf /var/lib/postgresql/9.4/main
pg_basebackup -h 1.2.3.4 -D /var/lib/postgresql/9.4/main -U replicator -v -P

backup-sukses

Kemudian kembali ke user root, dan ketikkan :

(atau bisa tetap di user postgres, tapi hapus bagian sudo -u postgres)

sudo -u postgres bash -c "cat > /var/lib/postgresql/9.4/main/recovery.conf <<- _EOF1_
    standby_mode = 'on'
    primary_conninfo = 'host=1.2.3.4 port=5432 user=replicator password=thepassword'
    trigger_file = '/tmp/postgresql.trigger'
    _EOF1_
"

recovery_conf

sudo service postgresql start

8. Selamat anda sudah berhasil membuat replikasi database

Silahkan test dengan membuat database baru pada server master, dan database tsb akan muncul juga di server slave.

Saya test dengan membuat database ‘coba’ di server master :

create-db-on-master

dan ini hasilnya di server slave :

cek-db-on-slave

Karena server slave merupakan replikasi dari master, maka di master slave kita tidak bisa melakukan perubahan atau penambahan data :

create-db-on-slave

Gambar oleh https://walidumar.wordpress.com