DMDSC学习
DM 共享存储数据库集群,允许多个数据库实例同时访问、操作同一数据库,具有高可用、高性能、负载均衡等特性。DMDSC 支持故障自动切换和故障自动重加入,某一个数据库实例故障后,不会导致数据库服务无法提供。
DMDSC概述
概述
-
DMDSC 集群是一个多实例、单数据库的系统。多个数据库实例可以同时访问、修改同一个数据库的数据。用户可以登录集群中的任意一个数据库实例,获得完整的数据库服务。
-
DMDSC 集群主要由数据库和数据库实例、共享存储、DMASM 或 DMASM 镜像、本地存储、通信网络、集群控制软件 DMCSS、集群监视器 DMCSSM 组成。以下是一个两节点的DMDSC集群结构图
系统性能
-
DMDSC的主要特点:
- 高可用性
- 只要集群中有一个活动节点,就能正常提供数据库服务。
- 当出现磁盘损坏或数据丢失时,既可以利用其他镜像副本继续提供数据库服务,又可以使用其他镜像副本进行数据恢复。
- 高吞吐量
- 多个节点同时提供数据库服务,有效提升集群的整体事务处理能力。
- 负载均衡
- 一方面,通过巧用服务名,用户的连接请求被平均分配到集群中的各个节点,确保连接负载平衡;另一方面,条带化技术可保证写入的数据均匀分布到磁盘组内的不同磁盘中,实现数据负载均衡。
- 高可用性
-
高可用性
DM提供两种高可用解决方案
- 使用集群控制软件DMCSS
- 当出现系统故障、硬件故障、或人为操作失误时,DMCSS 可检测故障并自动将故障节点踢出集群,保证数据库服务的正常提供。
- 故障节点的用户连接会自动切换到活动节点,这些连接上的未提交事务将被回滚,已提交事务不受影响;活动节点的用户连接不受影响,正在执行的操作将被挂起一段时间,在故障处理完成后,继续执行。当 DMCSS 检测到故障节点恢复时,自动启动节点重加入流程,将恢复的故障节点重新加入 DMDSC 集群,将集群恢复到正常的运行状态。
- 使用DMASM镜像的多副本技术
- 当出现磁盘损坏或数据丢失时,系统无需人工干预即可利用其他镜像副本继续提供数据库服务,同时又可以自动或手动通过使用其他镜像副本进行数据恢复。
- 使用集群控制软件DMCSS
-
高吞吐量
- DMDSC 集群中包含多个数据库实例,数据库实例访问独立的处理器、内存,数据库实例之间通过缓存交换技术提升共享数据的访问速度,每个数据库实例都可以接收并处理用户的各种数据库请求。
- 与单节点数据库管理系统相比,DMDSC 集群可以充分利用多台物理机器的处理能力,支撑更多的用户连接请求,提供更高的吞吐量。
-
负载均衡
DMDSC 从连接和数据两个层面提供负载均衡特性
- 通过巧用服务名
- 通过配置 DM 数据库连接服务名来访问 DMDSC 集群,可以实现节点间的连接自动负载均衡。用户的数据库连接请求会被自动、平均地分配到 DMDSC 集群中的各个节点。并且连接服务名支持 JDBC、DPI、ODBC、DCI、.Net Provider 等各种数据库接口。
- 使用镜像的条带化技术
- 通过配置 DMASM 镜像,使用镜像的条带化技术可保证写入的数据均匀分布到磁盘组内的不同磁盘中,实现数据负载均衡。
- 通过巧用服务名
基本概念
- 共享存储
- DMDSC 集群中,为了实现多个实例同时访问、修改数据,要求将数据文件、控制文件、日志文件保存在共享存储上。DMDSC 使用 DMASM 文件系统管理共享存储设备。
- 一台共享存储上,只能搭建一套 DMASM 文件系统,多套会导致系统启动失败。
- 本地存储
- DMDSC 集群中,本地存储用来保存配置文件(记录数据库实例配置信息的 DM.INI、DMARCH.INI、DMMAL.INI)。
- 通信网络
- DMDSC 集群中,网络分为对外服务网络、MAL 高速内网和高速共享存储网络三部分。
- 对外服务网络用于对外提供数据库服务,用户使用公共网络地址登录 DMDSC 集群,访问数据库
- MAL 高速内网用于数据库实例之间交换信息和数据。MAL 链路即为 MAL 高速内网
- 高速共享存储网络用于数据库实例和共享存储之间的通信。常见的两种方式为通过光纤通道实现或通过网络 SCSI 实现
- DMDSC 集群中,网络分为对外服务网络、MAL 高速内网和高速共享存储网络三部分。
- 集群与集群组
- 集群是由两个或多个节点(服务器)构成的一种松散耦合的计算机节点集合,这个集合在整个网络中表现为一个单一的系统,并通过单一接口进行使用和管理。大多数模式下,集群中的所有计算机都拥有一个相同的名称,集群内任意一个系统都可以被所有的网络用户使用。
- 一个 DMDSC 集群由多个 DMSERVER 服务器共同构成;一个 DMCSS 集群由多个 DMCSS 服务器共同构成;一个 DMASM 集群由多个 DMASM 服务器共同构成。
- DMDSC集群
- DMDSC 集群由若干数据库实例组成,这些实例间通过网络(MAL 链路)连接,通过一个特殊的软件(DMCSS,集群同步服务)的协助,共同操作一个数据库。数据文件、控制文件等文件在集群中只有一份,所有节点平等地使用这些数据文件。
- DM自动存储管理器(DMASM)
- DM 自动存储管理器(DM Auto Storage Manager,简称 DMASM)是一个专用用来为块设备管理文件的分布式文件系统。使用 DMASM 文件系统可以灵活地在块设备上创建、删除、扩展、截断文件,不用担心空间不足(可以通过在线增加块设备的磁盘来扩展空间)或空间浪费;不用考虑文件个数限制;可以方便地查看空间使用情况。
- DMDSC 支持多个节点同时访问、修改 DMASM 中的数据文件。
- DMASM 不是一个通用的文件系统,应用程序只能通过 DMASMAPI 接口访问。
- DM集群同步服务(DMCSS)
- DM 集群同步服务(DM Cluster Synchronization Services,简称 DMCSS)是一款集群控制软件,是 DMDSC 集群应用的基础。DMCSS 专门负责监控集群中各个节点的运行状态,主要功能包括集群环境中节点的启动、故障处理、节点重加入等操作。
- 每个 DMDSC 集群或 DMASM 集群节点都必须配置一个 DMCSS 服务。
- DM集群监视器
- DM 集群监视器(DM Cluster Synchronization Services Monitor,简称 DMCSSM)用来监控整个集群的状态信息。
- DMCSSM 与 DMCSS 相互通信,从 DMCSS 处获取整个集群系统的状态信息。DMCSSM 提供一系列管理维护集群的命令。
- 心跳机制
- DMCSS 的心跳机制(Heartbeat)是通过 VOTE 磁盘(非镜像环境下)或 DCRV 磁盘(镜像环境下)的 Disk Heartbeat 实现。
- 心跳机制有最大时延,只有超过最大时延,才认为监测对象故障。
- MAL链路
- MAL 系统是达梦数据库基于 TCP 协议实现的一种内部通信机制,具有可靠、灵活、高效的特性。
- 使用 DMASM 文件系统的 DMDSC 集群中存在两套 MAL 系统,DMASM 服务器之间配置一套 MAL 系统,DMSERVER 服务器之间配置一套 MAL 系统。两套 MAL 系统工作原理相同:一旦 MAL 链路出现异常,DMCSS 会进行裁定,并从集群中踢出一个节点,保证集群环境正常运行。
- 共享内存
- 共享内存是一种快速、高效的进程间通信手段。所谓共享内存,就是同一块物理内存被映射到多个进程的地址空间,进程 A 可以即时看到进程 B 对共享内存的修改
使用环境
硬件环境
- 主机两台:用于部署数据库实例dmserver、DMCSS、DMASMSVR。内存大小要求:至少2GB。
- 共享存储:两台机器可以同时访问到的,可以划分为裸设备的磁盘。
- 网卡:每台主机至少准备2块网卡。提供内部网络和外部网络服务。
软件环境
- 操作系统:Linux、Windows、Unix等。
关键技术
事务管理
-
多版本并发控制(MVCC)可以确保数据库的读操作与写操作不会相互阻塞,大幅度提升数据库的并发度以及使用体验。DM 的多版本并发控制实现策略是:数据页中只保留物理记录的最新版本数据,通过回滚记录维护数据的历史版本,通过活动事务视图判断事务可见性,确定获取哪一个版本的数据。
-
每一条物理记录中包含了两个字段:TID 和 RPTR。
- TID 保存修改记录的事务号,RPTR 保存回滚段中上一个版本回滚记录的物理地址
-
回滚记录与物理记录一样,也包含了 TID 和 RPTR 这两个字段。
- TID 保存产生回滚记录时物理记录上的 TID 值(也就是上一个版本的事务号),RPTR 保存回滚段中上一个版本回滚记录的物理地址
-
每一条记录(物理记录或回滚记录)代表一个版本。
-
DM 多版本并发控制可见性原则:
- 物理记录 TID 等于当前事务号,说明是本事务修改的物理记录,物理记录可见
- 物理记录 TID 不在活动事务表中,并且 TID 小于 NEXT_TID,物理记录可见
- 物理记录的 TID 包含在活动事务表中,或者 TID>=NEXT_TID,物理记录不可见
封锁管理
- 数据库管理系统一般采用行锁进行并发访问控制,避免多个用户同时修改相同数据;通过表锁、字典锁控制 DDL 和 DML 操作的并发访问,保证对象定义的有效性和数据访问的正确性。DM 则采用了独特的封锁机制,使用 TID 锁和对象锁进行并发访问控制,有效减少封锁冲突、提升系统并发性能。
- TID 锁以事务号为封锁对象,每个事务启动时,自动以独占(X)方式对当前事务号进行封锁,由于事务号是全局唯一的,因此这把 TID 锁不存在冲突,总是可以封锁成功。通过事务启动时创建的 TID 锁,以及写入物理记录的 TID 值,DM 中所有修改物理记录的操作都不再需要额外的行锁,避免了大量行锁对系统资源的消耗,有效减少封锁冲突。
- DMDSC 集群将封锁管理拆分为全局封锁服务(Global Locking Services,简称 GLS)和本地封锁服务(Local Locking Services,简称 LLS)两部分。整个系统中,只有控制节点拥有一个 GLS。
闩管理
- 闩(Latch)是数据库管理系统的一种内部数据结构,通常用来协调、管理 Buffer 缓冲区、字典缓存和数据库文件等资源的并发访问。
- DMDSC集群将闩划分为全局闩服务(Global Latch Services,简称 GLS)和本地闩服务(Local Latch Services,简称 LLS)两个部分。为了与全局封锁服务 GLS 和本地封锁服务 LLS 的名字简称区分开来,全局闩服务也称为全局缓冲区服务(Global Buffer Services),简称 GBS;本地闩服务也称为本地缓冲区服务(Local Buffer Services),简称 LBS。
- 整个系统中,每一个节点上都部署一个 GBS 和一个 LBS。GBS 服务协调节点间的 Latch 封锁请求、以及 Latch 权限回收。LBS 服务根据用户请求,向 GBS 发起 Latch 封锁,或者根据 GBS 请求,回收本地的 Latch 封锁。
缓存交换
- DMDSC 集群引入了缓存交换(Buffer Swap)技术,节点间的数据页尽可能通过网络传递,避免通过磁盘的写入、再读出方式在节点间传递数据,从而减少数据库的 IO 等待时间,提升系统的响应速度。
- 缓存交换的实现基础是 GBS/LBS 服务,在 GBS/LBS 中维护了 Buffer 数据页的相关信息。
- 闩的封锁权限(LATCH)
- 哪些站点访问过此数据页(Access MAP)
- 最新数据保存在哪一个节点(Fresh EP)中
- 最新数据页的 LSN 值(Fresh LSN)等信息
重做日志管理
-
一个物理事务包含一个或者多个 REDO 记录(Redo Record,简称 RREC),每条 REDO 记录都对应一个修改物理数据页的动作。
-
根据记录内容的不同,RREC 可以分为两类:物理 RREC 和逻辑 RREC。
- 物理 RREC 记录的是数据页的变化情况,内容包括:操作类型、修改数据页地址、页内偏移、数据页上的修改内容、长度信息(变长类型的 REDO 记录才有)
- 逻辑 RREC 记录的是一些数据库逻辑操作步骤,主要包括:事务启动、事务提交、事务回滚、字典封锁、事务封锁、B 树封锁、字典淘汰等,一般只在配置为 Primary 模式时才产生逻辑 RREC
-
DMDSC 集群中,各个节点拥有独立的日志文件,Redo 日志的 LSN 值也是顺序递增的,Redo 日志只会写入当前数据库实例的联机日志文件,与集群系统中的其他数据库实例没有关系。
-
与单节点系统相比,DMDSC 的日志系统存在以下差异:
- 本地 REDO 日志系统中,LSN 值保证是递增的,后提交物理事务的 LSN 值一定更大;但顺序提交的两个物理事务产生的 LSN 值,不能保证一定是连续的。
- 全局 REDO 日志系统中,LSN 值不再严格保证唯一性。不同节点可能存在 LSN 值相等的重做日志记录。
- 故障重启时,控制节点需要重做所有节点的 REDO 日志,重做过程中会根据 LSN 排序,从小到大依次重做。
- 联机 REDO 日志文件需要保存在共享存储中。
回滚记录管理
- DMDSC 集群中只有一个回滚表空间,回滚记录保存在回滚页中,回滚页与保存用户记录的数据页一样,由 Buffer 系统管理,并通过缓存交换机制实现全局数据共享。
- 为了减少并发冲突,提高系统性能,DMDSC 集群中为每个节点分配了一个单独的回滚段(Segment),虽然这些回滚段位于同一个回滚表空间中,但是各个节点的回滚页申请、释放,并不会产生全局冲突。
DMCSS
介绍
- 在 DMASM 集群或 DMDSC 集群中,每个节点都需要配置一个 DMCSS 服务。
- DMCSS 集群中负责监控、管理整个 DMASM 集群和 DMDSC 集群的节点称为控制节点(Control Node),其他 DMCSS 节点称为普通节点(Normal Node)。
- DMCSS 普通节点不参与 DMASM 集群和 DMDSC 集群管理,当 DMCSS 控制节点故障时,会从活动的普通节点中重新选取一个 DMCSS 控制节点。
- DMCSS 工作的基本原理是:
- 在 VOTE 磁盘(非镜像环境下)或 DCRV 磁盘(镜像环境下)中,为每个被监控对象(DMASMSVR、DMSERVER、DMCSS)分配一片独立的存储区域,被监控对象定时向 VOTE 或 DCRV 磁盘写入信息(包括时间戳、状态、命令、以及命令执行结果等);
- DMCSS 控制节点定时从 VOTE 或 DCRV 磁盘读取信息,检查被监控对象的状态变化,启动相应的处理流程;
- 被监控对象只会被动的接收 DMCSS 控制节点命令,执行并响应。
- DMCSS的主要功能:写入心跳信息、选举 DMCSS 控制节点、选取 DMASM/DMDSC 控制节点、管理被监控对象的启动流程、集群状态监控、节点故障处理、节点重加入等
- 心跳信息
- DMCSS 实例启动后,每间隔 1 秒向 Voting Disk 指定区域写入心跳信息(包括自身的状态、时间戳等),表示 DMCSS 节点处于活动状态。
- 选举DMCSS控制节点
- DMCSS 启动后向 VOTE 磁盘(非镜像环境下)或 DCRV 磁盘(镜像环境下)写入信息,并读取其他 DMCSS 节点的信息,如果 DMCSS 集群中还没有活动的控制节点,则选举 DMCSS 控制节点。
- 选举原则:
- 先启动的 DMCSS 作为控制节点。
- 如果 DMCSS 同时启动,那么则选择节点号小的节点为控制节点。
- 如果 DMCSS 控制节点挂掉,那么会将先向 VOTE 磁盘(非镜像环境下)或 DCRV 磁盘(镜像环境下)写入心跳信息的节点设置为控制节点;若同时有多个节点先向 VOTE 磁盘(非镜像环境下)或 DCRV 磁盘(镜像环境下)写入心跳信息,那么选择节点号小的节点为控制节点。
- 选取监控对象控制节点
- DMCSS 控制节点启动后,会为基于 DMASM/裸设备的 DMDSC 集群指定控制节点。
- DMCSS选取监控对象控制节点的原则:
- 只有一个活动节点,则设置活动节点为控制节点。
- 存在多个活动节点,则选择节点号小的节点为控制节点。
- 状态检测
- DMCSS 维护集群状态,随着节点活动信息的变化,集群状态也会产生变化,DMCSS 控制节点会通知被监控节点执行不同命令,来控制节点启动、故障处理、故障重加入等操作。
- DMCSS 控制节点每秒从 VOTE 磁盘(非镜像环境下)或 DCRV 磁盘(镜像环境下)读取被监控对象的心跳信息。一旦被监控对象的时间戳在 DCR_GRP_DSKCHK_CNT 秒内没有变化,则认为被监控对象出现异常。
- 故障处理
- DMCSS 控制节点检测到实例故障后,首先向故障实例的 VOTE 磁盘(非镜像环境下)或 DCRV 磁盘(镜像环境下)区域写入 Kill 命令(所有实例一旦发现 Kill 命令,无条件自杀),避免故障实例仍然处于活动状态,引发脑裂,然后启动故障处理流程,不同类型实例的故障处理流程存在一些差异。
- DMCSS控制节点故障处理流程
- 活动节点重新选举 DMCSS 控制节点
- 新的 DMCSS 控制节点通知出现 DMCSS 故障节点对应的 dmasmsvr、dmserver 强制退出
- 节点重加入
- 如果检测到故障节点恢复,DMCSS 会通知控制节点启动节点重加入流程。
- 心跳信息
DMASM
概述
- DM 自动存储管理器(DM Auto Storage Manager,简称 DMASM)是一个专用的分布式文件系统。使用 DMASM 自动存储管理方案,可以帮助用户更加便捷地管理 DMDSC 集群的数据库文件。
- DMASM 的主要部件包括:提供存储服务的块设备、DMASMSVR 服务器、DMASMAPI 接口、初始化工具 DMASMCMD 和管理工具 DMASMTOOL 等。
术语和基本概念
-
DMASM使用的一些基本术语由下表所示。
中文术语 英文术语 DM 自动存储管理器 DM Auto Storage Manager,简称 DMASM ASM 磁盘 ASM DISK 磁盘组 DISK GROUP ASM 文件 ASM FILE 簇 extent 数据分配单元 Allocation Units,简称 AU DM 集群注册表 DM Clusterware Registry,简称 DCR DCR 磁盘 DCR DISK VOTE 磁盘 VOTE DISK,简称 VTD DMASM 文件系统初始化工具 DMASMCMD (专门用于 DMASM 非镜像环境) DMASM 服务器 DMASMSVR (专门用于 DMASM 非镜像环境) DMASM 应用程序访问接口 DMASMAPI (专门用于 DMASM 非镜像环境) DMASM 管理工具 DMASMTOOL (专门用于 DMASM 非镜像环境) -
详细一点的解释:
- DMASM:DMASM 是一个分布式文件系统,用来管理块设备的磁盘和文件。
- ASM磁盘:ASM 磁盘是指经过 DMASMCMD 工具格式化,可以被 DMASMSVR 识别的物理磁盘。
- ASM 磁盘是组成磁盘组的基本单位,一个块设备只能格式化为一个 ASM 磁盘,不支持分割使用。
- 磁盘组:磁盘组由一个或多个 ASM 磁盘组成,是存储 ASM 文件的载体;一块 ASM 磁盘只能属于一个磁盘组。
- ASM文件:在 ASM 磁盘组上创建的文件,称之为 ASM 文件。
- 一个 ASM 文件只能保存在一个磁盘组中,但一个 ASM 文件的数据可以物理存放在同一磁盘组的多个 ASM 磁盘中。
- 簇:簇是 ASM 文件的最小分配单位,一个簇由物理上连续的一组 AU 构成。
- 数据分配单元:DMASM 存储管理的最小单位。AU 的大小为 1M,为系统固定大小,无需用户指定。
- DCR磁盘:DM 集群注册表(DM Clusterware Registry,简称 DCR)磁盘专门用于存储 DCR 文件。DCR 文件记录了存储、维护集群配置的详细信息。
- 整个集群环境共享 DCR 磁盘信息,包括集群(DMDSC、DMASM、DMCSS)资源、实例名、监听端口、集群中故障节点信息等。
- VOTE磁盘:VOTE 磁盘专门用于存储 VTD 文件。VTD 文件记录了集群成员信息。
- DM 集群通过 VOTE DISK 进行心跳检测,确定集群中节点的状态,判断节点是否出现故障。
- DMASM文件系统初始化工具:专门用于 DMASM 非镜像环境。
关键技术
-
ASM磁盘与文件管理
-
DMASMCMD 将物理磁盘格式化后,变成可识别、可管理的 ASM 磁盘,再通过 ASM 磁盘组将一个或者多个 ASM 磁盘整合成一个整体提供文件服务。
-
ASM 磁盘格式化以后,会逻辑划分为若干簇(Extent),簇是管理 ASM 磁盘的基本单位,ASM 文件的最小分配单位也是簇。
- 这些逻辑划分的簇根据其用途可以分为 DESC 描述簇、INODE 簇和 DATA 数据簇。
- 描述簇由多个描述项组成。每一个描述项存储一个 INODE 簇或一个数据簇的元数据。
- INODE 簇由多个 INODE 项组成。每一个 INODE 项存放一个 ASM 文件的元数据。
- 数据簇用于存储用户数据。
- 这些逻辑划分的簇根据其用途可以分为 DESC 描述簇、INODE 簇和 DATA 数据簇。
-
-
DMASM REDO日志
- DMASM 采用重做日志机制保证在各种异常(比如系统掉电重启)情况下数据不被损坏。
- 创建、删除 ASM 文件等 DDL 操作过程中,所有针对 DMASM 描述 AU、INODE AU 的修改,都会生成 REDO 日志,并且在描述 AU、INODE AU 的修改写入磁盘之前,必须确保 REDO 日志已经写入磁盘。
- DMASM 所有 DDL 操作(创建文件、删除文件、增加磁盘等)都是串行执行的,并且在操作完成之前,会确保所有修改的描述项、INODE 项写入磁盘;一旦 DDL 操作完成,所有 REDO 日志就可以被覆盖了。
- DDL 操作过程中出现异常时,如果 REDO 日志尚未写入磁盘,则当前操作对系统没有任何影响;如果 REDO 日志已经写入磁盘,那么重新启动后,系统会重演 REDO 日志,修改描述 AU 和 INODE AU,将此 DDL 继续完成。
- DMASM 采用重做日志机制保证在各种异常(比如系统掉电重启)情况下数据不被损坏。
-
簇映射表
-
创建 ASM 文件后,用户操作 ASM 文件的一般流程是:调用 ASM 文件的 OPEN、READ、WRITE 接口,打开 ASM 文件并获取一个句柄,再使用这个句柄从文件的指定偏移读取数据、或者写入数据。
-
DMASM 使用簇映射表机制维护 ASM 文件与物理磁盘地址的映射关系,访问 ASM 文件时,根据文件号、文件偏移等信息,通过簇映射表可以快速获取到物理磁盘地址。
-
参考
- https://eco.dameng.com/document/dm/zh-cn/pm/dsc-overview.html