PostgreSQL 复制延迟

PostgreSQL 的流复制(Streaming Replication)是一种高效的复制机制,用于在主服务器和一个或多个备用服务器之间传输数据,以实现高可用性和负载均衡。然而,复制一旦延迟可能会带来显著的挑战。本文将带您了解有关 PostgreSQL 复制延迟的所有内容,包括其原因、检测方法、影响和解决方案。

1. 什么是复制延迟?

复制延迟是指备用服务器在应用最新更改时比主服务器滞后的情况,这种延迟可能带来以下问题:

  • 数据不一致: 从备用服务器读取数据的应用程序可能会遇到过时的数据。
  • 故障转移时间增加: 在故障转移过程中,备用服务器可能需要更多时间追上主服务器,导致停机时间增加。
  • 潜在的数据丢失: 如果主服务器发生故障,未复制的事务可能会丢失。
  • 性能下降: 高复制延迟会降低备用服务器的整体性能。

2. 复制延迟的原因

导致复制延迟的原因包括:

  • 网络延迟: 高网络延迟会减慢主服务器向备用服务器传输 WAL(预写日志)文件的速度。
  • I/O 瓶颈: 备用服务器的磁盘 I/O 性能影响其写入和应用 WAL 数据的速度。
  • 资源争用: 主服务器或备用服务器上的 CPU 和内存争用会减慢复制进程。
  • 配置问题: 配置不当的复制设置可能导致性能下降。
  • 高事务量: 主服务器上的高事务量可能会使复制进程不堪重负。

3. 检测的原理

在 PostgreSQL 中,复制延迟主要通过监控主服务器和备用服务器之间的 WAL(预写日志)位置差异来检测。复制过程涉及以下几个关键位置:

  • pg_current_wal_lsn():当前 WAL 写入位置,表示主服务器最新的 WAL 位置。
  • sent_lsn:主服务器已发送的最新 WAL 位置。
  • write_lsn:备用服务器已接收到并写入磁盘的最新 WAL 位置。
  • flush_lsn:备用服务器已刷新到磁盘的最新 WAL 位置。
  • replay_lsn:备用服务器已应用的最新 WAL 位置。

通过比较这些位置,可以计算出不同阶段的延迟:

  • 写延迟(Write Lag)pg_current_wal_lsn() - write_lsn
  • 刷新延迟(Flush Lag)pg_current_wal_lsn() - flush_lsn
  • 重放延迟(Replay Lag)pg_current_wal_lsn() - replay_lsn

4.如何检测复制延迟?

使用 pg_stat_replication 视图和上述函数,可以编写 SQL 语句来检测复制延迟。以下是一个示例查询,用于计算和显示不同类型的复制延迟:

WITH primary_wal AS (SELECT pg_current_wal_lsn() AS current_lsn
),
replication_status AS (SELECT pid, usename, application_name, client_addr, sync_state AS state, sent_lsn, write_lsn, flush_lsn, replay_lsnFROM pg_stat_replication
)
SELECTr.pid,r.usename,r.application_name,r.client_addr,r.state,pg_size_pretty(pg_wal_lsn_diff(p.current_lsn, r.sent_lsn)) AS send_delay,pg_size_pretty(pg_wal_lsn_diff(p.current_lsn, r.write_lsn)) AS write_delay,pg_size_pretty(pg_wal_lsn_diff(p.current_lsn, r.flush_lsn)) AS flush_delay,pg_size_pretty(pg_wal_lsn_diff(p.current_lsn, r.replay_lsn)) AS replay_delay
FROMreplication_status r,primary_wal p;

5. 如何诊断复制延迟?

  • 分析网络性能: 检查主服务器和备用服务器之间的网络延迟和数据包丢失情况。
  • 评估磁盘 I/O: 监控备用服务器的磁盘 I/O 性能,识别潜在的瓶颈。
  • 检查资源利用率: 确保主服务器和备用服务器有足够的 CPU 和内存资源。
  • 审查配置设置: 确认复制设置(如 max_wal_senderswal_keep_segmentsarchive_mode)已正确配置。
  • 调整复制槽: 使用复制槽确保 WAL 文件在被所有备用服务器接收之前不会被删除。

6. 如何减少复制延迟?

  • 优化网络性能: 使用高速、低延迟的网络进行复制。
  • 调整磁盘 I/O: 确保备用服务器拥有快速磁盘和足够的 I/O 能力。
  • 分配充足资源: 为主服务器和备用服务器提供充足的 CPU 和内存资源。
  • 定期监控: 使用 pg_stat_replication 等工具持续监控复制状态,并设置延迟警报。
  • 增量备份: 使用增量备份减少复制进程的负载。

7. 测试案例

以下是一些具体的测试案例,帮助理解和验证复制延迟检测的原理和操作:

测试案例 1:基本复制延迟检测
  1. 设置环境

    • 配置一个 PostgreSQL 主服务器和一个备用服务器。
    • 确保主服务器和备用服务器之间的复制已正确配置并正在运行。
  2. 插入数据

    • 在主服务器上插入一批数据,观察复制延迟。
    CREATE TABLE test_table (id SERIAL PRIMARY KEY, data TEXT);
    INSERT INTO test_table (data) SELECT md5(random()::text) FROM generate_series(1, 1000000);
    
  3. 检测延迟

    • 使用以下 SQL 语句检测复制延迟。
    WITH primary_wal AS (SELECT pg_current_wal_lsn() AS current_lsn
    ),
    replication_status AS (SELECT pid, usename, application_name, client_addr, sync_state AS state, sent_lsn, write_lsn, flush_lsn, replay_lsnFROM pg_stat_replication
    )
    SELECTr.pid,r.usename,r.application_name,r.client_addr,r.state,pg_size_pretty(pg_wal_lsn_diff(p.current_lsn, r.sent_lsn)) AS send_delay,pg_size_pretty(pg_wal_lsn_diff(p.current_lsn, r.write_lsn)) AS write_delay,pg_size_pretty(pg_wal_lsn_diff(p.current_lsn, r.flush_lsn)) AS flush_delay,pg_size_pretty(pg_wal_lsn_diff(p.current_lsn, r.replay_lsn)) AS replay_delay
    FROMreplication_status r,primary_wal p;
    
测试案例 2:网络延迟引起的复制延迟
  1. 模拟网络延迟

    • 使用网络模拟工具(如 tc)在主服务器和备用服务器之间引入延迟。
    sudo tc qdisc add dev eth0 root netem delay 100ms
    
  2. 插入数据并检测延迟

    • 在主服务器上插入数据,使用上述 SQL 语句检测延迟,并观察延迟变化。
  3. 恢复网络设置

    • 恢复网络设置,清除引入的延迟。
    sudo tc qdisc del dev eth0 root netem
    
测试案例 3:资源争用引起的复制延迟
  1. 模拟资源争用

    • 在备用服务器上运行高负载任务(如 CPU 或磁盘密集型任务)。
    stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 60s
    
  2. 插入数据并检测延迟

    • 在主服务器上插入数据,使用上述 SQL 语句检测延迟,并观察延迟变化。
  3. 恢复正常状态

    • 停止高负载任务,恢复服务器正常状态。

通过以上测试案例,可以深入理解和验证 PostgreSQL 复制延迟的检测和监控方法,并在实际环境中应用这些知识来优化复制性能。

结论

复制延迟是 PostgreSQL 复制集群中常见且重要的挑战,但通过正确的理解、有效的监控和适当的优化,可以有效地进行管理。为了减少复制延迟,可以采取优化网络性能、调整磁盘 I/O、分配充足资源、定期监控和使用增量备份等措施。

参考链接

  1. PostgreSQL Replication Lag
  2. PostgreSQL Replication and Conflicts

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

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

相关文章

springboot中在filter中用threadlocal存放用户身份信息

本文章主要描述通过springboot的filter类,在过滤器中设置jwt信息进行身份信息保存的方法 流程:请求->过滤器->解析请求的body信息->放入threadlocal中 定义filter:一个使用 Servlet 规范的过滤器(Filter),它…

网络通信、BIO、NIO

1. 涉及的网络基础知识 Socket: 操作系统提供的api,介于应用层和tcp/ip层之间的软件层,封装服务器客户端之间网络通信相关内容,方便调用 IO多路复用: (I/O Multiplexing)是一种IO操作模式&a…

Android中线程的状态state都有哪些?S,R分表代表含义

在Android中,线程的状态(state)可以类比于Java线程的状态,因为Android是基于Java的。Java中线程的状态通常分为六种,这些状态在Android中也是适用的。具体状态及含义如下: NEW(新生&#xff09…

Python 的 metaclass

文章目录 先说结论1. metaclass 的作用2. 主要的执行过程 1. metaclass.__new__2. metaclass.__call__关于 metaclass.__init__ 3. metaclass.__prepare__4. 自动创建 __slots__ 属性4.1 metaclass 的接口类4.2 metaclass conflict 5. Class metaprogramming 先说结论 1. meta…

Java技术栈总结:JVM虚拟机篇

一、Java的四种引用类型 1、强引用 最常见的引用,类似Object obj new Object()、String str “hello”。如果一个对象具有强引用,垃圾回收器绝对不会回收它。即使抛出“OutOfMemoryError”错误,程序终止,也不会随意回收具有强引…

20240710 每日AI必读资讯

🤖微软:不会像 OpenAI 一样阻止中国访问 AI 模型 - OpenAI 将于周二(7 月 9 日)开始阻止中国用户访问其 API。 - 微软发言人表示:Azure OpenAI API服务在中国的提供方式没有变化。 - 公司仍然通过部署在中国以外地区…

亲测解决! Package pdftex.def Error: ‘eps-converted-to.pdf‘ not found

这个问题在小虎写论文的时候遇到,解决方法是将eps文件替换成pdf或者png。 环境 win11 MiKTeX 解决方法 将eps文件转换成pdf或者图片的格式,然后嵌入的时候改一下后缀就好了。 \begin{figure}[!t] \centering \includegraphics[width\columnwidth]{…

妙笔生词智能写歌词软件:创新助力还是艺术之殇?

在音乐创作日益普及和多样化的当下,各种辅助工具层出不穷,妙笔生词智能写歌词软件便是其中之一。那么,它到底表现如何呢? 妙笔生词智能写歌词软件(veve522)的突出优点在于其便捷性和高效性。对于那些灵感稍…

c/c++:牛客小白月赛93

比赛链接 A 生不逢七 题目描述(题目链接添加链接描述): 睡前游戏中最简单又最好玩的游戏就是这个啦! 该游戏规则为:多名玩家轮流报数,当要报的数字中含有 7 或者是 7 的倍数时(例如 37,49)&…

腾讯又一平台即将停止运营

随着腾讯公司业务和战略的调整,某些业务逐渐退出历史舞台,如“腾讯直播平台NOW”,以及“QQ签到”,“腾讯待办”,“企鹅FM音频平台”等,最近又有一则重磅消息,那就是“腾讯课堂”也即将停止运营。…

类似评论、省市区这种具有层次结构的数据表怎么设计?

业务功能模块 评论、回复模块省市区表 设置一个给每个数据设置一个parent_id 例如: 某个视频下a写了条评论,那a的parent_id就是0;b回复了a,那b的parent_id就是a的id;c回复了b,那c的parent_id就是b的id; 这样,所有评论…

光耦测试项目

CTR 电流传输比 --->输入电流/输出电流(温度越高差值越小) IOL 低电平输出电流 --->输出的电流 VOL 低电平输出电压 --->输出的电压 ITH 输入阈值电流 --->vcc给电压,输入给电流(缓慢升高),输出设置电流/电压 IOH…

Mosh|初学者 SQL 教程

sql文件链接:链接: https://pan.baidu.com/s/1okjsgssdxMkfKf8FEos7DA?pwdf9a9 提取码: f9a9 在mysql workbench 导入 create_databases.sql 文件,下面是运行成功的界面 快捷方式:全部运行可以同时按下controlcommandenter ,或者…

ceph存储

1 存储简介 存储的三种方式包括:块存储、文件存储、对象存储1。此外,还有内存存储、硬盘存储和闪存存储2。 内存存储:临时性数据存储方式,存储速度快,容量有限,通常用来存储正在使用的程序和数据。硬盘存…

配置管理新纪元:Eureka引领分布式服务配置潮流

配置管理新纪元:Eureka引领分布式服务配置潮流 引言 在微服务架构中,服务配置的管理是一项复杂而关键的任务。随着服务数量的增加,传统的集中式配置管理逐渐显得力不从心。Eureka,作为Netflix开源的服务发现框架,提供…

【通信协议】八、CDL(Caterpillar Data Link)协议解析

1、协议简介 CDL(Caterpillar Data Link)是caterpillar的通信协议,该品牌发动机ECM与各控制单元进行通信时,采用基于RS-485的物理层规范进行开发的CDL协议进行通信; 2、物理层 信号传输方式:差分信号(通过两条线的电…

稀疏建模介绍,详解机器学习知识

目录 一、什么是机器学习?二、稀疏建模介绍三、Lasso回归简介四、Lasso超参数调整与模型选择 一、什么是机器学习? 机器学习是一种人工智能技术,它使计算机系统能够从数据中学习并做出预测或决策,而无需明确编程。它涉及到使用算…

集训 Day 2 模拟赛总结

复盘 7:30 开题 想到几天前被普及组难度模拟赛支配的恐惧,下意识觉得题目很难 先看 T1,好像不是很难,魔改 Kruskal 应该就行 看 T2 ,感觉很神奇,看到多串匹配想到 AC 自动机,又想了想 NOIP …

328. 奇偶链表

https://leetcode.cn/problems/odd-even-linked-list/https://leetcode.cn/problems/odd-even-linked-list/ 解题思路: 把第一个和第二个节点分别作为奇数、偶数的头节点,当遇到奇节点,删除,并插入到奇数头节点后,这样…

PPI(每英寸像素数)、DPI(每英寸点数)和Pixel(像素)的区别和联系?

一、定义 PPI、DPI和Pixel是图像处理、打印和显示领域中常用的三个概念,它们之间既有区别又有联系。以下是对这三个概念进行分别讲解: 1. PPI(Pixels Per Inch)-即每英寸像素数,是图像分辨率的一种表示方…