实时主备集群由一个主库和一个或多个配置了实时归档(Realtime)的备库组成,其核心设计目标是保障数据库可用性、提高数据安全性。
在实时主备架构中:
• 主库:提供完整的数据库读写功能
• 备库:提供只读服务,通过重演Redo日志与主库保持数据同步
当主库出现故障时,备库可在重演完所有Redo日志后切换为主库。
读写分离集群由一个主库和一个或多个配置了即时归档(Timely)或实时归档(Realtime)的备库组成,其设计目标是在保障数据库可用性的基础上,实现读写操作的自动分离,提升系统吞吐量。
读写分离的核心思路是:利用备库只读的特性,配合达梦JDBC、DPI等接口,将只读操作自动分流到备库执行,从而减轻主库负载。
读写分离集群在驱动层内置了请求的自动分流机制,而实时主备通常需要客户端自行判断并路由读写请求;且对于读写分离集群而言,业务必须额外考虑主备之间是否需要强一致性,并根据自身需求调整同步参数(如ARCH_WAIT_APPLY),而实时主备则无需操心这个问题
dm_svc.conf配置示例:
开启读写分离
RW_SEPARATE = 1
可选:主库承担的读请求比例(0-100),其余读请求分发至备库
RW_PERCENT = 30
实际业务中,实时主备与读写分离集群对事务一致性的处理逻辑截然不同。
• 实时主备架构:所有读写请求均发往主库,业务无需关心主备间的数据同步状态,主库自身的事务特性天然保障了数据一致性,因此基本不需要考虑主备事务一致性问题。
• 读写分离集群:读请求被驱动层自动分发到备库,而备库通过重演Redo日志与主库保持同步可能存在延迟,这就带来了"写后读"不一致的风险——用户刚提交的数据可能因备库尚未同步而查询不到。
因此,业务方必须根据自身场景调整ARCH_WAIT_APPLY参数:
| 参数值 | 适用场景 | 行为说明 | 代价 |
|---|---|---|---|
| 1 | 需要查询备机最新数据的强一致性业务 | 主库等待备库重演完成后再响应提交,彻底消除写后读不一致 | 性能衰减 |
| 0 | 可容忍备库短暂延迟的业务 | 主库不等待备库重演即响应提交 | 备库读可能读到旧数据,换取更高吞吐量 |
https://eco.dameng.com
文章
阅读量
获赞
