Postgresql 9 Stream Replication

  Stream Replication adalah feature terbaru dari Postgresql 9. Stream Replication termasuk dalam kategory Standby Database, yang artinya database replikasi ini berada dalam mode standby, read-only, tidak dipergunakan untuk transaksi.

Stream Replication di postgresql melakukan sinkronisasi data background prosess yang sebut walsender dan walreceiver. Background process inilah yang bertanggung jawab mengirimkan perubahan data melalui network port.
Perubahan yang terjadi di master server akan dengan cepat diimplementasikan di slave server.

Jadi, transaksi database tetap dilakukan di server master, seperti insert, delete, update dan seterusnya. Server
slave dipergunakan untuk transaksi read-only, seperti query, export data dan seterusnya. Apabila terjadi suatu hal terhadap server master, misalnya terjadi kerusakan sistem, maka server slave bisa disetting untuk menggantikan master server.

Persiapan :

  1. Siapkan 2 server linux ubuntu. Saya menggunakan IP address 192.168.0.1 untuk master dan 192.168.0.2 untuk slave servernya. Stream Replication hanya bisa berjalan apabila versi postgresql sama dan menggunakan operating system dengan versi yang sama pula.
  2. Matikan postgresql yang sedang berjalan, baik di master maupun di slave, agar tidak ada user yang melakukan transaksi ke database :

    $ sudo /etc/init.d/postgresql stop
  3. pastikan versi linux anda berjalan pada arsitektur yang sama, 32 bit atau 64 bit :

    $ sudo uname -m

    jika yang keluar adalah x86_64 berarti 64 bit, jika yang keluar adalah i386 / i686 berarti 32 bit.

Master Server :

  1. buat direktori archive di dalam data_directory untuk menampung file wal. Default data_directory postgresql 9 di ubuntu adalah di direktori /var/lib/postgresql/9.0/main.

    $ sudo mkdir /var/lib/postgresl/9.0/main/archive
    $ sudo chown postgres:postgres /var/lib/postgresl/9.0/main/archive
     
  2. buka file postgresql.conf yang menyimpan informasi parameter inisialisasi :

    $ sudo nano /etc/postgresql/9.0/main/postgresql.conf
     
  3. ubah parameter yang ada menjadi seperti ini dan save filenya :
                     listen_address = '*'
                     wal_level = hot_standby
                     checkpoint_segment = 16                 
                     archive_mode = on
                     archive_command = 'cp -i %p /var/lib/postgresql/9.0/main/archive/%f <dev/null'
                     max_wal_senders = 3
                     wal_keep_segments = 32
    
                
  4. buka file pg_hba.conf, yang menyimpan konfigurasi koneksi ke database :

    $ sudo nano /etc/postgresql/9.0/main/pg_hba.conf
     
  5. tambahkan baris konfigurasi seperti ini, untuk memastikan agar slave dapat terkoneksi ke master server, dan save filenya :

    host replication all 192.168.0.2/32 trust 

Slave Server :

  1. buka file postgresql.conf yang menyimpan informasi parameter inisialisasi :

    $ sudo nano /etc/postgresql/9.0/main/postgresql.conf
     
  2. ubah parameter yang ada menjadi seperti ini dan save filenya :

    listen_address = '*'
    hot_standby = on
     
  3. buat file recovery.conf di direktory data_directory. Default data_directory postgresql 9 di ubuntu adalah di direktori /var/lib/postgresql/9.0/main. :

    $ sudo nano /var/lib/postgresql/9.0/main/recovery.conf
     
  4. tambahkan parameter berikut ini dan save filenya:

    standby_mode = 'on'
    primary_conninfo = 'host=192.168.0.1 port=5432 user=postgres password=postgres'
    restore_command = 'cp /path/for/backups/%f %p'
     

Sinkronisasi :

  1. Setelah master dan slave server selesai di konfigurasi, maka langkah berikutnya adalah melakukan sinkronisasi data. Lakukan step step berikut ini dengan cepat.
  2. Start database postgresql di MASTER SERVER :

    $ sudo /etc/init.d/postgresql start
     
  3. Login ke postgresql di MASTER SERVER :

    $ sudo psql -U postgres
     
  4. Jalankan perintah backup di MASTER SERVER :

    postgres# select pg_start_backup('clone', true);
     
  5. copy file database di MASTER SERVER ke SLAVE SERVER :

    postgres# \! rsync -av --exclude pg_xlog --exclude postgresql.conf --exclude postgresql.pid /var/lib/postgresql/9.0/main/* 192.168.0.2:/var/lib/postgresql/9.0/main/
     
  6. stop backup database di MASTER SERVER :

    postgres# select pg_stop_backup();
     
  7. copy direktory pg_xlog di MASTER SERVER ke SLAVE SERVER:

    postgres# \! rsync -av /var/lib/postgresql/9.0/main/pg_xlog 192.168.0.2:/var/lib/postgresql/9.0/main/
     
  8. Start database postgresql di SLAVE SERVER :

    $ sudo /etc/init.d/postgresql start
     
  9. Nah sekarang anda dapat melakukan testing melalui master server, buatlah tabel kosong dan lakukan semua perintah insert, delete, update ke dalam tabel tersebut, dan insert kan beberapa record kedalamnya, dan lihat hasilnya di slave server.

Thank you.

Author: Nareswara

Ordinary People with eye glasses

10 thoughts on “Postgresql 9 Stream Replication”

  1. Kereenn….thanks sebuanyak – banyaknya atas informasi replikasi postgresnya sadah tak coba n berhasil. Mantepz untuk master postgres yang satu ini

    heheheheehe….

  2. saya punya 5 server database nih. Bagaimana ya supaya kelima database tersebut hasilnya sama. Ke 5 database tersebut pun aktif melayani client. Karena clientnya banyak jadi maksud awalnya agar transaksi bisa dilayani 5 server secara seimbang gitu.

    Anggaplah gini saya punya toko online yang melayani pengunjung banyak. bagi user seakan dilayani satu server padahal dibelakang layar dilayani 5 server database yang saling tersinkronisasi.

    Mohon bantuan agan, pusing memecahkannya

    1. Maaf baru menjawab, 5 server aktif, berarti anda membutuhkan replikasi.
      Kalau client anda tipenya hanya membaca data, read, maka anda bisa pakai Slony-I, bisa support banyak server slave.
      Tetapi kalau client anda dapat melakukan baca tulis data, read-write, maka harus dilakukan penyesuaian pada programming anda.
      Coba anda baca baca pgPool II, Slony-I dan bucardo.

  3. Mau tanya, klo replikasi yang support untuk windows dan linux apa yah? kebetulan saya memiliki server linux tetapi untuk dicabang saya menggunakan windows? Mohon pemecahannya. Terima Kasih

    1. Mas Ipunk, bucardo support juga untuk postgresql yang berjalan di lingkungan windows. Tetapi bucardonya sendiri harus di install di linux.

Leave a Reply

Your email address will not be published. Required fields are marked *