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

news2024/10/3 23:32:07

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

文章目录

      • Docker 启动 PostgreSQL 主从架构:实现数据同步的高效部署指南
        • 一 主从地址
        • 二 创建db网络
        • 三 docker compose 文件
        • 四 部署主库
        • 五 部署从库
        • 六 查看进程
        • 七 测试同步

本文详细介绍了如何使用 Docker 和 Docker Compose 部署 PostgreSQL 主从架构,实现数据的高效同步。通过网络创建、配置 Docker Compose 文件、设置主从库以及数据同步测试,用户可以轻松搭建高可用的 PostgreSQL 主从集群。文章还包含详细的环境配置、命令执行以及同步测试的示例,确保从主库创建的数据能够实时同步到从库,为构建高可用的数据库环境提供了完整的部署流程和操作指南。

预备课:Docker 安装与配置:从入门到部署

一 主从地址
IP地址名称备注
192.168.0.1postgresql01主库
192.168.0.2Postgresql02从库
二 创建db网络
docker network create --driver bridge dbnet
三 docker compose 文件

1)docker-compose.pgsqlmaster.yml

version: '3.0'
services:
  postgresql:
    image: postgres:14.5
    restart: always
    container_name: postgresql01
    environment:
      POSTGRES_PASSWORD: 12345678
    working_dir: /postgresql
    networks:
      - dbnet
    ports:
      - "5432:5432"
    volumes:
      - ./pg/data:/var/lib/postgresql/data

networks:
  dbnet:
    external: true

2)docker-compose.pgsqlslave.yml

version: '3.0'
services:
  postgresql:
    image: postgres:14.5
    restart: always
    container_name: postgresql02
    environment:
      POSTGRES_PASSWORD: 12345678
    working_dir: /postgresql
    networks:
      - dbnet
    ports:
      - "5432:5432"
    volumes:
      - ./pg/data:/var/lib/postgresql/data

networks:
  dbnet:
    external: true
四 部署主库

1)启动 docker-compose.pgsqlmaster.yml 文件

2)进入容器

docker exec -it your-容器-id /bin/bash

3)在容器中运行相关命令

# 切换为postgres用户
su postgres

# 运行 psql
psql
# 创建 replica 角色
CREATE ROLE replica login replication encrypted password 'replica'; #创建用户
#列出数据库用户和角色
\du
exit;

4)配置 postgresql.conf

# 在宿主机目录 ./pg/data 下编辑 postgresql.conf
sudo vi postgresql.conf

改为如下内容

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

5)配置 pg_hba.conf

# 新增配置
# 在宿主机目录 ./pg/data 下编辑 pg_hba.conf
host    replication     replica      192.168.0.2/32            trust
五 部署从库

1)启动 docker-compose.pgsqlslave.yml 文件

2)进入容器

docker exec -it your-容器-id /bin/bash

3)在容器中运行相关命令

# 此时可能会退出容器,只需要重新登入进去即可
rm -rf /var/lib/postgresql/data/*
# 注 此操作之后立即 运行 pg_basebackup 否则容易报错 无法备份

# 如果退出了,则再次进入
docker exec -it your-容器-id /bin/bash
# 进入容器之后运行
pg_basebackup -R -D /var/lib/postgresql/data -P -h 192.168.0.1 -p 5432 -U replica
# 显示 26288/26288 kB (100%), 1/1 tablespace
# 退出容器重启 docker
docker restart postgresql02

## 查看 ./pg/data 下的 postgresql.auto.conf 
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.
primary_conninfo = 'user=replica passfile=''/root/.pgpass'' channel_binding=prefer host=192.168.0.1 port=5432 sslmode=prefer sslcompression=0 sslsni=1 ssl_min_protocol_version=TLSv1.2 gssencmode=prefer krbsrvname=postgres target_session_attrs=any'

六 查看进程
# 主机
ps -ef|grep postgres

polkitd  10848 10828  0 9月28 ?       00:00:04 postgres
polkitd  10927 10848  0 9月28 ?       00:00:00 postgres: checkpointer
polkitd  10928 10848  0 9月28 ?       00:00:01 postgres: background writer
polkitd  10929 10848  0 9月28 ?       00:00:01 postgres: walwriter
polkitd  10930 10848  0 9月28 ?       00:00:02 postgres: autovacuum launcher
polkitd  10931 10848  0 9月28 ?       00:00:00 postgres: archiver last was 000000010000000000000003.00000028.backup
polkitd  10932 10848  0 9月28 ?       00:00:04 postgres: stats collector
polkitd  10933 10848  0 9月28 ?       00:00:00 postgres: logical replication launcher
polkitd  13939 10848  0 9月28 ?       00:00:01 postgres: walsender replica 192.168.0.2(34102) streaming 0/401A270
your    21783 21135  0 17:32 pts/1    00:00:00 grep --color=auto postgres

# 从机查看从数据库
docker ps |grep postgres 

your-容器-id   postgres:14.5    "docker-entrypoint.s…"   24 hours ago   Up 24 hours   0.0.0.0:5432->5432/tcp, :::5432->5432/tcp   postgresql02
七 测试同步
# 在主机容器中
postgres=# create database test12; 
CREATE DATABASE
postgres=# \list
                                 List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   
-----------+----------+----------+------------+------------+-----------------------
 postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
 template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
 test12    | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
(5 rows)

# 在从机查看已经同步
postgres=# \list   
                                 List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   
-----------+----------+----------+------------+------------+-----------------------
 postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
 template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
 test12    | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
(5 rows)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2187037.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python全栈学习记录(二十一)类的继承、派生、组合

类的继承、派生、组合 文章目录 类的继承、派生、组合一、类的继承二、派生三、组合 一、类的继承 继承是一种新建类的方式,新建的类称为子类,被继承的类称为父类。 继承的特性是:子类会遗传父类的属性(继承是类与类之间的关系&a…

基于STM32的数字温度传感器设计与实现

引言 STM32 是由意法半导体(STMicroelectronics)开发的基于 ARM Cortex-M 内核的微控制器系列,以其强大的处理能力、丰富的外设接口和低功耗著称,广泛应用于嵌入式系统设计中。在这篇文章中,我们将介绍如何基于 STM32…

C++《string》

在之前的C语言学习当中我们已经了解了一系列的字符以及字符串函数,虽然这些函数也能实现对字符串进行求长度、拷贝、追加等操作,但是C语言当中的这些函数是与字符串分离的,并且最主要的是在使用这些函数时原字符串的底层空间是需要我们自己来…

微知-Intel芯片中的QPI是什么?本质是什么?以及其他几个高速总线的速率问题(快速通道互联,CPU之间互联总线)

基础信息 CPU与CPU之间通过QPI总线进行通信,类似CPU与PCI-E设备通过PCIE总线进行通信。 The Intel QuickPath Interconnect (QPI):快速通道互联,快路径内部互联总线。是Inter-connect,内部互联的。是英特尔开发的一种高速点对点…

SpringBoot精华:打造高效美容院管理系统

第一章 绪论 1.1 选题背景 如今的信息时代,对信息的共享性,信息的流通性有着较高要求,尽管身边每时每刻都在产生大量信息,这些信息也都会在短时间内得到处理,并迅速传播。因为很多时候,管理层决策需要大量信…

BiLSTM模型实现电力数据预测

基础模型见:A020-LSTM模型实现电力数据预测 1. 引言 时间序列预测在电力系统管理、负荷预测和能源优化等领域具有重要意义。传统的单向长短期记忆网络(LSTM)因其在处理时间序列数据中的优势,广泛应用于此类任务。然而&#xff0…

用友NC service接口信息泄露漏洞

漏洞描述 用友NC service接口信息泄露漏洞,攻击者可通过构造恶意链接获取所有接口链接 公网上大部分服务器都没有修复此漏洞,可刷SRC 用友nc有个接口可以获取数据库账户密码,不过是老版本了 漏洞复现 app"用友-UFIDA-NC" POC …

哪家宠物空气净化器可以高效去除浮毛?希喂、IAM、有哈怎么样

在现代养宠家庭中,随着生活节奏的加快,清理浮毛也是很多家庭周末必须要做的事情。但是如何选择一款吸毛好、还不增加清理负担的宠物空气净化器,在寸土寸金的租房里为全家老小的健康生活保障?又如何通过强大的吸毛、除臭技术和除菌…

【学习笔记】手写一个简单的 Spring IOC

目录 一、什么是 Spring IOC? 二、IOC 的作用 1. IOC 怎么知道要创建哪些对象呢? 2. 创建出来的对象放在哪儿? 3. 创建出来的对象如果有属性,如何给属性赋值? 三、实现步骤 1. 创建自定义注解 2. 创建 IOC 容器…

IO模型介绍

一、理解IO 网络通信的本质就是进程间通信,进程间通信本质就是IO TCP中的IO接口:read / write / send / recv,本质都是:等 拷贝 所以IO的本质就是:等 拷贝 那么如何高效的IO? 减少“等”在单位时间的…

在VS code 中部署C#和avalonia开发环境

要在 Mac 的 VS Code 中配置 C# 和 Avalonia 的开发环境,您可以按照以下步骤进行: 1. 安装 .NET SDK 下载 .NET SDK: 访问 .NET 下载页面。选择适用于 macOS 的最新稳定版本的 .NET SDK,并下载安装程序。安装 .NET SDK&#xff1…

PADS自动导出Gerber文件 —— 6层板

在出GERBER文件之前要给PCB文件铺完铜并且检查连接性和安全间距无错误。进入CAM中之后点自动定义。如果电气层不需要用到2D线,保险起见在电气层中把2D线和文本去掉(在DRC检查时2D线不会报错,文本是会报错的),因为有些时…

【JAVA开源】基于Vue和SpringBoot的校园资料分享平台

本文项目编号 T 059 ,文末自助获取源码 \color{red}{T059,文末自助获取源码} T059,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

(功能测试)熟悉web项目及环境 测试流程

1.环境?有没有考虑过什么是环境? web网站为什么能打开? (是因为他的服务器已经在运行了,网站服务器相关环境已部署及运行) 所以什么是环境? 环境:就是项目运行所需要的软件及硬件组合…

php与python建站的区别有哪些

php与Python建站的区别: 1、语言层面Python的特性比php好,更加规范。 2、Python的性能比php高。 3、有只需要启动服务的时候执行一次的代码,在php里每个请求都会被执行一次,Python不需要。虽然php可以通过缓存缩短这方面的差距…

CVPR论文《DETRs Beat YOLOs on Real-time Object Detection》读后思维导图

下面欣赏一下论文中的图和表: 1、与YOLOs的性能对比图 2、不同置信度阈值下的框数 3、IoU阈值和置信度阈值对准确性和NMS执行时间的影响 4、混合编码器不同变体 5、模型概述。将骨干网后三个阶段的特征输入到编码器中。高效混合编码器通过基于注意力的尺度内特征交…

Linux网络基础:HTTPS 网络传输协议

HTTPS HTTPS 网络传输协议加密常见的加密方式(对称/非对称加密)数据摘要、数字签名HTTPS 加密过程探索的方案只使用对称加密(效率低下、不安全)只使用非对称加密(不靠谱、不安全)双方都使用非对称加密&…

js中的深拷贝与浅拷贝 手写深拷贝代码

1 什么是深拷贝和浅拷贝? 深拷贝和浅拷贝都是复制对象时常用的两种方式,区别在于对于嵌套对象的处理,浅拷贝只复制属性的第一层属性,双方修改嵌套对象将会互相影响。深拷贝会递归复制每一层的属性,修改任意一方互不影响…

YOLO11项目实战1:道路缺陷检测系统设计【Python源码+数据集+运行演示】

一、项目背景 随着城市化进程的加速和交通网络的不断扩展,道路维护成为城市管理中的一个重要环节。道路缺陷(如裂缝、坑洞、路面破损等)不仅影响行车安全,还会增加车辆的磨损和维修成本。传统的道路缺陷检测方法主要依赖人工巡检…

[云服务器17] 搭建PMail个性邮箱!我的邮箱我做主

哈喽大家好啊! 我们先来看一个邮箱: 123456example163.com你发现了吗?后面有163的域名! 这个就标志了邮箱服务提供商的名字,像常见的Outlook 163等。 那么作为一个追求自由主义的人,今天,我们就要使用开…