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 = posix
archive_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 = posix
hot_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 主从数据库备份