[PostgreSQL] PostgreSQL 9.x 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'

沒有留言:

張貼留言