透明分布式数据库

DM 透明分布式数据库的英文全称为 DM Transparent Distributed Database,简称 DMTDD。DMTDD 将不同地点的多个计算机通过网络互连,共同组成一个完整的、逻辑上集中、物理上分布的大型数据库系统。

DMTDD 既支持传统集中式数据库的所有功能、所有开发接口和业务开发框架,又提供新式分布式数据库的高可扩展、高可用、高并发和对用户透明等高级特性。DMTDD 采用计算与存储分离的系统架构,将计算、日志、存储三层分离,实现各层独立扩展、按需配置设备的特点。

本文主要介绍 DMTDD 的功能、概念、实现原理,并举例说明搭建过程和管理方法。

DMTDD 概述

DM 透明分布式架构旨在提供具有分布式特性的可扩展、高可用、高并发数据库解决方案,以满足具有高并发、大规模数据存储、业务快速扩张等特征的用户业务对数据库的要求。

DM 透明分布式架构除提供分布式计算架构特有的数据多副本、良好的横向扩展等能力外,相对于互联网厂商提供的分布式数据库技术方案,本架构还具有全 SQL 支持、完整的事务支持、与已有单机架构兼容,对应用透明等特点。

DMTDD 由计算层、日志层、存储层目录服务器构成。其中,日志层、存储层和目录服务器的各组件共同构成分布式文件系统 DFS。架构如下图所示:

DM 透明分布式数据库架构

DMTDD 是指在分布式文件系统 DFS 基础上,将计算层部署为 DMDSC 集群、DM MPP 集群或单机数据库的分布式数据库,即“DFS+DMDSC”、“DFS+DM MPP”或“DFS+单机”三种组织形式。其中,计算层部署为 DMDSC 是 DMTDD 中一种典型的应用场景,本文均以“DFS+DMDSC”架构为例进行介绍。

下面详细介绍 DMTDD 相关的计算层、日志层、存储层和目录服务器。

  • 计算层

由 DM 数据库服务器面向用户提供并发的 SQL 服务,每一个节点都是一个数据库服务器(DS,Database Server)。例如,如果计算层是一个 DMDSC 集群,那么每 DM8 透明分布式数据库一个 DS 则对应 DMDSC 集群中的一个实例。计算层技术是基于 DM 共享存储集群技术发展而来,因此继承了以下功能:

  • 完整的 SQL 标准支持:包括复杂关联查询、存储过程、包、触发器、视图、序列等其它分布式数据库无法支持的特性。
  • 多点写入:每个 DS 节点都提供完整的数据访问服务,能够支持增删改查请求,并发的写入操作可以分散到多个节点。
  • 强一致性:DS 节点间通过缓存交换技术,可以保证跨节点的数据强一致,在此基础上,能够支持跨节点的多版本并发控制和完整的事务隔离级。
  • 日志层

由具有容灾能力的日志服务器 DRS 和日志归档服务器 DRAS 构成。 DRS 负责从 DS 实时接收数据变更日志,完成日志的存储和访问服务,并向存储层转发 REDO 日志。当备 DRS 出现异常的情况下,DRAS 负责接收来自主 DRS 的日志进行备份归档,并承担在主 DRS 异常重启或者备 DRS 切换成主 DRS 的过程中进行日志同步的作用,保证主 DRS 缺失的日志可以补足,从而保证数据的一致性。

相对于其他厂商的分布式数据库方案,本架构设计独立的日志层,能够较好地实现日志负载的独立处理,避免日志写入对计算层和数据存储层产生资源争用。同时,独立的日志层设计能够简化存储层的逻辑,改善存储层的处理性能。

  • 存储层

存储层是一个支持多副本的分布式存储系统,包含多个存储服务器 DSS,主要提供数据存储服务,按照 DRS 转发的 REDO 日志更新数据。

存储层支持持续的数据页更新,且数据页更新是基于 REDO 日志回放机制,而非传统数据库的检查点数据页刷盘机制,因此在 CPU 资源占用、内存带宽占用、资源峰谷差异等方面具有更好的表现。

  • 目录服务器

除计算层、日志层和存储层三个主要组成部件外,本架构还包含一个独立的目录服务器 DCS,负责提供整个分布式集群的元数据信息,主要包括集群的拓扑和数据副本的分布信息。由于 DCS 承担负载较小,因此采用单一节点即可满足性能要求。从高可用的角度来看,DCS 短时故障也不会影响整体系统运行,因此 DCS 可以用一般的高可用方案,如 HA、主备等即可满足要求。

DMTDD 主要特点包括

  • 可扩展:计算层、日志层和存储层均可按需扩展。
  • 高可用:个别计算节点和存储节点出现故障不影响整个系统正常提供服务;日志服务器和目录服务器也具有主备容灾能力。
  • 高并发:可配置多个计算节点同时提供数据库服务。
  • 透明性:对用户透明,用户使用时基本与单机数据库一致。

DMTDD 使用环境

部署 DMTDD 集群所用到的硬件和软件环境。

软硬件环境 环境介绍
主机(多台) 内存:2 GB 以上;
网卡:双网卡;提供内部网络和外部网络服务;
用于部署数据库服务器、存储服务器、日志服务器、日志归档服务器、目录服务器、
后台数据库,以及其他 DMCSS、 DCS 守护进程、监视器等。
操作系统 Linux、Unix、Windows 等。
DM 数据库软件 DM 8.0 及以上版本
其他 DM 软件 dmserver、 dminit、dmasmcmd、dmasmsvr、dmasmtool、dmcss、dmcssm 等;
软件位于 DM 数据库安装目录 …/dmdbms/bin 文件夹内

DMTDD 典型部署

根据 DM 数据库分布式计算架构设计,用户可根据需要,在单个机房内,分别对存储层、日志层和计算层各自独立扩展,满足业务的横向扩展需求。为了满足用户的容灾需求,本节特给出典型的 DMTDD 架构图,即“DFS+DMDSC”的组织形式。如下图所示:

DMTDD 架构的多副本 DSC 集群

用户的数据层节点,由于不要求实时的副本一致性,因此数据节点可以分散在多个机房,只需保证每个数据的副本不在同一机房内存放即可。日志服务器采用高可用方案,采用主备 DRS 模式,实现自动故障切换,即当主 DRS 出现故障时,备 DRS 会自动切换为主 DRS,继续对外提供 DRS 服务。目录服务器也采用高可用方案,采用主备 DCS 模式,实现自动故障切换。

DMTDD 实现原理

DMTDD 采用了计算与存储分离的系统架构,通过计算节点对外提供分布式数据库服务,依托 DMDSC(DM Data Shared Cluster,达梦共享存储集群)技术,支持多点读写。在存储层,通过多机分布式存储,实现数据多副本和高可用。

计算与存储分离

为了克服传统数据库系统中将计算和存储耦合在一起导致的瓶颈问题,DMTDD 采用了计算与存储分离的架构。与传统的计算和存储耦合的架构相比,这种新型架构有几大特点:

  • 硬件成本降低
  • 系统性能提高
  • 扩展性增强
  • 可弹性伸缩

计算存储耦合与分离对比

数据划片

数据划片是对数据库数据文件进行逻辑划分和物理分配的过程。DMTDD 将数据文件按照特定大小进行划片,每个数据分片称作一个区块 (Region),存储在不同的存储服务器 (DSS) 中。同一区块可以存储一份或多份,存储在不同存储服务器上的同一区块,互相称为副本。根据粒度的不同,区块分为宏区(Great Region,简写为 GR)和微区(Micro Region,简写为 MR)两个级别。前者主要用于用户数据的副本管理;后者主要用于系统数据的副本管理。区块是维护数据副本的基本单元。

为了数据的安全,DMTDD 规定同一个区块的多个副本必须分散存储在不同容灾域的存储服务器上。当一个区块的某个副本出现故障时,其他的副本若仍然可用,即可保证数据的可用性、完整性和系统的可靠性。例如,将完整的数据文件 R 划分为 4 个区块 R1、R2、R3 和 R4,每个区块保持两个副本。两套副本分别存储于 DSS1、DSS2、DSS3 和 DSS4 服务器中。如下图所示:

数据划片流程图

容灾机制

容灾域 (Fault Domain,FD) 是一组 DSS 的逻辑集合。一个 DMTDD 系统中至少包含两个容灾域。为了让 DMTDD 具有容灾能力,即在任何存储服务器故障的情况下,都不影响整个分布式系统的可用性,DMTDD 使用容灾域来管理存储服务器 DSS。为了避免 DSS 上数据冗余,DMTDD 在分配副本时采用容灾域互斥算法,同一区块的不同数据副本必须存储在不同容灾域的存储服务器上。

采用容灾机制,当某个副本失效,甚至某个容灾域内所有 DSS 全部失效时,只要故障的副本数或容灾域数不超过文件的副本数,就不会影响整个 DMTDD 系统的数据访问。例如,一个 DMTDD 系统包含 6 个存储服务器、3 个容灾域,数据文件副本数为 3,则即使有两个容灾域故障,整个系统仍能正常运行。

数据存储管理

DMTDD 通过 DCS 创建和扩展文件。扩展文件时,DCS 根据指定区块大小将扩展的文件划分为多个区块,再根据容灾域互斥算法将每个区块映射到多个不同容灾域的 DSS 中,实现数据的分布式存储。如下图所示:

分布式存储管理

数据文件和区块的分布拓扑信息保存在 DCS 中,当 DRS 需要这些信息时会从 DCS 获取并缓存在本地。

日志管理

日志服务器 DRS 主要承担 DS 传入的日志的快速持久化工作,即将 DS 发送过来的 REDO 日志保存到磁盘(DRS 所在机器的本地磁盘)。由于数据库日志的写入基本是顺序写,因此性能预期会非常快。另外,DRS 还负责一些消息转发以及日志拆分和分发工作,总体 CPU 资源消耗也不大,因此在集群中根据计算节点的个数来决定采用单一或多个日志组来为全体 DS 和 DSS 服务。

DRS 处理日志拆分和分发工作时,将收到的 DS 日志按记录拆分,然后根据要修改的数据页信息(包括表空间 ID、文件号和页号)查找文件和区块的拓扑信息,以确定记录要修改的数据页分布在哪些 DSS,并将处理后的记录填充到对应 DSS 的缓冲区并发送。

存储服务器 DSS 收到 DRS 发送的日志后直接执行回放完成数据页的更新,并采用异步方式向 DRS 反馈数据副本的版本推进信息,因此 DSS 间实现了良好的无状态管理,不需要再进行信息交换。日志管理流程如下图所示:

日志管理流程

微信扫码
分享文档
扫一扫
联系客服