PostgreSQL:逻辑复制与物理复制

🧑 博主简介:CSDN博客专家历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程高并发设计Springboot和微服务,熟悉LinuxESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分享所学,希望通过我的实践经历和见解,启发他人的创新思维。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。
技术合作请加本人wx(注明来自csdn):foreast_sea

在这里插入图片描述


在这里插入图片描述

PostgreSQL:逻辑复制与物理复制

在这里插入图片描述

引言:数据洪流时代的生存法则

在数字化浪潮席卷全球的今天,数据已成为驱动企业发展的核心燃料。据统计,全球每天产生的数据量高达2.5EB(艾字节),相当于连续播放高清视频超过5亿小时。面对如此庞大的数据洪流,如何确保数据的高可用性、实时同步和灵活分发,已成为每个技术团队必须直面的生存挑战。

PostgreSQL作为全球最先进的开源关系型数据库,其复制机制的设计哲学完美诠释了 「多样性生存」 的进化法则。物理复制如同DNA级的精确克隆,保障数据毫厘不差的完整传承;逻辑复制则像智慧生物的主动适应,实现数据要素的精准重组。这两种看似对立的复制策略,在PostgreSQL生态中实现了完美的辩证统一。

本文将带您深入探索PostgreSQL复制的双生宇宙:物理流复制(Physical Streaming Replication) 以二进制日志为纽带,构建坚如磐石的数据堡垒;逻辑复制(Logical Replication) 则通过语义解析开辟灵活多变的数据通道。我们不仅会剖析WAL(Write-Ahead Logging)机制的精妙设计,还将通过最新PostgreSQL 16的实战演示,手把手构建高可用集群,并解密逻辑复制的订阅发布模型。更将深入探讨复制冲突的量子纠缠现象,揭示数据同步背后的隐藏维度。


1. 流复制(Streaming Replication)原理剖析

1.1 WAL日志:数据复制的基因编码

PostgreSQL的物理复制核心在于WAL(预写式日志)机制,其工作原理可类比生物遗传中的DNA复制:

-- 查看当前WAL写入位置
SELECT pg_current_wal_insert_lsn();

每个数据修改操作都会先写入WAL日志,确保故障恢复的原子性。WAL日志由多个16MB的段文件组成,命名规则为0000000100000001000000A1,前8位表示时间线ID,中间8位为逻辑日志号,最后8位是段文件序号。

1.2 流复制架构的三重维度

  1. 同步模式(Synchronous Mode)

    synchronous_commit = on
    synchronous_standby_names = 'standby1'
    
    • 强同步:主库等待至少一个备库确认
    • 潜在问题:网络延迟影响事务响应时间
  2. 异步模式(Asynchronous Mode)

    synchronous_commit = off
    
    • 数据最终一致性
    • 适用跨地域部署场景
  3. 级联复制(Cascading Replication)

    -- 级联节点配置
    hot_standby = on
    wal_receiver_create_temp_slot = on
    

    架构拓扑:

    Master -> Standby1 -> Standby2\-> Standby3
    

1.3 复制协议进化史

版本特性改进
9.0异步流复制
9.1同步复制
9.4逻辑解码API
10并行日志传输
13级联复制增强
16逻辑复制并行应用

2. 主从集群搭建实战(PostgreSQL 16)

2.1 环境拓扑规划

流复制
级联复制
Primary Node: 192.168.1.10
Standby1: 192.168.1.11
Standby2: 192.168.1.12

2.2 主库配置关键步骤

wal_level = replica
max_wal_senders = 10
wal_keep_size = 10GB
hot_standby = on

创建复制专用用户:

CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD 'SecurePass123!';

2.3 从库初始化的黑科技

使用pg_basebackup进行并行初始化:

pg_basebackup -h 192.168.1.10 -D /var/lib/postgresql/16/main \-U replicator -v -P --wal-method=stream -R \--max-rate=100M --checkpoint=fast

配置恢复参数:

primary_conninfo = 'host=192.168.1.10 port=5432 user=replicator password=SecurePass123!'
restore_command = 'cp /var/lib/postgresql/wal_archive/%f %p'

3. 逻辑复制(Logical Replication)配置深度解析

3.1 逻辑复制的量子跃迁

与物理复制的差异对比:

| 特性         | 物理复制             | 逻辑复制           |
|--------------|----------------------|--------------------|
| 复制粒度     | 磁盘块级别           | 事务逻辑级别       |
| 数据过滤     | 不可选               | 支持表级过滤       |
| 版本兼容性   | 主从版本必须一致     | 跨大版本兼容       |
| 数据结构变化 | 需要重新初始化       | 动态适应模式变更   |

3.2 发布订阅模型实战

创建发布节点:

CREATE PUBLICATION sales_pub FOR TABLE users, orders WITH (publish_via_partition_root = true);

订阅端配置:

CREATE SUBSCRIPTION sales_sub CONNECTION 'host=primary.example.com dbname=prod user=repuser password=secret' PUBLICATION sales_pub WITH (copy_data = true, create_slot = false);

3.3 高级过滤与转换

-- 条件过滤发布
CREATE PUBLICATION filtered_pub FOR TABLE logs WHERE (log_level IN ('ERROR', 'CRITICAL'));-- 列过滤
ALTER PUBLICATION sales_pub SET TABLE users (user_id, username), orders (order_id, total);

4. 复制冲突处理与监控艺术

4.1 冲突类型全图谱

复制冲突
物理冲突
逻辑冲突
WAL应用冲突
事务ID回卷
唯一约束冲突
数据依赖死锁

4.2 冲突自动处理策略

-- 配置冲突解决规则
ALTER SUBSCRIPTION sales_sub SET (run_on_alter='restart', apply_delay='5 min',conflict_resolution = 'apply_remote');

4.3 监控矩阵构建

实时监控面板配置:

-- 物理复制监控
SELECT * FROM pg_stat_replication;-- 逻辑复制诊断
SELECT subname, received_lsn, last_msg_send_time,pg_current_wal_lsn() - confirmed_flush_lsn AS replication_lag
FROM pg_stat_subscription;

结语:复制技术的进化论

PostgreSQL的复制体系就像生物进化的活化石,记录着数据同步技术从简单镜像到智能分发的演化轨迹。在物理复制的确定性世界与逻辑复制的概率宇宙之间,我们看到了数据库技术应对不同场景的智慧平衡。

随着PostgreSQL 16引入的逻辑复制并行应用(max_logical_replication_workers)和双向逻辑复制实验特性,这场复制革命正开启新的篇章。掌握这些技术,就如同获得在数据洪流中冲浪的智慧桨板,助您在数字时代的浪潮中破浪前行。


参考文献

  1. PostgreSQL Global Development Group. (2023). PostgreSQL 16 Documentation. https://www.postgresql.org/docs/16/
  2. K. S. Yadav. (2022). PostgreSQL High Performance Cookbook. Packt Publishing
  3. H. Fujii. (2021). Deep Dive into PostgreSQL WAL. PGCon Conference Proceedings
  4. M. Slot. (2020). Logical Replication Internals. 2ndQuadrant Technical Papers
  5. AWS Database Blog. (2023). Best Practices for PostgreSQL Logical Replication

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

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

相关文章

腾讯云COS与ZKmall 开源商城的存储集成方案

ZKmall 开源商城与腾讯云对象存储(COS)的集成,可通过云端资源托管、自动化数据同步、高性能存储架构实现本地存储负载降低与访问效率提升。以下是基于搜索结果的集成路径与核心优化点: 一、存储架构升级:本地与云端协同…

HTML — 浮动

浮动 HTML浮动(Float)是一种CSS布局技术,通过float: left或float: right使元素脱离常规文档流并向左/右对齐,常用于图文混排或横向排列内容。浮动元素会紧贴父容器或相邻浮动元素的边缘,但脱离文档流后可能导致父容器高…

【软件测试学习day1】软件测试概念

前言 本篇学习,测试相关基础概念、常见的开发模型测和测试模型,搞懂4个问题: 什么是需求什么是 bug什么是测试用例开发模型和测试模型 目录 1. 什么是需求 1.1 为什么要有需求 1.2 测试人员眼里的需求 1.3 如何深入了解需求 2. 测试用例…

Flutter常用组件实践

Flutter常用组件实践 1、MaterialApp 和 Center(组件居中)2、Scaffold3、Container(容器)4、BoxDecoration(装饰器)5、Column(纵向布局)及Icon(图标)6、Column/Row(横向/横向布局)+CloseButton/BackButton/IconButton(简单按钮)7、Expanded和Flexible8、Stack和Po…

刘火良FreeRTOS内核实现与应用学习之7——任务延时列表

在《刘火良FreeRTOS内核实现与应用学习之6——多优先级》的基础上:关键是添加了全局变量:xNextTaskUnblockTime ,与延时列表(xDelayedTaskList1、xDelayedTaskList2)来高效率的实现延时。 以前需要在扫描就绪列表中所…

图像预处理-插值方法

一.插值方法 当我们对图像进行缩放或旋转等操作时,需要在新的像素位置上计算出对应的像素值。 而插值算法的作用就是根据已知的像素值来推测未知位置的像素值。 1.1 最近邻插值 CV2.INTER_NEAREST 其为 warpAffine() 函数的参数 flags 的其一,表示最近…

智能配电保护:公共建筑安全的新 “防火墙”

安科瑞刘鸿鹏 摘要 随着城市建筑体量的不断增长和电气设备的广泛使用,现代建筑大楼的用电安全问题日益突出。传统配电方式面临监测盲区多、响应滞后、火灾隐患难发现等问题。为提升建筑电气系统的安全性和智能化水平,智慧用电系统应运而生。本文结合安…

如何解决DDoS攻击问题 ?—专业解决方案深度分析

本文深入解析DDoS攻击面临的挑战与解决策略,提供了一系列防御技术和实践建议,帮助企业加强其网络安全架构,有效防御DDoS攻击。从攻击的识别、防范措施到应急响应,为网络安全工作者提供了详细的操作指引。 DDoS攻击概览&#xff1a…

构建灵活的接口抽象层:支持多种后端数据存取的实战指南

构建灵活的接口抽象层:支持多种后端数据存取的实战指南 引言 在现代软件开发中,数据存取成为业务逻辑的核心组成部分。然而,由于后端数据存储方式的多样性(如关系型数据库、NoSQL数据库和文件存储),如何设计一套能够适配多种后端数据存取的接口抽象层,成为技术团队关注…

OpenCV 图形API(23)图像和通道合成

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 1.算法描述 在OpenCV的G-API模块中,图像和通道合成(composition)函数允许用户对图像进行复杂的操作,如合并…

帝国cms导航淘客新闻下载多功能网站源码 二次元风格自适应附教程

一、本模板使用帝国cms7.5 utf8版本,二次元导航新闻下载工具淘客自适应响应式帝国cms模板。 1、网站后台有3个系统模型,新闻系统模型,下载系统模型,导航系统模型,商城系统模型,可以根据自己的需求不同&…

本地部署大模型(ollama模式)

分享记录一下本地部署大模型步骤。 大模型应用部署可以选择 ollama 或者 LM Studio。本文介绍ollama本地部署 ollama官网为:https://ollama.com/ 进入官网,下载ollama。 ollama是一个模型管理工具和平台,它提供了很多国内外常见的模型&…

C# virtual 和 abstract 详解

简介 在 C# 中,virtual 和 abstract 关键字都用于面向对象编程中的继承和多态,它们主要用于方法、属性和事件的定义,但在用法上存在一些重要的区别。 virtual 关键字 virtual 表示可重写的方法,但可以提供默认实现,…

自动驾驶的数据集以及yolov8和yolop

项目背景 网络全部是分割了没有检测。 自动驾驶的车道线和可行驶区域在数据集中的表示 自动驾驶系统中的车道线和可行驶区域的表示方式主要有以下几种: 基于几何模型:使用几何模型来描述车道线和可行驶区域的形状和位置,例如直线、曲线、多…

Oracle DROP、TRUNCATE 和 DELETE 原理

在 Oracle 11g 中,DROP、TRUNCATE 和 DELETE 是三种不同的数据清理操作,它们的底层原理和适用场景有显著差异 1. DELETE 的原理 类型:DML(数据操作语言) 功能:逐行删除表中符合条件的数据,保留…

PCIe 5.0光学SSD原型问世!

近日,Kioxia Corporation(铠侠)、AIO Core Co., Ltd. 和 Kyocera Corporation(京瓷)联合宣布成功开发了一款支持 PCIe 5.0 接口的光学 SSD 原型。该技术旨在通过光接口替换传统的电接口,从而显著增加计算设…

SQL 查询中涉及的表及其作用说明

SQL 查询中涉及的表及其作用说明: 涉及的数据库表 表名别名/用途关联关系dbo.s_orderSO(主表)存储订单主信息(订单号、日期、客户等)dbo.s_orderdetailSoD(订单明细)通过 billid SO.billid 关…

C++学习之金融类安全传输平台项目git

目录 1.知识点概述 2.版本控制工具作用 3.git和SVN 4.git介绍 5.git安装 6.工作区 暂存区 版本库概念 7.本地文件添加到暂存区和提交到版本库 8.文件的修改和还原 9.查看提交的历史版本信息 10.版本差异比较 11.删除文件 12.本地版本管理设置忽略目录 13.远程git仓…

【HCIP】GRE VPN实验笔记

一、实验拓扑 二、实验要求 1、按照图示配置IP地址 2、在R1和R3上配置默认路由使公网区域互通 3、在R1和R3上配置GRE VPN,使两端私网能够互相访问,Tunnel口IP地址如图 4、在R1和R3上配置RIPv2或者ospf或者静态,来传递两端私网路由 三、实…

大模型——Llama Stack快速入门 部署构建AI大模型指南

Llama Stack快速入门 部署构建AI大模型指南 介绍 Llama Stack 是一组标准化和有主见的接口,用于如何构建规范的工具链组件(微调、合成数据生成)和代理应用程序。我们希望这些接口能够在整个生态系统中得到采用,这将有助于更轻松地实现互操作性。 Llama Stack 定义并标准化…