DM数据库集群包括数据守护和读写分离集群、共享存储数据库集群(DMDSC)、透明分布式数据库(DMTDD) 等等。本文主要是介绍数据守护的相关概念、组件功能及相关配置文件说明,以及简单介绍达梦数据库的集群。
DM 数据守护 (Data Watch) 是一种集成化的高可用、高性能数据库解决方案,是数据库异地容灾的首选方案。通过部署 DM 数据守护,可以在硬件故障(如磁盘损坏)、自然灾害(地震、火灾)等极端情况下,避免数据损坏、丢失,保障数据安全,并且可以快速恢复数据库服务,满足用户不间断提供数据库服务的要求。
与常规的数据库备份 (Backup)、还原 (Restore) 技术相比,数据守护可以更快地恢复数据库服务。随着数据规模不断增长,通过还原手段恢复数据,往往需要数个小时、甚至更长时间,而数据守护基本不受数据规模的影响,只需数秒时间就可以将备库切换为主库对外提供数据库服务。
将主库(生产库)产生的 REDO 日志传输到备库,备库接收并重新应用 REDO 日志,从而实现备库与主库的数据同步。DM 数据守护的核心思想是监控数据库状态,获取主、备库数据同步情况,为 REDO 日志传输与重演过程中出现的各种异常情况提供一系列的解决方案。
DM 数据守护系统主要由主库、备库、REDO 日志、REDO 日志传输、REDO 日志重演、守护进程 (dmwatcher)、监视器 (dmmonitor) 组成,如下图所示:
数据库 (Database)
数据库是一个文件集合(包括数据文件、临时文件、重做日志文件和控制文件),保存在物理磁盘或文件系统中。
数据库实例 (Instance)
数据库实例是一组操作系统进程(或者是一个多线程的进程)以及一些内存。通过数据库实例,可以操作数据库,一般情况下,我们访问、修改数据库都是通过数据库实例来完成的。
主库
Primary 模式,提供完整数据库服务的实例,一般来说主库是用来直接支撑应用系统的生产库。
备库
Standby 模式,提供只读数据库服务的实例。备库除了用于容灾,还可以提供备份、查询等只读功能,并且备库还支持临时表的 Insert/Delete/Update 操作,备库支持临时表修改主要基于以下两个因素:
①临时表数据的修改不会产生 REDO 日志,主库对临时表的修改无法同步到备库;
②可以提供更大灵活性,适应更多应用场景。
根据数据同步情况,备库又可以分为可切换备库和不可切换备库。可切换备库是指,主备库之间数据完全同步,主库发生故障、备库切换为主库后,不会造成任何数据丢失的备库。
REDO 日志
REDO 日志记录物理数据页内容变动情况,是数据库十分重要的一个功能,在数据库系统故障(比如服务器掉电)重启时,利用 REDO 日志可以把数据恢复到故障前的状态。
REDO 日志也是数据守护的实现基础,数据库中 Insert、Delete、Update 等 DML 操作以及 Create TABLE 等 DDL 操作最终都会体现为对某一个或者多个物理数据页的修改,因此备库通过重做 REDO 日志可以与主库数据保持一致。
REDO 日志传输
主备库之间的 REDO 日志传输,以日志包 RLOG_PKG 为单位,主库通过 MAL 系统发送 REDO 日志到备库。各种不同数据守护类型的区别,就在于主库日志包 RLOG_PKG 的发送时机,以及备库收到 REDO 日志后的处理策略。
REDO 日志重演
REDO 日志重演的过程,就是备库收到主库发送的 REDO 日志后,在物理数据页上,重新修改数据的过程。REDO 日志重演由专门的 REDO 日志重演服务完成,重演服务严格按照 REDO 日志产生的先后顺序,解析 REDO 日志、修改相应的物理数据页,并且重演过程中备库会生成自身的 REDO 日志写入联机日志文件。
守护进程 (dmwatcher)
守护进程是数据守护系统的核心工具,监控数据库实例的运行状态和主备库数据同步情况,在出现故障时启动各种处理预案。守护进程是各种消息的中转站,接收数据库实例、其他守护进程、以及监视器发送的各种消息;同时,守护进程也会将收到的数据库实例消息转发给其他守护进程和监视器。守护进程必须和被守护的数据库实例部署在同一台机器上。
监视器 (dmmonitor)
监视器用来监控守护系统内守护进程、数据库实例信息,执行用户输入命令、监控实例故障、实现自动切换等。监视器一般配置在数据库实例和守护进程以外的机器上。
与 DM 数据守护相关的配置文件信息如下所示:
文件名 | 描述说明 | 存放目录 |
---|---|---|
dm.ini | 数据库配置文件 | 没有限制,一般直接放在数据库目录中 |
dm.ctl | 数据库控制文件 | 由 dm.ini 的 CTL_PATH 配置项指定 |
dmmal.ini | MAL 配置文件 | 由 dm.ini 的CONFIG_PATH 配置项指定 |
dmarch.ini | Redo 日志归档配置文件 | 由 dm.ini 的CONFIG_PATH 配置项指定 |
dmtimer.ini | 定时器配置文件 | 由 dm.ini 的CONFIG_PATH 配置项指定 |
dmwatcher.ini | 守护进程配置文件 | 没有限制,一般和 dm.ini 存放在同一个目录 |
dmmonitor.ini | 监视器配置文件 | 没有限制,一般和 dm.ini 存放在同一个目录 |
dmmpp.ctl | MPP 控制文件 | 由 dm.ini 的 SYSTEM_PATH 配置项指定 |
…… | …… | …… |
注意:
DM的单节点和主库提供读未提交(Read Uncommitted)、读提交(Read Committed)和串行化(Seriablizable)三种事务隔离级,可重复读(Repeatable Read)升级为更严格的串行化事务隔离级。但是,备库只支持读提交(Read Committed)事务隔离级别:不能访问所有未提交事务的修改,可以访问所有已提交事务的修改。
术语 | 含义 |
---|---|
实时主备 | 配置实时归档的主备系统 |
MPP 主备 | 配置实时归档的 MPP 集群主备系统 |
读写分离集群 | 配置即时归档或实时归档的主备系统 |
实时主库[实例名] | 实时主备系统中 Primary 模式的库 |
实时备库[实例名] | 实时主备系统中 Standby 模式的库 |
MPP 主库[实例名] | MPP 主备系统中 Primary 模式的库 |
MPP 备库[实例名] | MPP 主备系统中 Standby 模式的库 |
即时主库[实例名] | 采用即时归档的读写分离主备系统中 Primary 模式的库 |
即时备库[实例名] | 读采用即时归档的写分离主备系统中 Standby 模式的库 |
异步备库[实例名] | 异步归档目标库,Standby 模式 |
异步源库[实例名] | 异步归档源库,Primary/Standby 模式都可,实时、即时归档的主备库作为异步源库时,各库都需要设置异步备库作为归档目标,支持多源的配置,但是只有当前主库才会同步数据。 |
故障主库[实例名] | 发生故障的 Primary 模式实例 |
故障备库[实例名] | 发生故障的 Standby 模式实例 |
数据一致备库[实例名] | 主库到当前备库归档处于有效状态,备库与主库数据保持一致 |
可恢复备库[实例名] | 主库到当前备库归档处于失效状态,备库与主库数据存在差异,但主库归档日志涵盖备库缺失的数据 |
分裂库[实例名] | 与主库数据不一致,且无法通过重做归档日志将数据恢复到一致状态的库 |
守护进程组[组名] | 配置了相同 OGUID 的两个或多个守护进程,构成一个守护进程组 |
DMDSC 数据守护 | 主备库中包含数据共享集群(DSC)的守护系统 |
控制守护进程 | 守护 DMDSC 集群数据库控制节点的守护进程 |
普通守护进程 | 守护 DMDSC 集群数据库普通节点的守护进程 |
重演节点个数 | 备库上记录的 n_apply 个数,和当前正在重演的日志所对应的主库节点个数(n_ep)一致 |
监视器 | 基于监视器接口实现的命令行工具,用于监控、管理数据守护系统 |
确认监视器 | 运行在确认模式下的监视器 |
网络故障 | 指主备库之间网络断开,消息无法传递 |
网络异常 | 指主备库之间网络未断开,消息可以传递,但出现速度变慢等情形 |
备库故障 | 指备库出现软、硬件故障,导致数据库实例关闭 |
备库异常 | 指备库的数据库实例正常,但响应速度出现异常 |
DM 数据守护提供多种解决方案,可以配置成实时主备、MPP 主备或读写分离集群,满足用户关于系统可用性、数据安全性、性能等方面的综合需求,有效降低总体投入,获得超值的投资回报。
由一个主库以及一个或者多个配置了实时 (Realtime) 归档的备库组成,其主要目的是保障数据库可用性,提高数据安全性。
实时主备系统中,主库提供完整的数据库功能,备库提供只读服务。主库修改数据产生的 REDO 日志,通过实时归档机制,在写入联机 REDO 日志文件之前发送到备库,实时备库通过重演 REDO 日志与主库保持数据同步。当主库出现故障时,备库在将所有 REDO 日志重演结束后,就可以切换为主库对外提供数据库服务。
在 MPP 集群的基础上,为每一个 MPP 节点配置一套实时主备系统,这些实时主备系统一起构成了 MPP 主备系统。
我们将一个 MPP 节点对应的主备系统称为一个数据守护组 (Group),MPP 主备系统中各个数据守护组保持相对独立,当某个 MPP 主节点出现故障时,在其对应的数据守护组内挑选一个备库切换为主库后,就可以确保整个 MPP 集群的正常使用。
由一个主库以及一个或者多个配置了即时 (Timely) 归档或实时 (Realtime) 归档的备库组成。
其主要目标是在保障数据库可用性基础上,实现读、写操作的自动分离,进一步提升数据库的业务支撑能力。读写分离集群通过配置事务一致模式保证主、备库数据一致性,并配合 DM 数据库管理系统的各种接口(JDBC、DPI 等),将只读操作自动分流到备库,有效降低主库的负载,提升系统吞吐量。
实时主备系统由主库、实时备库、守护进程和监视器组成。 通过部署实时主备系统,可以及时检测并处理各种硬件故障、数据库实例异常,确保持续提供数据库服务。
实时主备系统包括以下功能:
实时数据同步
主备库通过实时归档完成数据同步,实时归档要求主库将 RLOG_PKG 发送到备库后,再将 RLOG_PKG 写入本地联机 REDO 日志文件。但要注意的是,备库确认收到主库发送的 REDO 日志,并不保证备库已经完成重演这些 REDO 日志,因此主备库之间的数据同步存在一定的时间差。
主备库切换
主备库正常运行过程中,可以通过监视器的 Switchover 命令,一键完成主备库角色转换。主备库切换功能可以确保在软、硬件升级,或系统维护时,提供不间断的数据库服务。
自动故障处理
备库故障,不影响主库正常提供数据库服务,守护进程自动通知主库修改实时归档为 Invalid 状态,将实时备库失效。
自动数据同步
备库故障恢复后,守护进程自动通知主库发送归档 REDO 日志,重新进行主备库数据同步。并在历史数据同步后,修改主库的实时归档状态为 Valid,恢复实时备库功能。备库接管后,原主库故障恢复,守护进程自动修改原主库的模式为 Standby,并重新作为备库加入主备系统。
备库接管
主库发生故障后,可以通过监视器的 Takeover 命令,将备库切换为主库,继续对外提供服务。如果配置为自动切换模式,确认监视器可以自动检测主库故障,并通知备库接管,这个过程不需要人工干预。
备库强制接管
如果执行 Takeover 命令不成功,但主库可能由于硬件损坏等原因无法马上恢复,为了及时恢复数据库服务,DM 提供了 Takeover Force 命令,强制将备库切换为主库。但需要由用户确认主库故障前,主库与接管备库的数据是一致的(主库到备库的归档是 Valid 状态),避免引发守护进程组分裂。
读写分离访问
在备库查询的实时性要求不高的条件下,实时主备也可以配置接口的读写分离属性访问,实现读写分离功能特性。
DM MPP 集群是达梦公司推出的分析型数据库集群,适用于以 OLAP 业务为主的系统,例如报表系统,数据仓库、数据中心等。主要用来解决以下问题:
DMMPP 采用完全对等无共享架构,最多可支持 1024 个节点,支持 TB 到 PB 级的数据存储与分析,并提供高可用性和动态扩展能力,无需价格昂贵的专用硬件,以极低的成本代价,提供高性能计算性能。
MPP 主备就是在 MPP 集群的基础上,为每一个 MPP 节点配置一套实时主备系统,这些实时主备系统一起构成了 MPP 主备系统。MPP 主备系统包含多个守护进程组,每个守护进程组都是一个相对独立的实时主备系统,具备实时主备的基本功能,可以进行主备切换、备库接管等操作。
主要目的
为 DM MPP 集群提供数据可靠性保障,备库只做数据容灾、备份,MPP 备库并不是 MPP 集群的一部分,只是某个 MPP 节点(主库)的镜像。MPP 备库不参与 MPP 操作,与其他 MPP 备库之间也没有任何关系,MPP 备库只能以单节点方式提供只读服务,但不提供全局的 MPP 只读服务。
MPP 主备系统中,一个守护进程 dmwatcher 可以监控、管理多个守护进程组的数据库实例。一般来说,一台物理机器上,可以部署 1 个 MPP 节点的主库和多个其他 MPP 节点的备库,充分利用硬件资源,节省投资。
Global 守护类型的 MPP 主备库需要在 dm.ini 中配置 MPP_INI 为 1,并且 MPP 主备库的本地数据文件目录下都需要有 dmmpp.ctl 文件,如果 Global 守护类型的备库没有上述配置,守护进程和监视器无法正常使用,守护进程会切换到 Shutdown 状态,监视器上无法正常执行命令,会打印配置不一致的提示信息。
功能扩展
与实时主备系统相比,MPP 主备扩充了维护 MPP 控制文件功能,dmmpp.ctl 控制文件记录了 MPP 集群的节点信息,在主备库切换或者备库接管后,必须将新的主库信息更新到 dmmpp.ctl 文件中。
下图以三个 MPP 节点,每个节点配备两个备库为例,说明 MPP 主备系统的结构。
类型 | 实时主备 | MPP 主备 |
---|---|---|
数据库类型 | 单节点 | MPP 集群 |
备库数量 | 1~8 | 1~8 |
归档类型 | 实时归档 | 实时归档 |
归档时机 | 写入联机日志前,发送到备库 | 写入联机日志前,发送到备库 |
数据来源 | RLOG_PKG | RLOG_PKG |
更新 dmmpp.ctl | 否 | 是 (只更新 MPP 主节点上的 dmmpp.ctl 文件) |
是否支持 DMDSC 集群 | 支持 | 不支持 |
读写分离集群是基于即时归档或实时归档实现的高性能数据库集群,不但提供数据保护、容灾等数据守护基本功能,还具有读写操作自动分离、负载均衡等特性。读写分离集群最多可以配置 8 个即时备库或 8 个实时备库,提供数据同步、备库故障自动处理、故障恢复自动数据同步等功能,也支持自动故障切换和手动故障切换两种守护模式。
一般情况下,应用系统中查询等只读操作的比例远大于 Insert/Delete/Update 等 DML 操作,修改对象定义等 DDL 操作的比例则更低。但是,这些操作往往混杂在一起,在高并发、高压力情况下,会导致数据库性能下降,响应时间变长。借助读写分离集群,将只读操作自动分发到备库执行,可以充分利用备库的硬件资源,降低主库的并发访问压力,进而提升数据库的吞吐量。
读写分离集群不依赖额外的中间件,而是通过数据库接口与数据库之间的密切配合,实现读、写操作自动分离特性。DM 的 JDBC、DPI、DCI、ODBC、Provider 等接口都可以用来部署读写分离集群。
根据是否满足读提交事务隔离级特性,读写分离集群可以配置为事务一致模式和高性能两种模式。简单的说,事务一致模式下,不论一个 Select 语句是在备库执行、还是在主库执行,其查询结果集都是一样的。高性能模式则不能保证查询是一致的,备库的数据与主库的数据同步存在一定的延迟,当 Select 语句发送到备库执行时,返回的有可能是主库上一个时间点的数据。
共享存储集群 (DMDSC),是一个多实例、单数据库的系统。多个数据库实例可以同时访问、修改同一个数据库的数据。用户可以登录集群中的任意一个数据库实例,获得完整的数据库服务。 如下图所示:
集群提供了一种高可用解决方案,当出现系统故障、硬件故障、或人为操作失误,可自动检测故障、并将故障节点踢出集群,只要集群中有一个活动节点,就能正常提供数据库服务 ,具备高可用、高吞吐量和节点间负载均衡的特点。
与数据守护集群相比,DMDSC 具有更快的故障处理速度。适用于对系统性能要求较高、停机时间尽可能短,且具有高并发、短事务等特性的业务场景。 如果节点之间网络稳定,DMDSC 可以采用节点异地部署实现异地容灾,否则可搭配 Data Watch 实现异地容灾。
本文主要是介绍数据守护的相关概念、组件功能及相关配置文件说明,以及简单介绍达梦数据库的集群。
如果文中有误,欢迎指出,大家共同交流进步!
更多达梦技术资讯,请访问达梦技术社区:
达梦数据库 - 新一代大型通用关系型数据库 | 达梦云适配中心
https://eco.dameng.com/