Docker配置postgresql主从复制

本文详细描述了如何使用Docker和docker-compose在两台服务器上配置PostgreSQL主从复制,包括主数据库的设置、从数据库的同步和验证过程。

这里使用两台服务器为192.168.1.1和192.168.1.2,其中192.168.1.1为主数据库,192.168.1.2为从数据库。

一. 配置192.168.1.1主数据库

1. docker compose文件如下(postgres.yml):

postgres:
    image: postgres:14
    container_name: postgres-master
    ports:
      - 5432:5432
    volumes:
      - ${BASE_VOLUME_PATH}/postgresql/data:/var/lib/postgresql/data
      - /etc/localtime:/etc/localtime
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=root
      - POSTGRES_PASSWORD=111@111
    restart: always

2.启动数据库

docker compose -f postgres.yml up -d

3.创建主从复制用户

在主数据库中执行SQL语句:

CREATE ROLE replica_user login replication encrypted password '123456';

4. 修改pg_hba.conf配置

host replication replica_user 192.168.1.2/32 trust

5. 修改postgresql.conf配置

listen_addresses = '*'   #监听所有IP
archive_mode = on      #允许归档
archive_command = 'cp -i %p /4T/%f </dev/null'    #用该命令来归档logfile segment。
wal_level = replica    #开启热备
max_wal_senders = 10    #这个设置了可以最多有几个流复制连接
wal_keep_size = 1024    #设置wal的大小,单位M。
wal_sender_timeout = 60s #设置流复制主机发送数据的超时时间
max_connections = 100    #从库的max_connections必须要大于主库的

6. 重启主数据库

docker restart postgres-master

二  配置192.168.1.2从数据库

1. 使用主数据库的docker compose文件,修改容器名称

postgres:
    image: postgres:14
    container_name: postgres-slave
    ports:
      - 5432:5432
    volumes:
      - ${BASE_VOLUME_PATH}/postgresql/data:/var/lib/postgresql/data
      - /etc/localtime:/etc/localtime
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=root
      - POSTGRES_PASSWORD=111@111
    restart: always

2.启动数据库

docker compose -f postgres.yml up -d

3. 同步主节点数据

进入从库容器,删除自身的数据,同步主节点数据。

docker exec -it postgres-slave bash

cd /var/lib/postgresql/data/

rm -rf *

pg_basebackup -h 192.168.1.1 -p 15432 -U replica_user -Fp -Xs -Pv -R -D /var/lib/postgresql/data

4. 修改postgresql.conf配置

wal_level = replica   # WAL 日志级别为 replica
primary_conninfo = 'host=192.168.1.1 port=15432 user=replica_user password=123456'   # 主库连接信息    
hot_standby = on                     # 恢复期间,允许查询
recovery_target_timeline = latest    # 默认
max_connections = 120                # 大于等于主节点,正式环境应当重新考虑此值的大小

5. 重启从数据库容器

docker restart postgres-slave

三 验证

在主数据库上执行以下SQL,查看主从复制是否生效。

select client_addr,sync_state from pg_stat_replication;

在主数据库创建一张test表,查看从库是否也存在test表。

create table test_1(v1 varchar(100));

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值