02_叙述DM8主备与读写分离原理

达梦技术社区:https://eco.dameng.com

一、DM数据集群

01| DM集群概述

DM数据库体系中的集群:

  • DSC:共享存储,对标RAC
  • DW:数据守护,主从模式
  • MPP :大规模并行处理,完全对等无共享式集群,个人理解类似MongoDB的分片集群,对标分布式集群

1. DM的集群简介

DM集群,基于redo日志实现,不同集群采用不用的redo归档类型

  • DM数据守护:即双机热备
    • 本地归档、实时归档、异步归档
  • 读写分离集群
    • 本地归档,即时归档
  • MPP主备集群
    • 本地归档、实时归档

回顾DM归档类型:

  • 本地归档:归档地为locla
  • 实时归档:redo先通过MAL系统发送到其他节点,在收到ACK后执行本地归档
  • 即时归档:先执行本地归档,在通过MAL发送给其他节点,在备机重放完成后,返回ACK
  • 异步归档:定时归档或基于时间间隔,触发归档线程进行归档

主库将redo传输到备库后,备库接收redo并用apply 线程在备库进行重放,从而实现备库与主库的数据同步

2. 数据守护datawatch

数据守护(双机热备)核心思想:监控数据库状态,获取主备数据同步情况

常见的双机热备方案:

  • 基于HA软件+ 共享数据
    • 使用共享存储存放数据,数据可供两个服务器访问
      • 应用:oracle rac、Window Server操作系统自带的集群故障转移
  • 基于redo日志|相当于MySQL中的binlog传输
    • 主备各有自己的数据,利用日志的传输重放达到数据一致的目的
      • 应用:DM data watch、Oracle data guard

3. DM数据库集群节点模式

DM数据库在集群和非集群状态下,有三种数据库模式
在这里插入图片描述

02| DM 数据守护dmwatch

1. 故障切换

在这里插入图片描述

守护进程故障切换:

  • 自动切换:
    • 故障发生时,确认监视器(dmmonitor)选择一个备库提升为主库对外提供服务;
    • 实现故障自动切换,必须配置且仅能配置一个dmmonitor确认监视器
  • 手动切换
    • 故障发生,备库提供只读服务,用户可手动提升一个备库作为主库;
      在这里插入图片描述

2. 数据守护进程的控制文件

  • dmwatcher.ctl
  • MPP、Realtime、Timely 类型的守护进程都必须配置dmwatcher.ctl文件(守护3.0以下)
  • 作用:
    • 记录系统守护系统运行过程中,守护进程组内主库变迁历史信息
    • 记录数据库模式的变化过程
    • 判断主库是否能加入当前主备集群
    • 判断系统是否出现分裂
    • 降低用户使用数据守护的复杂度
    • 提供一些更加使用、强大的功能特性

在无法正常open的情况下,可以用 **open force** 命令,强制open 主库
在主库故障,但备库不满足接管条件时,可以使用**takeover force** 命令,及时恢复数据库服务

3. 监视器

监视器的作用:

  • 监视数据守护状态
  • 状态信息确认(配置为故障自动切换的确认监视器的情况下)
  • 管理数据守护状态
  • 发起故障自动接管命令
  • 监视器类型
    • 监控模式(dmmonitor.ini: MON_DW_CONFIRM=0)–除确认监视器外其他节点配置为0
    • 确认模式(dmmonitor.ini: MON_DW_CONFIRM=1)–只有确认监视器才配置为1
    • 区别:确认监视器除了具备监控模式监视器所有功能外,还具有状态确认和自动接管两个功能。

03| 读写分离集群

读写分离最多配置8个即时备库
适用场景:读远大于写事务

读写分离系统事务特征:

  • 纯读操作的事务全部在备机执行。
  • 纯写操作的事务全部在主机执行。
  • 既有读又有写的事务,从写事务开始全部在主机执行。此类事务遵循以下原则:
    • 读操作尽量放在写操作之前,利用备机的可读特点来分摊系统压力。
    • 在业务允许条件下,尽可能拆分为纯读和纯写事务。
    • 写操作后尽量不要有读操作,避免压力集中在主机,影响性能。

04| 主备集群MPP

适用场景:写压力比读压力相对较小,通过增加备机分担读压力

05| 对比读写分离和主备集群

读写分离集群与主备集群的主要区别:

  • 主备集群模式是高性能模式,读写分离集群默认是一致性模式
  • 归档方式不同: realtime/timely
  • 应用访问连接串不同,dm_svc.conf文件配置内容不同
# 以下为主备集群配置
TIME_ZONE=(+8:00)
LANGUAGE=(en)
DM_DW=(192.168.1.21:5236,192.168.1.23:5236)
LOGIN_MODE=(1)
[DM_DW]
LOGIN_MODE=(1)
SWITCH_TIME=2000
SWITCH_INTERVAL=10


# 以下为读写分离集群配置
TIME_ZONE=(+8:00)
LANGUAGE=(cn)
RWC1=(172.16.1.1:5236,172.16.1.2:5236)

[RWC1]
LOGIN_MODE=(1)
RW_SEPARATE=(1)    # 读写分离模式
RW_PERCENT=(25)    # 配置读写比例
SWITCH_TIME=(300)
SWITCH_INTERVAL=(200)
# 以下为主备集群应用连接串配置
<DRIVER>dm.jdbc.driver.DmDriver</DRIVER>
<URL>jdbc:dm://DW1</URL>


# 以下为读写分离集群应用连接串配置
<DRIVER>dm.jdbc.driver.DmDriver</DRIVER>
<URL>jdbc:dm://RWC1</URL><URL>jdbc:dm://192.168.0.206:5236?rwSeparate=1&rwPercent=10</URL>

06| 主备数据同步原理

主库的RLOG_PKG日志通过实时归档机制发送到备库后,备库将最新收到的RLOG_PKG 保存在内存中,不马上启动重演,这个 RLOG_PKG 我们称之为 KEEP_PKG。

引入 KEEP_PKG 的主要目的是,避免下述场景中,主库故障重启后不必要的主备切换,减少用户干预。

场景说明(实时主备或 MPP 主备):

  • 1.用户登录主库 A 执行
CREATE TABLE TX(C1 INT); 
INSERT INTO TX VALUES(1); 
COMMIT; 

其中 COMMIT 操作将触发实时归档,发送 RLOG_PKG 到备库 B。

  • 2.备库 B 收到 RLOG_PKG,响应主库 A,并启动日志重演。
  • 3.主库 A 在 RLOG_PKG 写入联机日志文件之前故障。
  • 4.主库 A 重新启动后,由于 RLOG_PKG 没有写入联机日志文件,之前插入 TX 表的数据丢失;但此时备库 B 已经重演日志成功,TX 表中已经插入一行数据。

上述场景中,主备库数据不再保持一致,必须将备库 B 切换为主库,并重新从 B 同步 数据到 A。如果配置的是手动切换模式,则必须要有用户干预,进行备库接管后,才能恢复 数据库服务。

引入 KEEP_PKG 后备库 B 收到主库 A 发送的 RLOG_PKG,并不会马上启动日志重演, 主库 A 重启后,守护进程 A 检测到备库 B 存在 KEEP_PKG,通知备库 B 丢弃 KEEP_PKG 后, 直接 Open 主库 A,就可以继续提供数据库服务。并且,这些操作是由守护进程自动完成, 不需要用户干预。

如果备库自动接管、或者用户发起备库接管命令,那么备库的 KEEP_PKG 将会启动重演,不管主库是否已经将 KEEP_PKG 对应的 Redo 日志写入联机日志文件中,备库接管时 的 APPLY_LSN 一定是大于等于主库的FILE_LSN。当故障主库重启后,仍然可以作为备库, 自动重新加入数据守护系统。

备库 KEEP_PKG 日志重演的时机包括:

  • 1. 备库收到新的 RLOG_PKG

备库收到新的 RLOG_PKG 时,会将当前保存的 KEEP_PKG 日志重演,并将新收到的
RLOG_PKG 再次放入 KEEP_PKG 中。

  • 2. 收到主库的重演命令

主库会定时将 FILE_LSN 等信息发送到备库,当主库 FILE_LSN 等于备库 SLSN 时, 表明主库已经将 KEEP_PKG 对应的 Redo 日志写入联机日志文件中,此时备库会启动 KEEP_PKG 的日志重演。

  • 3. 备库切换为新主库

在监视器执行 SWITCHOVER 或 TAKEOVER 命令,或者确认监视器通知备库自动接管时, 备库会在切换为 PRIMARY 模式之前,启动 KEEP_PKG 的日志重演。

即时归档在 RLOG_PKG 写入主库联机 Redo 日志文件后,再发送 RLOG_PKG 到备库,
因此即时备库没有 KEEP_PKG。

07| 实时归档和即时归档的两种模式

  • 高性能模式
    • dmarch.ini中ARCH_WAIT_APPLY=0
    • 备库收到RLOG_PKG后,直接给主库返回ACK
    • 备库与主库同步存在一定的延时,不能严格保证事务一致性
  • 事务一致模式
    • dmarch.ini中ARCH_WAIT_APPLY=1
    • 备库收到RLOG_PKG后,将其在备库重演完成后,给主库返回ACK
    • 注意:即时归档模式中,rlog_pkg先在主库归档后才传递给备库

实时归档默认是高性能模式
即时归档的读写分离集群默认模式是事务一致模式

任意一个备库的实时归档/即时归档失败(即使其他备库归档成功了),主库都会切换为 Suspend 状态。

高性能模式示意图:
在这里插入图片描述

08| 归档日志中的MAGIC

在DM数据库中,在归档日志中记录了几个MAGIC号

  • PMN_MAGIC:在数据库初始化时生成,整个主备集群中PMN_MAGIC是一致的(这就是主备集群的备库必须由主库进行数据恢复的原因)
  • DB_MAGIC:集群中的各个节点的实例的DB_MAGIC是唯一的(在rman进行recover时,通过update magic进行更新)
  • RSC_MAGIC:标识归档日志源库的DB_MAGIC

**达梦技术社区:https://eco.dameng.com**åå

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值