版本
Docker 18.03
Postgres 10.3
主IP:172.17.0.12
从IP:172.17.0.13
启动docker容器
-
创建数据存储目录 mkdir -p /home/data/pgdata{1,2}
-
分别启动主库和从库(建议使用docker-compose)
docker run -e POSTGRES_PASSWORD=12345678 -e TZ=Asia/Shanghai --name pg-master -d -p 5435:5432 -v /home/data/pgdata1:/var/lib/postgresql/data postgres:10
docker run -e POSTGRES_PASSWORD=12345678 -e TZ=Asia/Shanghai --name pg-slaver -d -p 5436:5432 -v /home/data/pgdata2:/var/lib/postgresql/data postgres:10
-
记录IP【也可以启动命令指定】
主服务器
-
cd /home/data/pgdata1
-
vi pg_hba.conf
host replication all 172.17.0.13/32 trust
-
vi postgresql.conf
archive_mode = on #开启归档模式 archive_command = 'cp %p /var/lib/postgresql/data/%f' #归档命令 wal_level = hot_standby #热备模式 max_wal_senders = 10 #最多有1个流复制连接 wal_sender_timeout = 60s #流复制超时时间 max_connections = 100 #最大连接时间,必须要小于从库的配置
-
重启
从服务器
-
进入docker exec
docker exec -it pg-slaver bash cd /var/lib/postgresql pg_basebackup -h 172.17.0.12 -U postgres –D data2/ -X stream -R –P rm -rf data mv data2 data
-R
表示自动生成recovery.conf文件,若不加,可以自定义该文件:standby_mode = on #表示该节点是从库 primary_conninfo = 'host=172.17.0.12 post=5432 user=postgres password=12345678' recovery_target_timelint = 'latest' #说明恢复到最新状态
-
退出docker
cd /home/data/pgdata2
vi postgresql.confwal_level = hot_standby #热备模式 max_connections = 200 #最大连接 hot_standby = on #说明这台机器不仅用于数据归档,还可以用于数据查询 max_standby_streaming_delay = 30s #流备份的最大延迟时间 wal_receiver_status_interval = 10s #向主机汇报本机状态的间隔时间 hot_standby_feedback = on #r出现错误复制,向主机反馈
-
重启
验证
进入主服务器,连接数据库,执行:select client_addr,sync_state from pg_stat_replication;
正确显示地址,表示配置成功。
接下来可以建表进行测试。