2017年5月22日 星期一

Postgres 配置 1主多備 同步部屬



Postgres 配置 1 主 2 備庫設定, 在主庫新增資料會向兩台備庫資料庫同步資料



Postgres Version : 9.5

相關設定如下:
主 IP: 10.10.17.21
備1 IP: 10.10.17.22
備2 IP: 10.10.17.24


1.先在主庫新增同步帳號

postgres# CREATE ROLE replica login replication encrypted password 'replica';

2.新增同步資料夾

mkdir /data/pg_archive
3.在 10.10.17.21的 pg_hba.conf 新增 replica 用戶連線權限

host     all             all          10.10.17.22/32          trust  
host   replication      replica       10.10.17.22/32          md5   

host     all             all          10.10.17.24/32          trust   
host   replication      replica       10.10.17.24/32          md5   

4.修改 10.10.17.21 的 postgresql.conf


listen_addresses ='*'#監聽所有IP
archive_mode = on #允許歸檔
archive_command ='cp %p /data/pg_archive/%f' #用該命令來歸檔日誌文件段
wal_level = hot_standby
max_wal_senders = 32 
wal_sender_timeout = 60s #設置流複製主機發送數據的超時時間
max_connections = 100
重啟 Postgres db
pg_ctl stop
pg_ctl start

5. 在備庫 10.10.17.22 連連看 正庫
psql -h 10.10.17.21 -U postgres
要是不行得先查看 防火牆及DB Port 有無開啟


6.配置 postgresql.conf

wal_level = hot_standby
max_connections = 1000 # 這邊設置的連接數要比正庫的還要大
hot_standby = on # 說明備庫資料庫也用於資料查詢
max_standby_streaming_delay = 30s # 數據備份的最大時間
wal_receiver_status_interval = 10s # 最常多久向正庫報告一次備庫的狀態
hot_standby_feedback = on # 
wal_keep_segments = 100 #主庫保留多少個 WAL 給備庫

7.配置資料夾及資料

su - postgres
rm -rf /data/pgsql/*   #先将data目录下的数据都清空
pg_basebackup -h 10.10.17.21 -U replica -D /data/pgsql/ -X stream -P  # 從正庫Copy資料到備庫
mkdir /data/pgsql/pg_archive



8.備庫資料庫 10.10.17.22 新增 recovery.conf 檔案

cp /usr/pgsql-9.5/share/recovery.conf.sample /data/pgsql/recovery.conf
並且修改recovery.conf資料



standby_mode = on    # 說明該節點是備庫
primary_conninfo = 'host=10.10.17.21 port=5432 user=replica password=replica'  # 正庫的IP及用戶
recovery_target_timeline = 'latest'


配置完重啟DB
pg_ctl stop
pg_ctl start


9.查詢正庫
select client_addr,sync_state from pg_stat_replication;
會出現以下畫面

postgres=# select client_addr,sync_state from pg_stat_replication;
 client_addr | sync_state 
-------------+------------
 10.10.17.22 | async

(1 筆資料列)


10. 接下來另外一台備庫 10.10.17.24 的資料庫設定 跟 22一樣 (從Step 6做到8)
設定完後查詢正庫就會出現 兩台備庫IP已跟正庫連線的訊息 

postgres=# select client_addr,sync_state from pg_stat_replication;
 client_addr | sync_state 
-------------+------------
 10.10.17.24 | async
 10.10.17.22 | async
(2 筆資料列)


測試一下,正庫insert資料到備庫兩台, 同步是否正常! 






3 則留言:

  1. 查看 主備庫 同步延遲時間
    select pg_xlog_location_diff(sent_location, replay_location) from pg_stat_replication;


    回覆刪除
  2. postgres soft nofile 20470
    postgres hard nofile 655360
    postgres soft nproc 20470
    postgres hard nproc 163840
    postgres soft stack 102400
    postgres hard stack 327680

    回覆刪除
  3. SELECT slot_name, active FROM pg_replication_slots;

    回覆刪除