前言
本篇博客主要内容是关于达梦数据库的数据守护集群,DM 数据守护(Data Watch)是一种集成化的高可用、高性能数据库解决方案,数据守护可以配置成实时主备、MPP主备、DMDSC主备或读写分离集群等,只需数秒时间就可以将备库切换为主库对外提供数据库服务,这边主要学习相应的主备同步内容。
一、数据守护原理
1 基本概念
DM 数据守护(Data Watch)的实现 :将主库产生的 Redo日志传输到备库,备库接收并重新应用 Redo 日志,从而实现备库与主库的数据同步。
2 成员介绍
DM 数据守护系统主要由主库、备库、Redo-log、Redo 日志传输、Redo 日志重演、守护进程(dmwatcher)、监视器(dmmonitor)组成。
- 主库 :Primary 模式,提供完整数据库服务的实例;
- 备库 :Standby 模式,提供只读数据库服务的实例。备库除了用于容灾,还可以提供备份、查询等只读功能,备库还支持临时表的 Insert/Delete/Update 操作,因为临时表数据的修改不会产生 Redo 日志,主库对临时表的修改无法同步到备库;
- Redo 日志 :通过记录物理数据页内容变动情况(例如 DML\DDL 操作均表现为对数据页的修改)实现主备同步功能,备库会重做 redo 日志;
- Redo 日志传输 : 主备库之间的 Redo 日志传输,以日志包 RLOG_PKG 为单位,主库通过 MAL 系统发送 Redo 日志到备库。各种不同数据守护类型的区别,就在于主库日志包 RLOG_PKG 的发送时机,以及备库收到 Redo 日志后的处理策略。
- Redo 日志重演 : 备库收到主库发送的 Redo 日志后,在物理数据页上,重新修改数据的过程,重演过程中备库会生成自身的 Redo 日志写入联机日志文件。
- 守护进程 :守护进程(dmwatcher)是数据守护系统的核心工具,监控数据库实例的运行状态和主备库数据同步情况,在出现故障时启动各种处理预案。守护进程必须和被守护的数据库实例部署在同一台机器上;
- 监视器 : 监视器(dmmonitor)用来监控守护系统内守护进程、数据库实例信息,执行用户输入命令、监控实例故障、实现自动切换等。
3.归档类型
DM 数据守护集群的模式主要是根据归档类型去分类的,主要有三种归档模式。
注 : dmarch.ini 中的 ARCH_WAIT_APPLY = 1 时,为事务一致模式,等于 0 为 高性能模式。
4. KEEP_PKG 机制
主库的 RLOG_PKG 日志通过实时归档机制发送到备库后,备库将最新收到的 RLOG_PKG 保存在内存中,不马上启动重演,避免数据比主库的新,这个 RLOG_PKG 我们称之为 KEEP_PKG,而即时归档不存在这种机制。 备库 KEEP_PKG 日志重演的时机包括 :
- 新旧替换 :备库收到新的 RLOG_PKG,这个时候会将当前保存的 KEEP_PKG 进行重演,并将新的 RLOG_PKG 放进 KEEP_PKG;
- 收到主库重演命令 ;主库已经将 KEEP_PKG 对应的 Redo 日志写入redo log文件中,此时备库会启动 KEEP_PKG 的日志重演;
- 备库切换为新主库 : 在监视器执行 SWITCHOVER 或 TAKEOVER 命令,或者确认监视器通知备库自动接管时,备库会在切换为 PRIMARY 模式之前,启动 KEEP_PKG 的日志重演。(无论此时主库是否正常)
- 实时归档 : 主库生成联机 Redo 日志,当触发日志写文件操作后,日志线程先将 RLOG_PKG 发送到备库,备库接收后进行合法性校验(包括日志是否连续、备库状态是否 Open 等),不合法则返回错误信息,合法则作为 KEEP_PKG 保留在内存中,原有 KEEP_PKG 的 Redo 日志加入 Apply 任务队列进行 Redo日志重演,并响应主库日志接收成功;当有多个备库时,主库需要收到所有备库的响应消息才继续后续操作。
- 即时归档 :
- 即时归档的同步机制可以保证备库的 Redo 日志不会比主库的 Redo 日志多,因此即时备库不需要 KEEP_RLOG_PKG,收到 RLOG_PKG 直接加入到 Apply 任务系统,启动Redo 日志重演;
- 备库故障或主备库之间网络故障,导致发送 RLOG_PKG 失败后,主库马上修改即时归档为 Invalid 状态,并切换数据库为 Suspend 状态;
5. 归档类型对比
REALTIME(实时归档) | TIMELTY(即时归档) | ||
---|---|---|---|
归档配置 | REALTIME(高性能) | REATIME(事务一致) | TIMELY(事务一致) |
主机日志发送时机 | 写入联机日志前,发送到备库 | ||
修改备机归档状态 | 主机dmwatcher通知主机,dmserver调整备机归档INVALID | 主机dmsever调整备机归档INVALID | |
备机响应时机 | 加入重演线程队列后 | 生成联机日志后 | |
重演方式 | 主机日志发送到KEEP_BUFFER | 主机日志直接发给重演线程 | |
推动重演线程 | 主机定时 5s发送通知消息; 备机接收到新的重演日志推动。 | 收到重演日志包推动(最大64M); 事务结束后强制推动 |
6. 参数调优
数据守护集群目前基本都是 4.0,基于此版本 RLOG 与 DATA 可并行处理的特性,需要对 REDOS_PARALLEL_NUM 涉及参数做出一定调整:
参数名称 | 调整值 | 默认值 | 类型 | 说明 |
---|---|---|---|---|
REDOS_PARALLEL_NUM | 32 | 1 | 静态 | 并行日志重演的线程数,有效值范围(1~64)。1表示不进行并行日志重演 |
REDOS_PRE_LOAD | 1 | 0 | 动态,系统级 | 重演REDO日志时是否开启RLOG_PKG预加载功能。0:不开启;1:开启 |
TRX_VIEW_MODE | 1 | 0 | 静态 | 控制MVCC事务可见性判断的方式。0:事务启动前收集当前时刻的活动事务ID构造可见性视图,以确定某一特定事务是否对当前事务可见;1:系统维护事务提交历史,以此判断事务可见性 |
注 : TRX_VIEW_MODE=1 针对数据库数据库连接特别多,活动会话少空闲会话特别多的场景下性能提升比较大。该参数由202012月份引入
高性能 | 事务一致 | |
---|---|---|
归档配置 | REALTIME(高性能) | REALTIME, ARCH_WAIT_APPLY=1 |
补充参数 | REDOS_PARALLEL_NUM=7 REDOS_PRE_LOAD=1 TRX_VIEW_MODE=1 | |
手动切换 | 数据守护:DW_MODE = AUTO 监视:MON_DW_CONFIRM = 0 | |
自动切换 | 数据守护:DW_MODE = AUTO 监视:MON_DW_CONFIRM = 1 多实例可以配置多个确认监视器,监视器个数一定是单数,具备少数服从多数原则 | |
备注 | TIMELY模式不建议部署, 网络不稳当情况下容易出现split |