docker PostgreSQL 14.1 主从配置

主库 IP:192.168.1.100

从库 IP:192.168.1.101

1、主从服务器装PostgreSQL

#新建挂载目录
mkdir /data/postgres

#拉取镜像
docker pull postgres

#运行容器
docker run --name postgres \
    -e TZ=Asia/Shanghai \
    --restart=always \
    -e POSTGRES_PASSWORD=ly123456 \
    -p 5432:5432 \
    -v /data/postgresql:/var/lib/postgresql/data \
    -d postgres

这里挂载了 /var/lib/postgresql/data目录

2、主库操作

2.1 进入容器,并创建用于数据同步的角色

#进入容器
docker exec -it postgres /bin/bash

# 切换到 postgres 用户
su postgres

# 进去 postgres 客户端
psql

#创建角色
CREATE ROLE syncuser login replication encrypted password 'syncuser';

创建用户成功之后,控制台会显示 “CREATE ROLE”,利用 \du 命令可以查看 postgres 的用户列表 

docker PostgreSQL 14.1 主从配置_第1张图片

 

2.2 修改 pg_hba.conf 文件 

由于之前已经挂载出/var/lib/postgresql/data目录,直接vim修改文件

#编辑文件
vim pg_hba.conf

#添加一行
host    replication     syncuser        192.168.1.101/32        trust

docker PostgreSQL 14.1 主从配置_第2张图片

 注意:192.168.1.101是从库IP

2.3 修改 postgresql.conf 文件

listen_addresses = '*'   #监听所有IP
archive_mode = on      #允许归档
archive_command = '/bin/date'    #用该命令来归档logfile segment,这里取消归档。
wal_level = replica    #开启热备
max_wal_senders = 10    #这个设置了可以最多有几个流复制连接,差不多有几个从,就设置几个
wal_keep_size = 1024    #设置wal的大小,单位M。
wal_sender_timeout = 60s #设置流复制主机发送数据的超时时间
max_connections = 100    #这个设置要注意下,从库的max_connections必须要大于主库的

2.4 重启容器

docker restart postgres

----------------------------------------  ↑上面是主库        |      下面是从库↓  ----------------------------------------

3、从库操作

3.1 拉镜像(略)

3.2 启动容器

docker run --name postgres \
    --restart=always \
    -e TZ=Asia/Shanghai \
    -e POSTGRES_PASSWORD=ly123456 \
    -p 5432:5432 \
    -v /data/postgresql/data:/var/lib/postgresql/data \
    -v /data/postgresql/repl:/var/lib/postgresql/repl \
    -d postgres

这里挂载目录repl的作用是用来同步主库数据。 

进入容器(略)

3.3 拷贝主服务器数据进入从节点容器并同步(注意按实际情况修改主库节点ip地址)

#拷贝主库数据
pg_basebackup -R -D /var/lib/postgresql/repl -Fp -Xs -v -P -h 192.168.1.100 -p 5432 -U syncuser

3.4 退出,删除容器,删除挂载的data目录,拷贝主库数据

#退出
exit

#删除容器
docker rm -f postgres

#删除挂载data目录
rm -rf /data/postgresql/data

#移动主库数据至data目录
mv /data/postgresql/repl /data/postgresql/data

检查下postgresql.auto.conf文件是否包含primary_conninfo = 'user=syncuser ......

3.5 重新启动容器,这时不需要挂载repl文件夹

    docker run --name postgres \
    --restart=always \
    -e TZ=Asia/Shanghai \
    -e POSTGRES_PASSWORD=ly123456 \
    -p 5432:5432 \
    -v /data/postgresql/data:/var/lib/postgresql/data \
    -d postgres

你可能感兴趣的:(笔记,docker,postgresql,容器)