达梦DSC集群作为一种共享存储集群,具备高可用、高性能、负载均衡等企业级特性,而DM 数据守护(Data Watch)作为一种数据库级的热备方案,也是数据库异地容灾的首选解决方案。本文主要记录了在带DATA WATCH 的三节点DSC集群运维过程中遇到的两个问题的处理过程。
环境说明
环境说明
CPU架构:X86_64
操作系统:银河麒麟v10
数据库版本:DM8
集群环境:带一个实时备库的三节点DSC集群
二、故障一:备库分离后无法恢复主备关系
1、故障描述
在压测过程中,DSC主库到备库的实时归档状态变为了INVALID,DSC主库可继续提供服务,但备库已被分离,不再应用日志,且无法通过attach的方式重新加入主备集群。
2、同步原理
正常的压测过程中,备库会被自动分离?在弄清楚这个问题之前,我们需要对数据守护的实现原理和机制进行深入研究。
达梦数据守护环境主要用到两种归档类型:实时归档和即时归档。当前测试环境的归档类型为实时归档+高性能模式。
2.1实时归档(REALTIME)
主备环境中,主库在Redo日志写入联机日志文件之前,先通过MAL系统把自己的Redo日志发送给备库,等待备库响应后,再写入自己的联机日志文件。
2.2即时归档(TIMELY)
主备环境中,主库在Redo日志写入联机日志文件之后,再通过MAL系统把自己的Redo日志发送给备库。
2.3各归档类型差异
2.3.1发送时机
主库发送Redo日志的时机,分别为写入联机日志文件之前和之后。
2.3.2备库重演和响应主库的时机
高性能和事务一致性,在配置dmarch.ini时配置参数ARCH_WAIT_APPLY控制,0表示高性能,即备库收到主库Redo日志后马上响应主库;1表示事务一致性,即备库收到主库Redo日志后马上进行重演,待重演完毕后再响应主库。即时归档该参数默认值为1,实时归档该参数默认为0。
2.3.3KEEP_PKG
实时归档运行中,备库中设置了KEEP_PKG,用于存放备库收到的主库通过MAL系统发送的Redo日志包,并不马上进行重演;而即时归档则不存在这种机制。
如此设置的原因在于:实时归档是在收到主库Redo日志后马上响应主库,而主库在收到备库响应后再将Redo日志写入自己的联机日志文件,如果没有KEEP_PKG,备库收到后马上进行了重演,而主库在准备写入联机日志文件前故障,则会导致备库的数据比主库的还要多,造成数据不一致;即时归档中则由于主库在发给备库之前已经将Redo日志写入了联机日志文件中,所以不存在这种造成数据不一致的隐患。
实时归档进行重演的时机主要有:
1)备库收到新的 RLOG_PKG,会将当前保存的 KEEP_PKG 日志重演,并将新收到的RLOG_PKG 再次放入 KEEP_PKG 中。
2)主库会定时将 FILE_LSN (已写入联机日志文件的日志包的最大LSN)等信息发送到备库,当主库 FILE_LSN 等于备库 SLSN(备库明确可重演的最大 LSN 值) 时,表明主库已经将 KEEP_PKG 对应的 Redo 日志写入联机日志文件中,此时备库会启动KEEP_PKG 的日志重演。
3)备库切换为新主库,在监视器执行 SWITCHOVER 或 TAKEOVER 命令,或者确认监视器通知备库自动接管时,备库会在切换为 PRIMARY 模式之前,启动 KEEP_PKG 的日志重演。
下面通过一张图对上述原理和实际应用场景进行了一个总结
在发生故障的环境中,使用的是实时归档+高性能模式的组合,在该配置下,主库的Redo日志将在写入联机日志之前就发送给了备库,备库收到后即刻相应主库,并不马上进行重演。
3、问题分析
压测完毕后,监视器发现备库的RSTAT