標籤:帳號 配置環境 replica priority 資料庫配置 create 組成 時間 postgre
原理機制
參考--https://yq.aliyun.com/articles/51009
主備總體結構
PG主備流複製的核心部分由walsender,walreceiver和startup三個進程組成。
- walsender進程是用來發送WAL日誌記錄的
- walreceiver進程是用來接收WAL日誌記錄的
- startup進程是用來apply日誌的
配置環境
主機名稱 IP地址 角色 資料目錄postgres202 192.168.1.202 primary /home/postgres/datapostgres203 192.168.1.203 standby /home/postgres/data
同步類型
- 非同步方式
- 同步方式
【非同步方式配置】
主要資料庫配置1. 主機192.168.1.2021.1 首先需要配置一個帳號進行主從同步。建立replica使用者佈建密碼,登入和備份許可權。CREATE ROLE replica login replication encrypted password ‘replica‘1.2 修改pg_hba.conf,增加replica使用者,進行同步。host replication replica 192.168.1.0/24 md5這樣,就設定了replica這個使用者可以從192.168.1.0對應的網段進行流複製請求。1.3 修改postgresql.conf,注意設定下下面幾個地方:wal_level = hot_standby # 這個是設定主為wal的主機max_wal_senders = 5 # 這個設定了可以最多有幾個流複製串連,差不多有幾個從,就設定幾個wal_keep_segments = 128 # 設定流複製保留的最多的xlog數目wal_sender_timeout = 60s # 設定流複製主機發送資料的逾時時間max_connections = 100 # 這個設定要注意下,從庫的max_connections必須要大於主庫的1.4 重啟主庫2. 備資料庫配置主機192.168.1.2032.1 使用pg_basebackup建備庫pg_basebackup -F p --progress -D /home/postgres/data -h 192.168.1.202 -p 5432 -U replica --password這裡使用了pg_basebackup這個命令,/home/postgres/data這個目錄是空的成功之後,就可以看到這個目錄中現有的檔案都是一樣的了。2.2 進入到/home/postgres/data目錄,修改recovery.conf,只要修改幾個地方就行了standby_mode = on # 這個說明這台機器為從庫primary_conninfo = ‘host=192.168.1.202 port=5432 user=replica password=replica‘ # 這個說明這台機器對應主庫的資訊recovery_target_timeline = ‘latest‘ # 這個說明這個流複製同步到最新的資料2.3 postgresql.conf中也有幾個地方要進行修改max_connections = 200 # 一般查多於寫的應用從庫的最大串連數要比較大hot_standby = on # 說明這台機器不僅僅是用於資料歸檔,也用於資料查詢max_standby_streaming_delay = 30s # 資料流備份的最大延遲時間wal_receiver_status_interval = 10s # 多久向主報告一次從的狀態,當然從每次資料複製都會向主報告狀態,這裡只是設定最長的間隔時間hot_standby_feedback = on # 如果有錯誤的資料複製,是否向主進行反饋2.4 啟動備【主庫】查看配置結果postgres=# select * from pg_stat_replication ;-[ RECORD 1 ]----+------------------------------pid | 1793usesysid | 24576usename | replicaapplication_name | walreceiverclient_addr | 192.168.1.203client_hostname | client_port | 32250backend_start | 2017-09-01 22:23:16.924496+08backend_xmin | 1676state | streamingsent_location | 0/60003E0write_location | 0/60003E0flush_location | 0/60003E0replay_location | 0/60003E0sync_priority | 0sync_state | async
【非同步更改為同步方式】
1. 主要資料庫配置主機192.168.1.2021.1 修改postgresql.confsynchronous_standby_names = ‘standby01‘2. 備資料庫配置主機192.168.1.2032.2 vi recovery.conf standby_mode = onprimary_conninfo = ‘application_name=standby01 host=192.168.1.202 port=5432 user=replica password=replica‘recovery_target_timeline = ‘latest3.重啟動主備庫【主庫】查看postgres=# select * from pg_stat_replication ;-[ RECORD 1 ]----+----------------------------pid | 1706usesysid | 24576usename | replicaapplication_name | standby01client_addr | 192.168.1.203client_hostname | client_port | 59550backend_start | 2017-09-01 23:36:05.7176+08backend_xmin | 1676state | streamingsent_location | 0/70000D0write_location | 0/70000D0flush_location | 0/70000D0replay_location | 0/70000D0sync_priority | 1sync_state | sync
PostgreSQL流複製