PostgreSQL 9 Replication

1. Hot-Standby vs. Warm-Standby: 先講講Warm-Standby,它指的是Standby server處在offline的狀態下,並不能提供查詢工作。主要目的是讓Master在失效後能透過它快速的啟動來接手服務。 而Hot-Standby基本上跟Warm-Standby相同,只差異在於Hot可以提供read-only queries,可以利用這個特性來做負載平衡。

2. Replication 方法差異(file-based log shipping, streaming replication 及 synchronous replication)

        a) file-based log shipping: 指的是copy WAL log 到指定目錄,等到master有問題時,可以透過這些備份的 WAL log來進行還原。此方法是當一個WAL被填滿時(預設是16MB),才會進行copy, 所以master跟slave之間會有比較大的delay。

        b) streaming replication : 相較於file-based log shipping,Streaming的方式是根據WAL Record,在master 及standby node各自有一個WSL Sender及Receiver來對資料進行replicate。

       

        c) synchronous streaming replication : 與streaming replication相似,只需於Master的postgresql.conf增加配 置synchronous_standby_names,再於recovery.conf裡的primary_info裡多增加 application_name就可以了,這些參數會保證replication 同步。有一點值得注意的是當 你的synchronous_standby_names不只一個時,只有一個(第一個)可以做為同步的對象。


主要的設定為:

a) master node 上的 postgresql.conf

       wal_level = hot_standby or archive                         #對應hot-standby or warm-standby 
archive_mode = on
archive_command = 'cp %p /home/postgres/archive/%f' #也可用rsync來達到
max_wal_senders = 1 #基於WAL Record,值視standby server的數量
synchronous_standby_names = 'standby_db1,standby_db2' #同步replication時會用到

b) slave node 上的 postgresql.conf

       hot_standby = on                                           #hot-standby才需要有這個 

c) slave node 上的 recovery.conf

       standby_mode = on 
restore_command = 'cp /home/postgres/archive/%f %p'
primary_conninfo = 'host=db01 port=5432 user=repusr password=repusr application_name=standby_db1' #同步replication時會用到
trigger_file = '/opt/pg92/pgsql.trigger.6432'