DM集群架构及原理

一、DM集群类型

  DM集群包括:数据守护集群、读写分离集群、MPP主备集群。都是基于redo日志来实现的,不同的集群采用不同的redo日志归档类型。
  DM单机:本地归档
  数据守护集群:本地归档、实时归档、异步归档
  读写分离集群:本地归档、即时归档
  MPP主备集群:本地归档、实时归档

二、DM归档类型

  本地归档:LOCAL ARCHIVE,最多可设置8个。写入redo日志到本地归档文件,在redo日志写入日志文件后触发。
  实时归档:REALTIME ARCHIVE,最多可设置8个。在redo日志写入到日志文件前,通过MAL系统发送redo日志到远程备机并等待返回确认消息。
  即时归档:TIMELY ARCHIVE,最多可设置8个。在redo日志写入到日志文件后,通过MAL系统发送redo日志到远程备机并等待APPLY完成后返回消息。
  异步归档:ASYNC ARCHIVE,最多可设置8个。由主备机定时同步日志到异备。

三、数据守护集群

3.1 数据守护集群概念

  DM数据守护(Data Watch)是一种集成化的高可靠性解决方案,满足用户对数据安全性和高可用性的要求。主要解决由于硬件故障、自然灾害等原因导致的数据库服务长时间中断问题。提供不间断数据库服务,即双机热备。

3.2 数据守护集群架构及原理

在这里插入图片描述
  架构:将主库产生的REDO日志传输的备库,备库接收并重演日志,从而实现主备库的数据同步。DM数据守护的核心思想是监控数据库状态,获取主、备数据同步情况,为REDO日志传输与重演过程中出现的各种异常情况提供一系列的解决方案。
  原理:主要是基于REDO日志传输重做,主备机各有一份自己的数据,不需要额外的共享存储,利用REDO日志传输重做来实现主备机数据一致。

3.3 守护进程主要功能

  监控数据库状态、发送状态信息、监控其他守护进程消息、接收监视器消息、主备库启动运行、备库故障处理、备库异常处理、主库故障处理、故障修复处理

3.4 守护进程故障切换模式以及进程状态

  故障自动切换:主库发生故障时,确认监视器自动选择一个备库,切换为主库对外提供服务,故障自动切换模式,要求必须配置且只能配置一个确认监视器

  故障手动切换:由用户根据实际情况,通过监视器命令将备库切换为主库。在用户干预之前,备库可以继续提供只读服务,但修改非临时表数据的操作将会失败。

故障自动切换	故障手动切换
硬件要求	>=3台机器	>=2
主库故障需要人工干预	否	是
备库KEEP_BUF	有(实时主备和MPP主备专用)	有(实时主备和MPP主备专用)
需要确认监视器	是	否
支持实时主备	是	是
支持MPP主备	是	是
支持读写分离集群	是	是
主库故障处理	备库自动接管	备库手动接管
备库故障处理	主库先进入Confirm状态,向确认监视器求证备库故障后,再进行Failover处理	主库直接Failover处理
主备库切换	支持	支持

  守护进程状态包括:startup状态、open状态、shutdown状态、switchover状态、failover状态、recovery状态、confirm状态、takeover状态、open force状态

3.5 监视器作用及类型

  监视器作用:监视数据守护状态、状态信息确认(配置为故障自动切换的确认监视器的情况下)、管理数据守护状态、发起故障自动接管命令
监视器类型:
  监控模式(dmmonitor.ini:MON_DW_CONFIRM=0)
  确认模式(dmmonitor.ini:MON_DW_CONFIRM=1)
  区别:确认模式除了具备监控模式所有功能外,还具有状态确认和自动接管两个功能。
  状态确认:主库守护进程监测到备库故障时,需要向监视器求证,确认备库是真的故障了,再启动故障处理流程将归档失效,避免脑裂。状态确认只对故障自动切换数据守护系统有效,主库守护进程在满足一定条件时,会切换到Confirm状态,然后根据不同的场景决定是否切换为Failover状态并启动故障处理流程。
  自动接管:故障自动切换模式下,确认监视器检测到主库故障后,根据收到的主备LSN、归档状态、MAL链路状态等信息,确定一个接管备库,并将其切换为主库。主要有三种场景,任何一种都会导致备库自动接管:

  • 1.主库数据库实例异常终止、主库守护进程正常
  • 2.主库硬件故障或者数据库实例和守护进程同时故障
  • 3.主库网络故障,主备库之间、主库与监视器之间连接异常

3.6 数据守护的优点

  • 高可靠性、备机秒级切换为主机
  • 高速网络传输,基于TCP/IP协议传输REDO日志
  • 备机可读,用于报表查询、备份数据库
  • 可靠的故障处理(自动切换、手工切换、自动恢复数据、自动同步)
  • 历史数据自动同步
  • 多重数据保护
  • 性能稳定
  • 滚动升级

四、读写分离集群

4.1、读写分离集群概念

  读写分离集群是基于即时归档实现的高性能数据库集群,不但提供数据保护、容灾等数据守护基本功能,还具有读写操作自动分离、负载均衡等特性。读写分离集群最多可以配置8个即时备库,提供数据同步、备库故障自动处理、故障恢复自动数据同步等功能,也支持自动故障切换和手动故障切换两种守护模式。
  在高并发事务型系统中,当读事务相对多于写事务时,可以将读事务转移到备机执行,减少主库的压力。通过增加备机节点资源,提高系统的并发能力,增强性能。

4.2、归档流程

在这里插入图片描述

  1. 主库先将日志写入本地联机REDO日志文件中,在发送RLOG_PKG到备库
  2. 备库日志重演时有两种选择:(1)事务一致模式:要求备库在重演redo日志完成后再响应主库(2)高性能模式:与实时归档一样,收到redo日之后,马上响应主库
  3. 即时归档的同步机制可以保证备库的redo日志不会比主库的redo日志多,因此即时备库不需要keep_pkg,收到rlog_pkg直接加入到Apply任务系统,启动redo重演
  4. 备库故障或主备库之间网络故障,导致发送RELOG_PKG失败后,主库马上修改即时归档为Invalid状态,并切换数据库为Suspend状态
  5. 即时归档修改为Invailid状态后,会强制断开对应此备库上存在影子会话的用户会话,避免只读操作继续分发到该备库,导致查询数据不一致

4.3、实现原理

  利用备库提供只读服务、无法修改数据的特性,优先将所有操作发送到备库执行,一旦备库执行报错,则发送到主库重新执行。通过备库“试错”这么一个步骤,自然地将只读操作分流到备库执行。并且备库“试错”由接口层自动完成,对应用透明。

  读写分离集群数据库连接创建流程:
在这里插入图片描述

  1. 用户发起数据库连接请求。
  2. 接口(JDBC、DPI 等)根据服务名配置(在 dm_svc.conf 中进行配置)登录主库。
  3. 主库挑选一个有效即时备库的 IP/Port 返回给接口。
  4. 接口根据返回的备库 IP 和 Port 信息,向备库发起一个连接请求。
  5. 备库返回连接成功信息。
  6. 接口响应用户数据库连接创建成功。
    接口在备库上创建的连接是读写分离集群自动创建的;对用户而言,就是在主库上创建
    了一个数据库连接。下图以配置了两个备库的读写集群为例,说明了读写分离集群的连接创建流程。

  读写分离集群语句分发流程:
在这里插入图片描述

  1. 接口收到用户的请求。
  2. 接口优先将 SQL 发送到备库执行。
  3. 备库执行并返回执行结果。如果接口收到的是备库执行成功消息,则转到第 6 步,
    如果接口收到的是备库执行失败消息,则转到第 4 步。
  4. 重新将执行失败的 SQL 发送到主库执行。只要第 3 步中的 SQL 在备库执行失败,
    则同一个事务后续的所有操作(包括只读操作)都会直接发送到主库执行。
  5. 主库执行并返回执行结果给接口。一旦主库上执行的写事务提交,则下次继续从第
    1 步开始执行。
  6. 接口响应用户并将执行结果返回给用户。

社区地址:https://eco.dameng.com

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值