1. 啟動數據庫
啟動主節點
docker run --name postgres-master -e POSTGRES_PASSWORD=mysecretpassword -p 5432:5432 -d postgres
啟動從節點
docker run --name postgres-slave -e POSTGRES_PASSWORD=mysecretpassword -p 5432:5432 -d postgres
需要配置掛載的存儲卷
2. 數據庫配置
2.1 主節點創建備份用戶
進入 psql 客戶端
psql -U <user> <database>
CREATE ROLE replica login replication encrypted password 'replica';
2.2 主節點和從節點修改 wal level
分別進入主節點和從節點,進入 psql 客戶端,執行以下命令
ALTER SYSTEM SET wal_level = 'hot_standby';
注意,主從節點均需進行修改
2.3 主節點配置
進入主節點的掛在卷,修改postgresql.conf文件:
listen_addresses = '*'
shared_buffers = 128MB
dynamic_shared_memory_type = posixarchive_mode = on
archive_command = 'test ! -f /data/pg_archive/%f && cp %p /data/pg_archive/%f' # 建議開啟歸檔,需要確保文件夾存在
max_wal_senders = 16
wal_keep_segments = 32
wal_sender_timeout = 60s
修改pg_hba.conf:
local all all trust
host all all 127.0.0.1/32 trust
host all all ::1/128 trust
host all all all md5
host replication replica 10.233.0.0/16 trust
修改后重啟主節點
2.4 從節點配置
進入主節點的掛在卷,修改postgresql.conf文件:
listen_addresses = '*'
shared_buffers = 128MB
dynamic_shared_memory_type = posixhot_standby = on
max_connections = 500 # 適當增加連接數
max_standby_streaming_delay = 30s
wal_receiver_status_interval = 10s
hot_standby_feedback = on
修改pg_hba.conf:
local all all trust
host all all 127.0.0.1/32 trust
host all all ::1/128 trust
host all all all md5
host replication replica 10.233.0.0/16 trust
創建recovery.conf:
standby_mode = on
primary_conninfo = 'host=<master-host> port=<master-port> user=replica password=replica' # 設置為主節點的信息
recovery_target_timeline = 'latest'
修改后重啟從節點
3. 檢查同步狀態
-- 查看同步節點狀態
select client_addr, sync_state from pg_stat_replication;
顯示節點說明配置成功
我們在主節點修改了數據:
從節點數據會更新
注意:從節點不可修改,嘗試修改會報錯
詳細原理:PostgreSql 主從數據庫備份