PG数据库之流复制详解
一、流复制的定义
PostgreSQL流复制(Streaming Replication)是一种数据复制技术,它允许实时传输数据更改,从而在主服务器和一个或多个备用服务器之间保持数据同步。流复制是PostgreSQL数据库管理系统(DBMS)提供的一种高可用性和数据冗余机制,通过实时地在主节点和从节点之间复制数据,确保数据的一致性和可靠性。流复制技术自PostgreSQL 9.0版本引入以来,已经成为许多企业和高可用系统中的重要组成部分。
二、流复制的原理
流复制的核心思想是主节点将所有写入操作记录到一个称为写入前日志(Write-Ahead Logging,WAL)的文件中,而从节点则从主节点的WAL中读取这些变更并将其应用到自己的数据库中。以下是流复制的主要步骤和原理:
1. WAL日志生成:
当主节点上发生写入操作时,该操作将被记录到WAL中。WAL是一个顺序写入的日志文件,它记录了所有数据库变更的详细信息,包括事务ID、操作类型、受影响的数据等。
2. WAL日志传输:
主节点通过WAL日志传输进程(walsender)将WAL日志块发送给从节点。从节点上的WAL日志接收进程(walreceiver)接收到这些WAL日志块后,会将其写入到本地的WAL日志文件中。
3. WAL日志应用:
从节点上的启动进程(startup)会不断地从本地的WAL日志文件中读取变更记录,并将这些变更应用到自己的数据库中。应用过程是顺序执行的,以确保从节点上的数据与主节点保持一致。
4. 数据同步与一致性:
通过流复制,主节点和从节点之间可以保持数据的实时同步,确保数据的一致性。在同步复制模式下,主节点必须确保事务的变更已经被从节点接收并应用后,才会提交该事务,从而确保数据的一致性。
三、流复制的应用场景
流复制技术在许多应用场景中都发挥着重要作用,包括但不限于以下几个方面:
1. 高可用数据系统:
在高可用数据系统中,流复制是一种非常重要的技术,可以确保数据的一致性和可靠性。当主节点出现故障时,从节点可以立即接管,从而最小化数据丢失和停机时间。
2. 数据同步:
在数据同步的场景中,流复制可以实时地复制数据,确保数据的一致性和可靠性。例如,在分布式系统中,流复制可以确保各个节点之间的数据同步。
3. 跨数据中心复制:
使用流复制技术可以在不同的数据中心之间复制数据,并将数据保持在高度的一致性和可靠性。这对于实现地理分散的数据冗余和容灾具有重要意义。
4. 读写分离:
通过流复制,可以将读取操作分流到从节点,从而减轻主节点的负载。这对于高并发读写的应用场景非常有用,可以提高系统的整体性能。
四、流复制的配置与部署
为了实现流复制,需要在主节点和从节点上进行相应的配置和部署。以下是一个简要的配置和部署步骤:
1. 主节点配置:
-
修改postgresql.conf文件,设置以下关键参数:
wal_level
:设置为replica
或更高(如logical
),以支持流复制。max_wal_senders
:设置最大WAL发送进程数量,根据实际需求进行调整。wal_keep_size
:设置主节点上保留的WAL日志的最小大小(以MB为单位),以支持从节点的读取操作。archive_mode
:设置为on
,以支持WAL日志的归档。archive_command
:设置归档命令,用于将WAL日志文件归档到指定的存储位置。
-
修改pg_hba.conf文件,配置从节点连接主节点的权限:
host replication replication_user standby_ip/32 md5
-
创建一个具有复制权限的用户,用于从节点连接主节点:
CREATEROLE replication_user REPLICATION LOGIN PASSWORD 'replication_password';
-
重启PostgreSQL服务,使配置生效。
2. 从节点配置:
-
修改postgresql.conf文件,设置以下关键参数:
hot_standby
:设置为on
,以支持从节点的只读查询。primary_conninfo
:设置连接主节点所需的参数信息,包括主节点的IP地址、端口、用户等。primary_slot_name
:如果启用了逻辑复制槽(replication slot),可以设置此参数以确保WAL日志不会过早被删除。
-
使用pg_basebackup工具初始化从节点的数据目录,并从主节点同步初始数据:
pg_basebackup -h primary_ip -D /path_to_standby_data_dir -U replication_user -P -v --wal-method=stream
-
修改recovery.conf文件(在PostgreSQL 12及以后的版本中,该文件的内容已经整合到postgresql.conf中),设置以下参数:
standby_mode
:设置为on
,以表明这台机器是从节点。primary_conninfo
:设置连接主节点的信息。recovery_target_timeline
:设置为latest
,以表明流复制同步到最新的数据。
-
启动从节点上的PostgreSQL服务。
3. 验证与测试:
- 在主节点上查看同步状态,可以使用ps命令查看walsender进程,以及通过pg_stat_replication视图查看更详细的信息。
- 在从节点上查看同步状态,可以使用ps命令查看walreceiver进程。
- 进行主备切换测试,以确保在主节点故障时,从节点能够顺利接管并提供服务。
五、流复制的优缺点
(一)、优点
1. 实时数据同步:
流复制可以实时地复制数据,确保数据的一致性和可靠性。
2. 高可用性:
通过流复制,可以建立一个主备架构,当主节点出现故障时,从节点可以立即接管,从而最小化数据丢失和停机时间。
3. 负载均衡:
流复制允许将读取操作分流到从节点,从而减轻主节点的负载,提高系统的整体性能。
4. 数据保护:
流复制可以将数据复制到多个从节点,实现数据冗余,保护数据免受意外丢失或损坏。
5. 可扩展性:
流复制可以轻松地扩展到多个从节点,以满足不断增长的数据和并发需求。
(二)、缺点
1. 性能开销:
流复制会对主节点和从节点的性能产生一定的影响,因为需要记录和读取WAL日志。特别是在高并发写入的场景下,性能开销可能会更加明显。
2. 网络延迟:
流复制依赖于网络连接来传输WAL日志,因此网络延迟可能会影响数据同步的实时性。在网络条件较差的环境下,数据同步可能会存在一定的延迟。
3. 数据不一致性风险:
在异步复制模式下,主节点提交事务后不需要等待从节点确认即可返回成功,这可能会导致在主节点故障时从节点上的数据不完全一致。虽然同步复制模式可以解决这个问题,但会牺牲一定的性能。
六、流复制与逻辑复制的比较
除了流复制之外,PostgreSQL还提供了逻辑复制(Logical Replication)作为另一种数据复制技术。逻辑复制和流复制在应用场景、实现原理等方面存在一定的差异。以下是两者的主要比较:
1. 复制级别:
- 流复制:是对实例级别的复制(整个PostgreSQL数据库)。它要求主备库的大版本一致。
- 逻辑复制:是基于表级别的复制。它更灵活,可以跨不同版本的PostgreSQL实例复制数据,甚至可以在不同的数据库系统之间复制数据。逻辑复制允许用户对特定的表或模式进行复制。
2. 实现原理:
- 流复制:基于WAL日志的复制。主节点将WAL日志实时传输给从节点,从节点接收并应用这些WAL日志以实现数据同步。
- 逻辑复制:基于SQL语句层面的复制。主节点将DML操作解析成标准SQL语句并发送给从节点,从节点接收并应用这些SQL语句以实现数据同步。
3. 性能:
- 流复制:通常性能较高,因为它直接复制底层的数据变更。
- 逻辑复制:性能相对较低,因为它需要解析和应用SQL语句。然而,逻辑复制在跨版本和跨数据库系统的复制场景中可能具有优势。
4. 灵活性:
- 流复制:灵活性较低,不支持表级别的选择性复制。
- 逻辑复制:灵活性较高,支持表级别的选择性复制和跨版本、跨数据库的复制。
5. 应用场景:
- 流复制:适用于需要高性能数据同步和高可用性的场景。
- 逻辑复制:适用于需要跨版本、跨数据库系统复制或表级别选择性复制的场景。
七、流复制的最佳实践
为了充分发挥流复制技术的优势并避免潜在的问题,以下是一些最佳实践建议:
1. 合理配置参数:
根据实际需求合理配置主节点和从节点的参数,如wal_level
、max_wal_senders
、wal_keep_size
等。确保这些参数能够支持高效的流复制操作。
2. 监控与告警:
建立监控和告警机制,实时监控流复制的状态和性能。一旦发现异常情况,立即采取措施进行处理,以避免数据丢失或服务中断。
3. 定期备份与恢复测试:
定期对数据库进行备份,并进行恢复测试以确保备份数据的
七、总结
PostgreSQL流复制是一种实时数据同步技术,通过WAL日志在主节点和从节点间传输并应用数据变更,确保数据一致性和可靠性。它适用于高可用数据系统、数据同步、跨数据中心复制及读写分离等场景。配置流复制需调整主从节点的参数,创建复制用户,并初始化从节点数据。流复制具有实时同步、高可用、负载均衡等优点,但也存在性能开销、网络延迟及数据不一致性风险。与逻辑复制相比,流复制适用于高性能数据同步,而逻辑复制则更灵活,支持跨版本和数据库复制。为发挥流复制优势,应合理配置参数、建立监控告警机制,并定期备份与恢复测试。
相关文章:
PG数据库之流复制详解
一、流复制的定义 PostgreSQL流复制(Streaming Replication)是一种数据复制技术,它允许实时传输数据更改,从而在主服务器和一个或多个备用服务器之间保持数据同步。流复制是PostgreSQL数据库管理系统(DBMS)…...
Python酷库之旅-第三方库Pandas(174)
目录 一、用法精讲 801、pandas.Categorical类 801-1、语法 801-2、参数 801-3、功能 801-4、返回值 801-5、说明 801-6、用法 801-6-1、数据准备 801-6-2、代码示例 801-6-3、结果输出 802、pandas.Categorical.from_codes方法 802-1、语法 802-2、参数 802-3、…...
【Linux网络】基于TCP的全连接队列与文件、套接字、内核之间的关系
W...Y的主页 😊 代码仓库管理💕 前言:之前我们已经学习了TCP传输协议,而无论是TCP还是UDP都是使用socket套接字进行网络传输的,而TCP的socket是比UDP复杂的,当时我们学习TCPsocket编程时使用listen函数进行…...
IDE(集成开发环境)
IDE(集成开发环境)是软件开发过程中不可或缺的工具,它集成了代码编写功能、分析功能、编译器、调试器等开发工具,旨在提高开发效率。不同的IDE支持不同的语言和框架,下面是一些通用的IDE使用技巧和插件推荐,…...
一键导入Excel到阿里云PolarDB-MySQL版
今天,我将分享如何一键导入Excel到阿里云PolarDB-MySQL版数据库。 准备数据 这里,我们准备了一张excel表格如下: 连接到阿里云PolarDB 打开的卢导表,点击新建连接-选择阿里云PolarDB-MySQL版。如果你还没有这个工具,…...
Oracle有哪些版本
目录 Oracle 1(1979年) Oracle 2(1983年) Oracle 7(1992年) Oracle 8i(1999年) Oracle 9i(2001年) Oracle 10g(2004年) Oracle 11g(2007年) Oracle 12c(2013年) Oracle 18c(2018年) Oracle 19c(2019年) Oracle 21c(2023年) Oracle 23ai(202…...
先来先服务(FCFS,First-Come, First-Served)调度算法
有利于CPU繁忙作业的原因 充分利用CPU资源: 当一个CPU繁忙型的作业到达后,它会立即被执行,并且在没有其他作业等待的情况下,可以一直占用CPU直到完成。这使得CPU能够持续地执行作业,最大化利用CPU资源。 减少上下文切换…...
Windows操作系统忘记密码怎么办 这个方法屡试不爽 还不来试一下
Windows操作系统重置密码的操作步骤如下: 本方法适用于Windows Server 2008R2及其之后的操作系统。 第一步:从Windows 2008R2之后的操作系统光盘启动到安装界面,一直下一步到磁盘分区界面,按shiftF10调出cmd命令行界面。 第二步&…...
基于java的山区环境监督管理系统(源码+定制+开发)环境数据可视化、环境数据监测、 环境保护管理 、污染防治监测系统 大数据分析
博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…...
jQuery Mobile 表单输入
jQuery Mobile 表单输入 引言 在移动设备上,表单输入是用户与移动应用交互的重要方式。jQuery Mobile 是一个基于 jQuery 的移动设备友好的开发框架,它提供了丰富的组件和工具来帮助开发者创建响应式和交互式的移动界面。本文将详细介绍如何使用 jQuery Mobile 来创建和定制…...
IoC详解
共有两类注解类型可以实现: 1. 类注解:Controller、Service、Repository、Component、Configuration. 2. 方法注解:Bean. 类注解 Controller(控制器存储) 使⽤Controller存储bean的代码如下所⽰: Con…...
基于 ThinkPHP+Mysql 灵活用工_灵活用工系统_灵活用工平台
基于 ThinkPHPMysql 灵活用工灵活用工平台灵活用工系统灵活用工小程序灵活用工源码灵活用工系统源码 开发语言 ThinkPHPMysql 源码合作 提供完整源代码 软件界面展示 一、企业管理后台 二、运用管理平台 三、手机端...
etcd之etcd分布式锁及事务(四)
1、etcd分布式锁及事务 1.1 前言 分布式锁是控制分布式系统之间同步访问共享资源的一种方式。在分布式系统中,常常需要协调他们的动作。如 果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要…...
智慧旅游微信小程序平台
作者介绍:✌️大厂全栈码农|毕设实战开发,专注于大学生项目实战开发、讲解和毕业答疑辅导。 🍅获取源码联系方式请查看文末🍅 推荐订阅精彩专栏 👇🏻 避免错过下次更新 Springboot项目精选实战案例 更多项目…...
C++设计模式创建型模式———简单工厂模式、工厂方法模式、抽象工厂模式
文章目录 一、引言二、简单工厂模式三、工厂方法模式三、抽象工厂模式四、总结 一、引言 创建一个类对象的传统方式是使用关键字new , 因为用 new 创建的类对象是一个堆对象,可以实现多态。工厂模式通过把创建对象的代码包装起来,实现创建对…...
C++ 类与对象(中) 默认成员函数
我们知道在类中,有成员变量和成员函数,我们可以通过创造不同的成员函数来实现这个类不同的功能,如果我们创造一个类,却不实现它的成员函数会如何呢?这个就涉及到类中的默认成员函数的概念了。但在本文我们主要介绍以下…...
中间人攻击(https降级攻击)和iptables命令分析
中间人攻击 以下是一个简单的中间人攻击示例,结合 ARP 欺骗和流量修改: 1. 进行 ARP 欺骗 首先,使用 arpspoof 进行 ARP 欺骗,将受害者的流量重定向到攻击者的机器上: sudo arpspoof -i eth0 -t 172.29.144.50 172…...
开源生活-分布式管理
开源竞争(当自己没有办法彻底掌握一门技术的时候就彻底开源掉;培养出更多的依赖,让更多人帮助你完善你的技术,那么这不就是在砸罐子吗?一个行业里面总会有人先砸罐子的,你不如先砸罐子,还能听个…...
华为OD机试真题- 关联子串
该专栏题目包含两部分: 100 分值部分题目 200 分值部分题目 所有题目都会陆续更新,订阅防丢失 题目描述: 给定两个字符串str1和str2,如果字符串str1中的字符,经过排列组合后的字符串中,只要有一个字符串是…...
云智慧完成华为原生鸿蒙系统的适配, 透视宝 APM 为用户体验保驾护航
2024 年 10 月 22 日,首个国产移动操作系统 —— 华为原生鸿蒙操作系统 HarmonyOS NEXT 正式面世,成为继 iOS 和 Android 后的全球第三大移动操作系统。HarmonyOS NEXT,从系统内核、数据库根基,到编程语言创新、AI(人工…...
QT 多语言转换 ts、qm
QT开发之路 企业级开发系列文章,主要目标快速学习、完善、提升 相关技能 高效完成企业级项目开发 分享在企业中积累的实用技能和经验。 通过具体的编码过程、代码示例、步骤详解、核心内容和展示的方法解决遇到的实际问题。 阅读前声明 本系列文章属于付费内容 禁止…...
C++学习:类和对象(二)
一、默认成员函数 1. 什么是默认成员函数? 在C中,每个类都有一些特殊的成员函数,如果程序员没有显式地声明,编译器会自动为类生成这些函数,这些函数称为默认成员函数 2. 默认成员函数列表 默认构造函数(…...
深度学习(五):语音处理领域的创新引擎(5/10)
一、深度学习在语音处理中的崛起 在语音处理领域,传统方法如谱减法、维纳滤波等在处理复杂语音信号时存在诸多局限性。这些方法通常假设噪声是平稳的,但实际噪声往往是非平稳的,导致噪声估计不准确。同时,为了去除噪声࿰…...
双曲函数(Hyperbolic functuons)公式
在python等语言里有双曲函数库和反双曲函数库,但是并没有包含所有的双曲函数。以numpy为例子,numpy只提供了sinh、cosh、tanh、arcsinh、arccosh、arctanh六种函数,那么其余的就需要用公式计算了。 转换公式 对于函数库不能直接计算的&#…...
【CSS/SCSS】@layer的介绍及使用方法
目录 基本用法layer 的作用与优点分离样式职责,增强代码可读性和可维护性防止无意的样式冲突精确控制样式的逐层覆盖提高复用性 兼容性实际示例:使用 import 管理加载顺序实际示例:混入与 layer 结合使用 layer 是 CSS 中用于组织和管理样式优…...
我为什么投身于青少年AI编程?——打造生态圈(三)
第五部分 青少年AI编程生态圈 一、生态圈 主要涵盖家庭、社区/中小学、高校高职、主管部门。 1、家庭 我们与社区/中小学一道打造让家长满意的模式。 教得好: 费用少: 家门口: 2、社区/中小学 社区党群服务中心和中小学都有大面积科普…...
出海要深潜,中国手机闯关全球化有了新标杆
经济全球化的大势之下,中国科技企业开拓海外市场已成为一种必然选择。 对于国内手机企业来说,推进全球商业版图扩张,业务潜力巨大,海外市场是今后的关键增长引擎。 当前中国手机厂商在海外市场的发展,有收获也有坎坷…...
百度SEO中的关键词密度与内容优化研究【百度SEO专家】
大家好,我是百度SEO专家(林汉文),在百度SEO优化中,关键词密度和关键词内容的优化对提升页面排名至关重要。关键词的合理布局与内容的质量是确保网页在百度搜索结果中脱颖而出的关键因素。下面我们将从关键词密度和关键…...
如何用fastapi集成pdf.js 的viewer.html ,并支持 mjs
fastapi 框架 集成pdf.js 的 viewer.html?file=***,支持跨域,支持.mjs .wasm .pdf 给出完整示例代码 要在 FastAPI 框架中集成 pdf.js 的 viewer.html,并支持跨域访问以及 .mjs、.wasm、.pdf 文件的正确加载,可以按照以下步骤进行。下面提供一个完整的示例,包括项目结构…...
文件相对路径与绝对路径
前言: 在写代码绘制图像的过程中,发现出现cant read input file的异常,而且输出框没有绘制图片,所以寻找解决方案。先贴上之前写的简洁版绘制图像代码 1.BackGround类 import java.awt.image.BufferedImage;public class BackG…...
莱芜高端网站设计建设/如何做好网络推广销售
Apache Spark 2.4.0是2.x系列中的第五个版本。此版本增加了屏障执行模式,以便更好地与深度学习框架集成;引入30多个更高阶的内置函数,能够更轻松地处理复杂数据类型;优化K8s集成,同时提供Scala 2.12实验性支持。其他主…...
做前端项目怎么进行网站切图/营销心得体会感悟300字
ListView使用多选模式好处 交互与数据分离,在多选状态下不需要修改数据源,在最后确定的时候获取选择索引来确定选择的数据。 ListView模式 CHOICE_MODE_NONE:普通模式;CHOICE_MODE_SINGLE:单选模式;CHOICE_…...
wordpress travel/山西seo谷歌关键词优化工具
需求 数据库中有个字段存取的接口返回的JSON数据,现在需要取出JSON数据中部分信息,数据格式如下,要取出orderSn对应的数据 {"data":{"orderSn":"D21031315340867693","payUrl":"https://...&q…...
微信如何做商城网站/石家庄网站关键词推广
记录点滴32 2012年12月9日 大学三年级 第一学期14周结束 最近很忙吧,挺好的,不是么。不过有时自己还是有抗拒心理,最近真的是作业泛滥,课程设计充斥着每一天。每一天都想着如何完成作业和课程设计。就这样,逼着自己去学…...
模板网站为什么做不了优化/培训课程
方程:变量:z,t想要:S S(z,t),A A(z,t)参数:a,b,c我是sqrt(-1)d是偏导数算子dS / dt -i a z S -i b A(d / dz c d / dt)A -i S边界条件:西格玛…...
黄石做网站公司/网络营销的基本流程
1、两种实现activity跳转的方法 实现activity的跳转主要有两种方法,startActivity()和startActivityForResult();例如activity A跳转到activity B 对于,第一种,是把activity A的数据,通过intent传送到activity B,但是不…...