【注意】最后更新于 November 29, 2021,文中内容可能已过时,请谨慎使用。
具体操作的时候注意ip的替换以及max_connections参数的变更
环境
docker
postgres 10.14
详细步骤
环境准备
1
2
3
4
5
6
|
docker network create --driver bridge --subnet=172.18.12.0/16 --gateway=172.18.12.1 mynet
docker run --name pgsmaster -p 5432:5432 --network=mynet --ip 172.18.12.100 -e POSTGRES_PASSWORD=pgsmaster -v $(pwd)/pgsmaster:/var/lib/postgresql/data -d postgres:10.14
docker run --name pgsslave -p 5433:5432 --network=mynet --ip 172.18.12.101 -e POSTGRES_PASSWORD=pgsslave -v $(pwd)/pgsslave:/var/lib/postgresql/data -d postgres:10.14
|
进入master容器
1
2
|
su - postgres
CREATE ROLE replica login replication encrypted password 'replica';
|
修改 /var/lib/postgresql/data/pg_hba.conf
添加如下记录
1
|
host replication replica 172.18.12.101/32 trust #允许172.18.12.101使用 replica 用户来复制
|
修改 /var/lib/postgresql/data/postgresql.conf
1
2
3
|
listen_addresses = '*' # 监听所有IP
archive_mode = on # 允许归档
wal_level = replica # 开启热备
|
进入slave容器
1
2
3
4
5
|
su - postgres
# 先清空数据,然后再从master同步数据
rm -rf /var/lib/postgresql/data/*
# 这一步要速度快,要不然容器会以为data下面为空而退出
pg_basebackup -h 172.18.12.100 -p 5432 -U replica -Fp -Xs -Pv -R -D /var/lib/postgresql/data
|
修改 /var/lib/postgresql/data/postgresql.conf
1
2
3
|
wal_level = replica # WAL 日志级别为 replica
hot_standby = on # 恢复期间,允许查询
max_connections = 120 # 大于等于主节点,正式环境应当重新考虑此值的大小
|
修改/var/lib/postgresql/data/recovery.conf
1
2
|
standby_mode = 'on'
primary_conninfo = 'host=172.18.12.100 port=5432 user=replica password=replica' # 主库连接信息
|
进入master容器校验
1
2
|
su - postgres
select client_addr,sync_state from pg_stat_replication;
|
参考资料
利用Docker部署 PostgreSQL 12.4主从_Expec-乐的博客-CSDN博客