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
- 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.
mungkin sedikit revisi dari saya mas, pada recovery.conf parameter password kayaknya masuk dlm parameter primary_conninfo. e.g
BalasHapusprimary_conninfo = 'host=192.168.9.11 port=5432 user=rep password=rep123'
thank's
Thanks revisinya, tapi itu mungkin bisa dibuat satu line :)
Hapusthanks gan penjelasannya
BalasHapusmau nanya gan kalo model hot standby itu berarti si server web databasenya mengarah ke ip database master ?
BalasHapus