database replication(資料庫複製) 就是主資料庫(master)有更動時透過網路馬上複製一份到備用端(standby)
備用端(standby) 在平時可以做 read-only 的查詢。如果主資料庫(master)伺服器掛了,可以手動切換變成可以 update 的主資料庫(master)。
PostgreSQL 要建立 replication 可以用兩種方式
master & standby 的 OS 版本 & PostgreSQL 版本最好一樣,如果用 32/64 bit 不同的版本,有可能會不相容。離線的方式比較簡單,底下是介紹離線的方式。測試前最好資料備份,以免毀掉。
master 端的準確工作:
- 由於我們要用 rsync 傳輸資料,rsync 是使用 ssh 傳送資料,為了安全,ssh 一般是不開放 root 直接 login。開放 root ssh 如果弄完忘了關閉,風險很大。建議開放 postgres 也就是 PostgreSQL 的 super user,我們可以用 root 執行 'passwd postgres',就讓 postgres 可以 login 了。
- su - postgres,這時候應該是在 /var/lib/pgsql
- cd data,修改
postgresql.conf |
listen_address = '*' wal_level = hot_standby max_wal_senders = 3 |
pg_hba.conf |
host replication all 192.168.0.2/32 trust |
- 以 root 執行 'service postgresql stop'
standby 端的準備工作:
- su - postgres
- cd data
postgresql.conf |
hot_standby = on |
- 新增
/var/lib/pgsql/data/recovery.conf |
standby_mode = 'on' primary_conninfo = 'host=192.168.0.1' |
-
使用 rsync 從複製資料。
cd /var/lib/pgsql; rsync -av --exclude pg_xlog --exclude postgresql.conf 192.168.0.1:/var/lib/pgsql/data . |
在 standby 以 root 執行 'service postgresql start', 在 master 以 root 執行 'service postgresql start'
如果有錯誤,可以在 /var/lib/pgsql/data/pg_log 錯誤訊息。