温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

异步复制怎样减少丢数

发布时间:2026-10-18 11:41:24 来源:亿速云 阅读:93 作者:小樊 栏目:数据库

在数据库/存储语境里,“异步复制(async replication)”本身的特点就是:主节点提交成功后不等待从节点确认就返回,所以理论上“主挂了且还没同步的数据”就可能丢。
要“减少丢数”,核心思路是:在不完全退化为同步复制的前提下,尽量降低未同步窗口和数据丢失概率。下面按常见手段说明。


1. 缩短复制延迟(最根本)

异步复制丢数 = 主宕机时“已提交但未传到从”的数据。
延迟越低,丢的数越少。

做法:

  • 提高网络带宽、降低 RT(同 AZ / 同机房优先)
  • 从节点专用硬件,避免 IO 竞争
  • 并行复制 / 多线程回放(MySQL parallel replication、PG logical parallel apply)
  • 减少大事务(大事务会拉长同步窗口)
  • 控制主节点写入峰值(限流、批处理)

目标:把“未同步数据量”从秒级降到毫秒级。


2. 半同步复制(减少丢数但非零)

介于同步和异步之间:

  • 主提交后,至少等一个从确认收到(不一定要落盘/回放)
  • 从确认后主才返回客户端成功

效果:

  • 主宕机时,已返回成功的事务大概率已在从
  • 仍可能丢:从收到但没落盘、网络分区等

示例:

  • MySQL:rpl_semi_sync_master_enabled
  • PostgreSQL:synchronous_commit = remote_write(偏半同步)

这是“减少丢数”最常用方案。


3. 提高从节点持久化级别

即使异步,也可让从更“稳”:

  • 从节点:
    • 开启 fsync
    • 写 WAL / redo 后再 ack
  • 主节点:
    • 不极端依赖内存缓存
    • 控制 wal_writer_delay 等参数

这样即便主挂,从已落盘的数据不丢。


4. 多副本 + 多数派确认(类 Raft / Quorum)

如果业务可接受一点延迟:

  • 异步复制给多个从
  • 关键事务要求 N/2+1 副本确认
  • 主失败时可选举最新从

例子:

  • MySQL Group Replication
  • PostgreSQL + Patroni / etcd
  • Redis Sentinel + AOF

本质:用“弱同步”换“低丢数”。


5. 客户端层补偿(最终一致)

异步复制不可避免少量丢,可用业务手段补:

  • 写本地 WAL / 消息队列
  • 主从不一致时:
    • 对账任务修复
    • 客户端重试 + 幂等
  • 关键操作双写(主 + MQ)

适合:

  • 订单、积分、账单类
  • 允许“最终一致”

6. 分级策略(推荐)

不要所有数据一刀切:

数据类型 策略
金融交易 同步 / 半同步
日志 纯异步
用户行为 异步 + 对账

7. 故障切换要“保守”

很多丢数是切换造成的:

  • 主没真死,脑裂
  • 旧主恢复后被误写

做法:

  • 使用 fencing
  • 切换前对比 GTID / LSN
  • 不自动强切,人工确认

一句话总结

异步复制无法“零丢数”,只能:

  1. 降低延迟
  2. 半同步
  3. 多副本确认
  4. 业务层补偿

如果你说的是 MySQL / Redis / PG / Kafka 中某一种,我可以给具体参数和架构示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手