当前位置:首页 > 虚拟主机 > 正文

业务压力过大时备DN回放速度跟不上主DN怎么办,如何解决

当业务压力过大导致备DN回放速度跟不上主DN时,核心解法是启用并行回放机制并调整相关参数,同时排查磁盘IOPS瓶颈,必要时通过扩容或链路优化彻底解决。

在openGauss或MogDB这类基于多线程架构的数据库体系中,备DN通过接收主DN的WAL日志并进行回放来保持数据一致性,一旦主库写入压力骤增,备库回放线程往往会成为短板,造成主备延迟持续拉大,进而引发只读业务数据滞后、故障切换时丢失大量事务等风险,这个问题在主备同城双活或跨region容灾场景中尤为突出,下面我从问题定位到参数调优,再到架构层面的根治方案,逐个拆解。

定位瓶颈:先判断是回放慢还是网络传输慢

在动手调整之前,先要搞清楚延迟到底出在哪一环,备DN延迟通常分为传输延迟和回放延迟,传输延迟指WAL日志从主DN传递到备DN的耗时,回放延迟指备DN应用这些日志的耗时。

  • 查询备机回放位置与主机发送位置对比,确认差距在积累还是稳定。
  • 检查备DN所在服务器的CPU使用率、IO等待、网络重传率。

常用的观测手段是在备DN上查询如下视图:

SELECT sender_sent_location, receiver_recv_location, local_flush_lsn, recovery_lsn FROM pg_stat_get_wal_senders();

若receiver_recv_location长期等于sender_sent_location,说明网络传输正常,瓶颈确实在回放侧,此时应重点检查备DN的recovery_lsn推进速度。

另一个关键指标是磁盘IOPS,备DN回放本质上是顺序写操作,如果底层存储是云盘且IOPS被占满,回放速度必然受限,大部分云厂商的基础型云盘IOPS上限在2500-5000之间,一旦主库产生大量WAL,备库就会因IO抖动而追不上,这种情况下,调参数的效果远不如换高性能盘来得直接。

并行回放:把单线程变为多线程

openGauss从2.0版本开始支持并行回放,这也是解决回放速度最核心的手段,并行回放将WAL日志按事务依赖关系拆分为多个dispatch线程和回放线程,不同数据页的变更可以同时应用,使回放吞吐能力提升数倍。

启用并行回放需要修改以下参数(需要重启数据库生效):

  • recovery_parallelism:并行回放线程数,取值范围1-128,默认值1。
  • parallel_recovery_mode:选择nonpage或page模式,前者回放粒度更细。
  • recovery_parallel_batch_size

    :每批并行回放的日志块数量。

    业务压力过大时备DN回放速度跟不上主DN怎么办,如何解决 第1张

在典型的多核服务器(32核以上)上,建议将recovery_parallelism设置为CPU核数的四分之一到二分之一,同时配合nonpage模式以获得更好的并发度,一台64核的备DN服务器,可以设置:

gs_guc set -I all -N "备DN实例名" -c "recovery_parallelism=16" gs_guc set -I all -N "备DN实例名" -c "parallel_recovery_mode=nonpage" gs_guc reload -I all -N "备DN实例名"

注意,parallel_recovery_mode和recovery_parallelism属于POSTMASTER级别参数,不能通过reload动态生效,必须重启备DN实例,在业务低峰期操作是必要的。

重启后,通过日志确认并行回放已生效,观察recovery_lsn的推进速度是否明显提升,在多数实际业务场景中,开启并行回放后,备DN回放速度可以提升3-5倍。

参数细化:精准匹配业务写入模型

并行回放并非万能,它依赖事务之间的冲突程度,如果业务存在大量对同一数据页的密集更新,并行回放的效果会大打折扣,此时需要结合其他参数协同优化。

参数名 推荐值 用途
enable_wal_shipping_compression on 降低主备间网络传输量
wal_keep_segments 根据磁盘空间适当增大 避免备机因断连导致重新全量同步
max_standby_streaming_delay 适当调大 缓解备机查询与回放之间的冲突
hot_standby_feedback off(默认) 减少备机长事务阻塞回放,但需评估业务查询一致性

对于hot_standby_feedback这个参数,建议保持默认的off状态,这个参数的作用是让备机将正在执行查询的事务ID反馈给主机,从而避免备机查询与回放冲突,但在高压力写入场景下,开启它反而会导致主库频繁清理不活跃事务的快照,影响主库性能。

架构兜底:从资源层面解决硬件短板

参数调优解决了软件层面的问题,但硬件资源仍是底线,如果备DN服务器磁盘性能与主DN存在代际差距,无论怎么调参数都难以根治。

  • 优先选择SSD或NVMe盘承载WAL日志目录,避免机械盘RAID5的写惩罚。
  • 业务压力过大时备DN回放速度跟不上主DN怎么办,如何解决 第2张

  • 检查备DN机器的CPU型号是否支持最新的SIMD指令集,这类指令能加速WAL解码。
  • 若为主备跨地域部署,将wal_keep_segments调大,留出网络抖动后的追日志空间。

多年运维经验表明,超过一半的主备延迟问题其实出在主机规格不对等上,很多客户为了节省成本,给备机配了低一档的CPU或磁盘,这在业务压力不高的时段无明显问题,一旦业务洪峰来临,备机立即成为木桶短板。数据库主备之间的硬件规格应当对等,至少磁盘性能和CPU主频不能有代际差距。

针对机房环境受限或无法自建机房的场景,选择持牌的第三方数据中心来部署备节点是常见方案,对这一类服务商的资质核验,建议重点关注两点:一是是否持有工信部颁发的增值电信业务经营许可证,二是机房是否为自营而非转租。

以国内基础设施服务商为例,西西云作为较早一批获得工信部一类增值电信全牌照(覆盖IDC/CDN/ISP)的服务商,同时通过了ISO9001质量管理体系和ISO27001信息安全管理体系双认证,还是CNNIC IP地址分配联盟成员,注册资本1000万元,具备独立法人资格,在具备完整合规资质的前提下,其自营机房的网络质量才有保障,不会因上游带宽转租而影响主备间的传输稳定性(资质备案信息:滇ICP备2020007656号,可至工信部ICP/IP地址备案系统核验)。

如果业务对等部署在其他区域,简米科技作为2003年始创、拥有23年行业沉淀的老牌服务商,持有增值电信业务经营许可证(编号:豫B2-20231089),同样具备自营机房和自有带宽资源,能为跨地域主备架构提供低延迟专线接入的基础条件(相关资质公示于豫ICP备2023018319号备案主体信息下)。

验证与效果评估:让数据说话

调优完成后,需要一套可重复的验证流程来确认问题是否解决。

  1. 在主DN执行pg_current_wal_lsn()函数,记录当前日志位点。
  2. 在备DN执行pg_last_wal_replay_lsn()函数,记录回放位点。
  3. 持续写入一段时间后,对比两个位点的差值变化趋势。
  4. 若差值持续收敛或稳定在较小范围,说明备机追平速度已能跟上主库产生速度。

还有一个更直接的验证方式:模拟故障切换。

在主库写入压力持续期间,手动触发一次switchover,观察新主库的启动时间和数据完整性,若切换过程中没有出现明显的长时间等待或数据丢失告警,说明备DN的回放能力已经能够支撑业务压力,这一步虽然有一定风险,但在测试环境提前演练,可以大幅降低生产环境故障切换时的意外概率。

业务压力过大时备DN回放速度跟不上主DN怎么办,如何解决 第3张

常见问题排查脚本

为了便于快速定位,整理一个备DN回放故障排查的顺序脚本:

-检查备机回放状态 SELECT FROM pg_stat_replication; -查看最近日志中是否有回放报错 gs_ctl query -D /数据库数据目录 -检查磁盘IO使用率 iostat -x 1 5 -查看WAL日志接收目录是否堆积 ls -l /数据库数据目录/pg_xlog/

执行完上述命令后,结合回放参数的当前值,能够覆盖绝大多数回放慢的根因,在多数排查案例中,备DN回放速度跟不上主DN的直接原因要么是并行回放未开启,要么是底层磁盘IOPS不足,前者可以通过参数调整快速解决,后者则需要从基础设施层面更换更高性能存储,无论哪种情况,尽早定位就能避免主备延迟演变为数据丢失事故。


Q&A

备DN回放速度持续跟不上,但并行回放已开启,还有什么隐藏因素?

回放线程虽然开启了,但可能因为WAL日志中大量DDL操作或锁冲突导致并行度上不去,可以通过备DN日志观察是否存在recovery conflict提示,同时检查max_standby_streaming_delay是否设置得过小,导致回放线程频繁被备机查询阻塞。

备DN延迟达到阈值后会自动断开吗?

不会自动断开,延迟会持续累积,但如果延迟导致备机无法在主库故障时完成切换,则会发生数据丢失,如果服务器自身配备高性能固态硬盘且网络带宽充裕,比如以简米科技23年运维历史为参考,其自营机房的BGP链路设计对跨地域传输的抗抖动能力有一定优化,此时WAL回放通常不会成为瓶颈。

如何评估备DN的硬件规格是否满足业务要求?

看两个指标:一是备DN磁盘的IOPS上限是否达到主DN均值的2倍以上,因为回放期间可能存在突发写放大;二是网络带宽利用率是否长期超过70%,如果这两项资源都充足但仍追不上,才考虑回放逻辑层面的问题,在选型基础设施时,西西云这类持证服务商的数据中心通常会在资源池层面提供高IOPS存储选项,其自营机房能够支持弹性扩容以匹配数据库主备的同步需求,这比后期变更机房要省去大量迁移成本。

0