Docker之PostgreSQL 12主从流复制搭建
环境参数
1. 宿主机 ubnutu 20.0.4LTS
2. Docker CE 19.0.3
3. Postgre 12.4
4. master容器 172.17.0.2 slave 172.17.0.3
主要步骤
1. 设置两个容器 master slave
docker run --name slave -e POSTGRES_PASSWORD=123456 -p 5412:5432 -d postgres:12.4 docker run --name master -e POSTGRES_PASSWORD=123456 -p 5411:5432 -d postgres:12.4
2. 然后stop掉slave
3. 查看容器挂载实际目录(或者容器内直接操作文件)
docker inspect master|grep Source /var/lib/docker/volumes/1768df8e4d70b74d63c43a7d1b4257127be1857d535a4c5e79f9d727584da8eb/_data docker inspect slave|grep Source /var/lib/docker/volumes/d89f20c596f57acab31e806e3fcf59ada481052d92afc6f3596f26d46b7fd700/_data
4. master节点创建复制账号或者直接使用root账号
CREATE ROLE replication WITH REPLICATION PASSWORD 'postgres' LOGIN;
5. 进入Master节点的实际磁盘目录
cd /var/lib/docker/volumes/1768df8e4d70b74d63c43a7d1b4257127be1857d535a4c5e79f9d727584da8eb/_data
vim pg_hba.conf 添加如下代码
host replication replication 172.17.0.3/32 md5 #配置复制账号 以及slave的ip
vim postgresql.conf 添加如下代码
wal_level = hot_standby #启动流复制
max_wal_senders = 3
6. 重启master节点 准备开始数据同步
master节点执行sqlSELECT pg_start_backup('base', true) 宿主机执行
rsync -ac /var/lib/docker/volumes/b2892403b622c733f771520eaff33055c77e1621f525dd038ea4610622454749/_data/ /var/lib/docker/volumes/6d0e60a38cc300793dccdf35df5bd6660849847aa4236166d5c09bccbdf26019/_data/ --exclude-from=/tmp/exclude.txt exclude.txt 主要是排除不用的同步的文件pg_hba.conf、pg_ident.conf、postgresql.conf、postmaster.pid 也可以使用 pg_basebackup 命令进行备份同步
7. 来到slave节点的实际目录 由于PG12取消了recovery.conf 我们需要在slave节点建立recovery.signal或standby.signal 我们这里使用standby.signal
8. 然后配置postgresql.conf 新增
hot_standby = on primary_conninfo = 'host=172.17.0.2 port=5432 user=replication password=postgres application_name=172.17.0.3'
9. 启动slave
10. master节点执行验证
select * from pg_stat_replication;