以下是基于达梦官方文档“数据守护概述”中各模式原文信息,结合归档时机、故障处理及可用性等角度,对 实时主备(Realtime Primary-Standby)、读写分离集群(Read-Write Separation)、异步备库(Asynchronous Standby) 和 同步备库(Synchronous Standby) 四种模式的核心差异做出的归纳和对比。
总体来看:
- 实时主备 强调在数据库写入前“实时”发送并接收日志,以最快速的故障切换和最小恢复时间为目标;
- 读写分离集群 在保证可用性的前提下,通过“即时”或“实时”归档将读请求自动路由到备库,以提高系统吞吐;
- 异步备库 则以定时归档方式同步日志,适用于对实时性要求不高的场景,支持多源与级联;
- 同步备库 则介于两者之间,在本地归档写盘后再发送日志,保障比异步更低的延迟,但不影响主库在发送失败时继续服务。
1. 日志归档时机与一致性
模式 | 归档类型 | 发送时机 | 事务提交等待 |
---|---|---|---|
实时主备 | 实时归档(Realtime) | 写入联机Redo文件之前,将 RLOG_PKG 先发往备库【(达梦数据库)】 | 等待备库“接收”确认,不等待重演完成 |
读写分离集群 | 即时归档(Timely) 或实时归档 | 写入联机Redo文件之后(Timely)或之前(Realtime),再发往备库【(达梦数据库)】 | 同上 |
异步备库 | 异步归档(Async) | 由定时器触发,空闲时批量扫描并发送归档日志【(达梦数据库)】 | 不影响主库提交 |
同步备库 | 同步归档(Sync) | 本地归档刷盘后再发往备库;发送失败也不挂起,标记备库为Invalid【(达梦数据库)】 | 等待备库“接收”确认 |
2. 故障切换与可用性
实时主备
- 自动切换:支持通过监视器一键 Switchover(测试切换) 与 Takeover(故障接管),并可配置自动接管,不需人工干预;
- 强制接管:提供 Takeover Force 命令,在极端故障下强制切换,但需保证故障前数据一致性【(达梦数据库)】。
读写分离集群
- 切换方式:对主库进行维护或故障切换时,接口层能无缝切换到新的主库,读操作依旧向健康备库路由;
- 透明分流:应用层无需感知即可将只读请求发送到备库,提升吞吐且保证 READ COMMITTED 隔离级别。
异步备库
- 无自动切换:不参与主备自动切换;主库故障时,异步备库不能立刻接管;
- 多源与级联:可配置为多个源库共享一个备库,也可级联(备库再做源库)以扩大拓扑灵活性【(达梦数据库)】。
同步备库
- 无自动切换:与异步备库类似,不支持自动切换或接管,需要手动执行模式切换;
- 多源支持:Primary 模式下可配置最多 8 个同步备库,Standby 模式需先配置实时/即时归档后才可配置,且同样最多 8 个【(达梦数据库)】。
- 无级联:不支持级联部署。
3. 达梦归档对比
根据达梦官方文档中“归档介绍”一节的描述,对比表中“同步归档”一列补充如下:
类型\比较 | 本地归档 | 实时归档 | 即时归档 | 同步归档 | 异步归档 |
---|---|---|---|---|---|
条带数量 | 0 | 1~8 | 1~8 | 1~8 | 1~8 |
通过 MAL 传送数据 | 否 | 是 | 是 | 是 | 是 |
归档时机 | 写入联机日志后,再写入本地归档日志文件 | 写入联机日志前,发送到备库 | 写入联机日志后,发送到备库 | 写入归档日志文件并刷盘后,发送到备库 (达梦数据库) | 定时启动 |
归档写入(发送) | 归档进程 | 日志刷盘进程 | 日志刷盘进程 | 日志刷盘进程 (达梦数据库) | 异步归档进程 |
数据来源 | RLOG_PKG | RLOG_PKG | RLOG_PKG | RLOG_PKG (达梦数据库) | 本地归档文件 |
失败处理 | - 磁盘空间不足时系统挂起 - 磁盘损坏写入失败时系统 HALT | - Suspend 归档进程,保持状态不变,等待守护进程干预 | - Suspend 归档进程,并将归档写入状态变为无效,等待守护进程干预 | - 发送失败后,将主库→备库的归档状态直接置为 Invalid,不会触发 Suspend (达梦数据库) | 不做处理,等待下次轮询继续发送 |
条带响应时机 | 无 | 收到立即响应 | 事务一致模式:重演完成后响应 高性能模式:收到立即响应 | 收到后立即响应,不等待重演完成 (达梦数据库) | 收到立即响应 |
适用库类型 | Primary、Standby、Normal | Primary | Primary | Primary、Standby (达梦数据库) | Primary、Standby |
目标库类型 | 无 | Standby | Standby | Standby (达梦数据库) | Standby |
—
同步归档(Sync)特点:
- 在归档日志刷盘完成后立即通过 MAL 发送到备库。
- 备库收到后直接加入重演任务并立即确认,不会阻塞主库事务(与实时归档和高性能即时归档类似)。
- 失败时仅将该通道设为 Invalid,不会使主库挂起或切换到 Suspend。
- 支持 1~8 个同步备库。
4. 典型适用场景
- 实时主备:对业务连续性和灾难切换要求最高的生产环境,需秒级恢复且可灵活升降级维护;
- 读写分离集群:主打在线分析或报表系统,将读吞吐压力从主库分担到多个备库;
- 异步备库:历史统计、离线报表、数据归档等对实时性容忍度高的场景;
- 同步备库:介于实时与异步之间的场景,既要保证较低延迟,又希望主库不因备库故障而挂起。
下面基于达梦官方文档中对各种归档/主备模式的介绍,对“实时主备”、“读写分离集群”、“异步备库”与“同步备库”四种典型适用场景,按照归档模式类型、延迟特性、一致性保证及主库事务响应行为等维度做对比:
要点概览:
典型场景 | 归档模式 | 延迟特性 | 一致性保证 | 主库事务响应 |
---|---|---|---|---|
实时主备 | 实时归档 (Realtime) | 零延迟:在线日志写前即发 | 严格:备库重演完成后才可切换,保证无丢失 (达梦数据库) | 主库在写在线日志前即发送归档,会等待所有备库接收确认后继续写盘 |
读写分离集群 | 即时归档(事务一致模式) | 几乎无:日志刷盘后立即异步发送并重演 | 事务级一致:SELECT 可在主/备执行且满足 READ COMMIT (达梦数据库) | 事务提交时等待备库重演完成(事务一致模式);可切换到高性能模式变为“先响应再重演” |
异步备库 | 异步归档 (Async) | 可容忍:主库不等待,延迟可高可低 | 不保证:可能存在短暂或较长延迟 | 主库提交即返回,不等待归档发送和重演 (达梦数据库) |
同步备库 | 同步归档 (Sync) | 低延迟:等待备库接收 ACK | 仅保证发送到备库,不等待重演 | 主库提交时等待至少一个备库接收成功(ACK);不等待重演,减少阻塞 (达梦数据库, 达梦数据库) |
说明
- 归档模式:来自官方对多种归档方式的分类说明,包括本地、实时、即时、异步与同步归档等 (达梦数据库)。
- 延迟特性:实时归档零感知延迟;即时归档在事务一致模式下稍有等待;同步归档需接收确认;异步归档延迟可控。
- 一致性保证:实时与事务一致模式下的即时归档可带来严格的一致性语义;同步归档保证日志送达但不等重演;异步归档性能优先。
- 事务响应:对主库事务提交的影响从“前阻塞”(同步、实时、事务一致)到“后重演”(高性能模式或异步),可根据场景灵活选择。
以上对比可帮助您根据 数据同步延迟需求、主库性能影响、故障切换自动化水平 及 拓扑可扩展性 等维度,选择最适合的 DM 数据守护方案。