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(人工…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...

C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...