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'