Docker 启动 PostgreSQL 主从架构:实现数据同步

1、准备环境

IP地址 主机名 角色
10.16.12.115 postgresql01 主库
10.16.12.116 postgresql02 从库

3、拉取postgresql镜像

bash 复制代码
docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/postgres-with-gis:16.4

4、创建db网络

bash 复制代码
docker network create --driver bridge dbnet

5、创建数据目录

bash 复制代码
mkdir /data/postgresql/data -p
chmod -R 777 /data/postgresql/data

docker-compose.yml文件编写

主库文件:

bash 复制代码
sudo tee /data/postgresql/docker-compose.yml <<-'EOF'
version: '3.0'
services:
  postgresql:
    image: registry.cn-hangzhou.aliyuncs.com/qiluo-images/postgres-with-gis:16.4
    restart: always
    container_name: postgresql01
    environment:
      POSTGRES_PASSWORD: admin@123
    working_dir: /postgresql
    networks:
      - dbnet
    ports:
      - "5432:5432"
    volumes:
      - /data/postgresql/data:/var/lib/postgresql/data
 
networks:
  dbnet:
    external: true
EOF

从库文件:

bash 复制代码
sudo tee /data/postgresql/docker-compose.yml <<-'EOF'
version: '3.0'
services:
  postgresql:
    image: registry.cn-hangzhou.aliyuncs.com/qiluo-images/postgres-with-gis:16.4
    restart: always
    container_name: postgresql02
    environment:
      POSTGRES_PASSWORD: admin@123
    working_dir: /postgresql
    networks:
      - dbnet
    ports:
      - "5432:5432"
    volumes:
      - /data/postgresql/data:/var/lib/postgresql/data
 
networks:
  dbnet:
    external: true
EOF

启动postgresql服务

bash 复制代码
cd /data/postgresql
docker-compose up -d
docker-compose ps

部署主库

bash 复制代码
docker exec -it postgresql01 /bin/bash
su - postgres
psql
CREATE ROLE replica login replication encrypted password 'replica@123';
bash 复制代码
修改postgresql.conf
vi /data/postgresql/data/postgresql.conf

```bash
listen_addresses = '*'
archive_mode = on
archive_command = '/bin/date'
max_connections = 1024
max_wal_senders = 32
wal_sender_timeout = 60s
wal_keep_size = 16
wal_level = replica

修改pg_hba.conf

vi /data/postgresql/data/pg_hba.conf

bash 复制代码
host    replication     replica        0.0.0.0/32        trust

部署从库

bash 复制代码
docker exec -it postgresql02 /bin/bash
在容器中运行相关命令:
rm -rf /var/lib/postgresql/data/*

如果退出了,则再次进入

bash 复制代码
docker exec -it postgresql02 /bin/bash
su - postgres
pg_basebackup -R -D /var/lib/postgresql/data -P -h 192.168.52.15 -p 5432 -U replica
bash 复制代码
docker restart postgresql02 
# 查看/data/postgresql/data下的 postgresql.auto.conf

、查看进程

主机查看主数据库

bash 复制代码
ps -ef|grep postgres

从机查看从数据库

bash 复制代码
docker ps |grep postgres

测试同步

在主机容器中

bash 复制代码
docker exec -it postgresql01 /bin/bash
su - postgres
psql
create database test12;
\list

在从机查看已经同步

bash 复制代码
docker exec -it postgresql02 /bin/bash
su - postgres
psql
\list

关闭selinux

bash 复制代码
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
setenforce 0
相关推荐
XUHUOJUN9 分钟前
Azure Local 2602→2606 演进全景:2604 为什么是架构转折点(2602→2606 演进与升级价值·中篇)
架构·azure local
BullSmall18 分钟前
Sonarqube9.9 docker 镜像启动后 conf 下的配置文件没有了
docker·容器·eureka
ruofu3324 分钟前
wsl端是py312,但是项目是py311, 如何下载py311的依赖包(wheels)
python·docker
恒拓高科WorkPlus1 小时前
BeeWorks Meet私有化视频会议:内网会议、组织架构联动与会议安全
安全·架构
spider_xcxc1 小时前
Docker 实战:容器化多服务应用,Dockerfile 与 Compose 配置全解析
docker·云原生·eureka·虚拟化·容器化
adinnet20262 小时前
深度拆解企业级 Agent 架构:LangGraph + 知识图谱 + 向量检索的协同设计
人工智能·架构·知识图谱
listening7772 小时前
HarmonyOS 6.1 混沌工程实战:从“故障免疫”到“韧性架构”
华为·架构·harmonyos
晚风吹长发2 小时前
Docker使用——Docker容器及相关命令
linux·运维·服务器·docker·容器·架构
郝学胜-神的一滴2 小时前
[简化版 GAMES 104] 现代游戏引擎 02:拆解现代游戏引擎5+1层级架构,吃透引擎底层核心逻辑
c++·unity·架构·游戏引擎·图形渲染·unreal engine·系统设计
电子科技圈2 小时前
先进封装、芯粒架构和3D集成——先进异构集成亟需兼具标准化与定制化能力的互联及总线IP解决方案
tcp/ip·设计模式·架构·软件构建·代码规范·设计规范