当前位置: 首页 > news >正文

Docker 启动 PostgreSQL 主从架构:实现数据同步的高效部署指南

1、环境规划

IP地址

主机名

角色

192.168.52.15

postgresql01

主库

192.168.52.17

postgresql02

从库

2、安装docker

2.1、安装依赖包

yum install -y yum-utils device-mapper-persistent-data lvm2

2.2、配置docker yum源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2.3、安装docker

yum install -y docker-ce

2.4、修改docker配置文件

mkdir /etc/docker -p

sudo tee /etc/docker/daemon.json <<-'EOF'{    "registry-mirrors": [      "https://docker.credclouds.com",      "https://k8s.credclouds.com",      "https://quay.credclouds.com",      "https://gcr.credclouds.com",      "https://k8s-gcr.credclouds.com",      "https://ghcr.credclouds.com",      "https://do.nark.eu.org",      "https://docker.m.daocloud.io",      "https://docker.nju.edu.cn",      "https://docker.mirrors.sjtug.sjtu.edu.cn",      "https://docker.1panel.live",      "https://docker.rainbond.cc"    ],   "data-root": "/etc/docker"}EOF

2.5、启动docker

systemctl daemon-reload

systemctl enable docker --now

systemctl restart docker

2.6、安装docker-compose

#下载docker-compose文件

curl -L "https://github.com/docker/compose/releases/download/v2.29.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

#给他一个执行权限

chmod +x /usr/local/bin/docker-compose

ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

#查看是否安装成功

docker-compose --version

3、拉取postgresql镜像

docker pull postgres:14.5

4、创建db网络

docker network create --driver bridge dbnet

5、创建数据目录

mkdir /data/postgresql/data -p

chmod -R 777 /data/postgresql/data

6、docker-compose.yml文件编写

主库文件:​​​​​​​

sudo tee /data/postgresql/docker-compose.yml <<-'EOF'version: '3.0'services:  postgresql:    image: postgres:14.5    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: trueEOF

从库文件:​​​​​​​

sudo tee /data/postgresql/docker-compose.yml <<-'EOF'version: '3.0'services:  postgresql:    image: postgres:14.5    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: trueEOF

7、启动postgresql服务

cd /data/postgresql

docker-compose up -d

docker-compose ps

图片

图片

8、部署主库

docker exec -it postgresql01 /bin/bash

su - postgres

psql

CREATE ROLE replica login replication encrypted password 'replica@123';

\du  #列出数据库用户和角色

图片

exit

配置postgresql.conf

vi /data/postgresql/data/postgresql.conf

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

host    replication     replica         192.168.52.17/32        trust

9、部署从库

docker exec -it postgresql02 /bin/bash

在容器中运行相关命令:

rm -rf /var/lib/postgresql/data/*

# 如果退出了,则再次进入 

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

exit

图片

docker restart postgresql02 

# 查看/data/postgresql/data下的 postgresql.auto.conf

图片

10、查看进程

# 主机查看主数据库

ps -ef|grep postgres

图片

# 从机查看从数据库

docker ps |grep postgres

图片

11、测试同步

# 在主机容器中

docker exec -it postgresql01 /bin/bash

su - postgres

psql

create database test12;

\list

图片

# 在从机查看已经同步

docker exec -it postgresql02 /bin/bash

su - postgres

psql

\list

http://www.lryc.cn/news/597358.html

相关文章:

  • k8s:docker compose离线部署haborV2.13.1及采用外部的postgresql及redis数据库
  • Docker 应用数据备份、迁移方案
  • SQL171 零食类商品中复购率top3高的商品
  • stm32使用USB虚拟串口,因电脑缺少官方驱动而识别失败(全系列32单片机可用)
  • CSP2025模拟赛1(2025.7.23)
  • rust嵌入式开发零基础入门教程(三)
  • C++day1
  • Android网络请求,Retrofit,OKHttp学习
  • Python爬虫--Xpath的应用
  • rust嵌入式开发零基础入门教程(五)
  • 使用阿里云 ESA 边缘函数转发代理 docker registry
  • OpenLayers 快速入门(十)常用 API 补充
  • 量化金融简介(附电子书资料)
  • 分布式系统中的缓存设计与应用
  • 三步实现Android系统级集成:预装Google TTS + 默认引擎设置 + 语音包预缓存方案
  • AI助力,轻松实现人声分离伴奏提取
  • 【金融机器学习】第五章:最优投资组合——Bryan Kelly, 修大成(中文翻译)
  • 手机开启16k Page Size
  • 大模型【进阶】(四)QWen模型架构的解读
  • SpringBoot07-数据层的解决方案:SQL
  • FireFox一些设置
  • latex中既控制列内容位置又控制列宽,使用>{\centering\arraybackslash}p{0.85cm}
  • OpenLayers 快速入门(二)Layer 对象
  • 深入掌握 Python 面向对象的灵魂——魔法函数(Magic / Dunder Methods)全景指南
  • CAN的终端电阻
  • 设计模式代码总结
  • 用 PyTorch 实现全连接网络识别 MNIST 手写数字
  • Android插件化实现方案深度分析
  • window下c++共享内存,进程互斥锁。
  • macOS配置maven及报错处理:zsh: permission denied: mvn