2016年5月22日 星期日

在 CentOS7/RHEL7 上架設 PostgreSQL Replication (Master-Slave)

設定目標:
  • 架設多部 PostgreSQL Server,並且設定 Replication 進行同步資料與備援!
    • 請參考這一篇的設定,架設好多部 PostgreSQL Server!
Master 端快速設定流程:
  1. 切換成 postgres 使用者:
    #su - postgres
    
  2. 建立用於 replication 的使用者帳密:
    $createuser --replication -P replica 
    
  3. 修改 PostgreSQL Server 相關設定:
    $vim /var/lib/pgsql/data/postgresql.conf
    (只修改下列設定:)
    listen_addresses = '*'
    wal_level = hot_standby
    
    ### 修改同步方式 ####
    # on ⇒ sync
    # remote_write ⇒ memory sync
    # local ⇒ slave is asynchronous
    # off ⇒ asynchronous
    synchronous_commit = local
    
    archive_mode = on
    archive_command = 'cp %p /var/lib/pgsql/archive/%f'
    
    ### 設定 Master 以及 Slave 主機數量 ###
    max_wal_senders = 2
    wal_keep_segments = 10
    
    ### 同步的主機名稱(可以任意定) ###
    synchronous_standby_names = 'slave01'
    
  4. 設定 pg_hba.conf 檔:
    $vim /var/lib/pgsql/data/pg_hba.conf
    ### 在檔尾追加下列設定 ###
    # host replication [replication user] [allowed IP addresses] password
    host    replication     replica          127.0.0.1/32            password
    host    replication     replica          192.168.5.244/32            password
    host    replication     replica          192.168.5.243/32            password
    
  5. 重新啟動 PostgreSQL Server:
    $pg_ctl restart 
    
Slave 端快速設定流程:
  1. 切換成 postgres 使用者:
    #su - postgres
    
  2. 由 Master 備份資料到 Slave (需要 replica 的密碼):
    $pg_basebackup -h 192.168.5.244 -U replica -D /var/lib/pgsql/data -P --xlog 
    
  3. 修改 PostgreSQL Server 相關設定:
    $vim /var/lib/pgsql/data/postgresql.conf
    (只修改下列設定,其餘設定保留)
    hot_standby = on
    
  4. 從範例檔複製設定檔:
    $cp /usr/share/pgsql/recovery.conf.sample /var/lib/pgsql/data/recovery.conf 
    
  5. 編修設定檔 /var/lib/pgsql/data/recovery.conf:
    $ vi /var/lib/pgsql/data/recovery.conf
    (只修改下列設定,其餘設定保留)
    restore_command = 'scp 192.168.5.244:/var/lib/pgsql/archive/%f %p'
    standby_mode = on
    ### 設定 Master Server 相關設定 ###
    primary_conninfo = 'host=192.168.5.244 port=5432 user=replica password=a123456 application_name=slave01'
    
  6. 重新啟動 PostgreSQL Server:
    $pg_ctl stop
    $pg_ctl start
    

參考文獻:

  1. http://www.server-world.info/en/note?os=CentOS_7&p=postgresql&f=3