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 守护进程故障切换模式以及进程状态
故障自动切换:主库发生故障时,确认监视器自动选择一个备库,切换为主库对外提供服务,故障自动切换模式,要求必须配置且只能配置一个确认监视器
故障手动切换:由用户根据实际情况,通过监视器命令将备库切换为主库。在用户干预之前,备库可以继续提供只读服务,但修改非临时表数据的操作将会失败。
守护进程状态包括: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、归档流程
- 主库先将日志写入本地联机REDO日志文件中,在发送RLOG_PKG到备库
- 备库日志重演时有两种选择:(1)事务一致模式:要求备库在重演redo日志完成后再响应主库(2)高性能模式:与实时归档一样,收到redo日之后,马上响应主库
- 即时归档的同步机制可以保证备库的redo日志不会比主库的redo日志多,因此即时备库不需要keep_pkg,收到rlog_pkg直接加入到Apply任务系统,启动redo重演
- 备库故障或主备库之间网络故障,导致发送RELOG_PKG失败后,主库马上修改即时归档为Invalid状态,并切换数据库为Suspend状态
- 即时归档修改为Invailid状态后,会强制断开对应此备库上存在影子会话的用户会话,避免只读操作继续分发到该备库,导致查询数据不一致
4.3、实现原理
利用备库提供只读服务、无法修改数据的特性,优先将所有操作发送到备库执行,一旦备库执行报错,则发送到主库重新执行。通过备库“试错”这么一个步骤,自然地将只读操作分流到备库执行。并且备库“试错”由接口层自动完成,对应用透明。
读写分离集群数据库连接创建流程:
- 用户发起数据库连接请求。
- 接口(JDBC、DPI 等)根据服务名配置(在 dm_svc.conf 中进行配置)登录主库。
- 主库挑选一个有效即时备库的 IP/Port 返回给接口。
- 接口根据返回的备库 IP 和 Port 信息,向备库发起一个连接请求。
- 备库返回连接成功信息。
- 接口响应用户数据库连接创建成功。
接口在备库上创建的连接是读写分离集群自动创建的;对用户而言,就是在主库上创建
了一个数据库连接。下图以配置了两个备库的读写集群为例,说明了读写分离集群的连接创建流程。
读写分离集群语句分发流程:
- 接口收到用户的请求。
- 接口优先将 SQL 发送到备库执行。
- 备库执行并返回执行结果。如果接口收到的是备库执行成功消息,则转到第 6 步,
如果接口收到的是备库执行失败消息,则转到第 4 步。 - 重新将执行失败的 SQL 发送到主库执行。只要第 3 步中的 SQL 在备库执行失败,
则同一个事务后续的所有操作(包括只读操作)都会直接发送到主库执行。 - 主库执行并返回执行结果给接口。一旦主库上执行的写事务提交,则下次继续从第
1 步开始执行。 - 接口响应用户并将执行结果返回给用户。
社区地址:https://eco.dameng.com