Sabtu, 26 April 2014

Replikasi Database Postgresql

Yup, hari ini mau tulis tentang cara replikasi database postgresql. Kali ini kita menggunakan hot_standby. Di sini kita menggunakan OS Ubuntu 11.10, postgresql-9.1. Btw, ini oprekan kali ini saya lakukan di virtualbox, jadi install ubuntu 11.10 di virtualbox dulu. Kira - kira model jaringannya seperti di bawah ini

Ok, langsung aja ya
- Install postgresql dan openssh-server pada masing-masing node
   sudo apt-get install postgresql-9.1 openssh-server
- Ganti password user postgres pada masing-masing node
   sudo passwd postgres
- Login sebagai user postgres
   su postgres
- Generate keygen pada masing-masing node
   ssh-keygen
- Kirim masing key tersebut ke pc yang akan berkomunikasi satu sama lain
   ssh-copy-id 192.168.9.22 (kirim dari host1 ke host 2) &
   ssh-copy-id 192.168.9.11 (kirim dari host2 ke host1)
- Konfigure Master server, buat user rep yang akan digunakan untuk user replikasi
   psql -c "CREATE USER rep REPLICATION LOGIN CONNECTION LIMIT 1 ENCRYPTED PASSWORD 'rep123';"
- Edit file pg_hba.conf untuk menambahkan user rep supaya bisa akses
   vim /etc/postgresql/9.1/main/pg_hba.conf
   Tambahkan di bawah bagian Allow replication connection.. :
   host     replication     rep             192.168.9.22/32         md5
- Edit file postgresql.conf
   listen_addresses = 'localhost,192.168.9.11'
   wal_level = 'hot_standby'
   archive_mode = on
   archive_command = 'cd .'
   max_wal_senders = 1
   hot_standby = on
- Save dan restart server postgresql
   service postgresql restart
- Konfigure Slave server dengan mematikan service postgresql terlebih dahulu
   service postgresql stop (Login user postgres di host2)
- Edit file pg_hba.conf
   vim /etc/postgresql/9.1/main/pg_hba.conf
   Tambahkan di bawah bagian Allow replication connection..  :
   host       replication     rep         192.168.9.11/32       md5
- Edit file postgresql.conf
   listen_addresses = 'localhost,192.168.9.22'
   wal_level = 'hot_standby'
   archive_mode = on
   archive_command = 'cd .'
   max_wal_senders = 1
   hot_standby = on
- Save 
Sebelum Slave server bisa replikasi database dari Master server, kita perlu buat initial database. Hal ini karena, replikasi akan membaca log dari master server dan menerapkan perubahan pada database tersebut. Kita membutuhkan database tersebut untuk dicocokan pada database master.
Kita bisa menggunkan perintah postgres backup. Sebelumnya kita pindah ke host1 lalu jalankan perintah 
   psql -c "select pg_start _backup('initial_backup');"
Kirim database data ke slave (host2), menggunakan perintah rsync
  rsync -cva --inplace --exclude=*pg_xlog* /var/lib/postgresql/9.1/main/192.168.9.22:/var/lib/postgresql/9.1/main/
Pada saat menjalankan perintah rsync di atas mungkin akan mengalami error, tapi tidak masalah. Itu karena error pada certificate.
Stop perintah backup
   psql -c "select pg_stop_backup();"
Setelah itu kita buat file recovery.conf pada slave server.
  vim /var/lib/postgresql/9.1/main/recovery.conf
Isi file tersebut seperti di bawah ini
   standby_mode = 'on'
   primary_conninfo = 'host=192.168.9.11 port=5432 user=rep'
   password = 'rep123'
   trigger_file = '/tmp/postgresql.trigger.5432'
Start Slave server
   service postgresql start
Test replikasi database dengan membuat database di master server
   create database dbardi owner ardi;
Coba cek pada slave server, jika ada dbardi maka replikasi database sukses. Ada yang perlu diingat jika pada slave kita tidak bisa melakukan write database, karena posisinya sebagai 'pembantu' (slave :hammer). Itu karena kita sudah membuat parameter hot_standby pada file recovery.conf.
Mudah bukan, oh ya ini kasusnya hanya bisa 2 PC ya, kalau ingin lebih mungkin bisa memakan slony, hmm...lupa juga sih namanya apa :p
Kalau ada yang belum jelas bisa lihat link ini.
Wassalam.

4 komentar:

  1. mungkin sedikit revisi dari saya mas, pada recovery.conf parameter password kayaknya masuk dlm parameter primary_conninfo. e.g

    primary_conninfo = 'host=192.168.9.11 port=5432 user=rep password=rep123'

    thank's

    BalasHapus
    Balasan
    1. Thanks revisinya, tapi itu mungkin bisa dibuat satu line :)

      Hapus
  2. mau nanya gan kalo model hot standby itu berarti si server web databasenya mengarah ke ip database master ?

    BalasHapus