1 DMTDD概述
DM透明分布式数据库DMTDD(DM Transparent Distributed Database)具有分布式特性的可扩展、高可用、高性能数据库解决方案,以满足具有高并发、大规模数据存储、业务快速扩张等特征的用户业务对数据库的要求。
DMTDD采用计算存储分离的系统架构,实现计算、日志、存储三层分离,可实现各层独立扩展、按需配置设备的特点。
达梦透明分布式架构通过计算节点对外提供分布式数据库服务,依托DMDSC技术,支持多点读写。在存储层,通过多机分布式存储,实现数据多副本和高可用。
DMTDD提供分布式计算架构特有的数据多副本、良好的横向扩展等能力外,相对于互联网厂商提供的分布式数据库技术方案,达梦透明分布式架构还具有全SQL支持、完整的事务支持、与已有单机架构兼容,对应用透明等特点。
计算层:由达梦数据库服务器面向用户提供并发的SQL服务,每一个节点被称为一个数据库服务(DS,Database Server)。该层技术基于达梦共享存储集群技术发展而来,因此可以实现:
- 完整的SQL标准支持:包括复杂关联查询、存储过程、包、触发器、视图、序列等其它分布式数据库无法支持的特性。
- 多点写入:每个DS节点都提供完整的数据访问服务,能够支持增删改查请求,并发的写入操作可以分散到多个节点。
- 强一致性:DS节点间通过缓存融合技术,可以保证跨节点的数据强一致,在此基础上,能够支持跨节点的多版本并发控制和完整的事务隔离级支持。
日志层:由具有容灾能力的日志服务器(RS,Redo log Server)构成,负责从DS实时接收数据变更日志,完成日志的存储和访问服务,并向存储层转发redo日志。
DMTDD架构设计独立的日志层,能够较好将日志负载实现独立处理,避免日志写入对计算层和数据存储层产生资源争用。同时独立的日志层设计,能够简化存储层的逻辑,改善存储层的处理性能。
存储层:存储层是一个支持多副本的分布式存储系统,由多个存储服务器(SS,Storage Server),主要提供数据存储服务,按照RS转发的redo 更新数据。
存储层支持持续的数据页更新,且数据页更新是基于Redo回放机制,而非传统数据库的检查点数据页刷盘机制,因此在CPU资源占用、内存带宽占用、资源峰谷差异等方面具有更好的表现。
除上述主要组成部件外,本架构还包含一个独立的目录服务器(DCS,DM Catalog Server),负责提供整个分布式集群的元数据信息,主要包括集群的拓扑和数据副本的分布信息。由于DCS承担负载较小,因此采用单一节点即可满足性能要求。从高可用的角度来看,DCS短时故障也不会影响整体系统运行,因此DCS可以用一般的高可用方案,如HA、主备等即可满足要求。
1.1 DMTDD 中的术语
数据库服务器(Database Server,DS):对外提供数据库服务,这里指DM8。
日志服务器(Redo log Server,RS):接收DS的远程归档,提供redo日志的存储/访问服务,并负责向数据存储层转发redo 日志。
存储服务器(Storage Server,SS):提供数据存储服务;按照RS转发的redo日志更新数据。
目录服务器(DM Catalog Server,DCS):负责提供整个分布式集群的元数据信息,主要包括集群的拓扑和数据副本的分布信息。
目录配置工具(DCS Tool,DCSTOOL):DMTDD环境配置工具。此工具连接DCS,进行整个分布式环境的搭建设置。DCSTOOL还仿照linux风格命令,提供对分布式系统中文件目录信息的查看。
容灾域(Fault Domain,FD):一组SS的逻辑集合。所有数据副本,都必须在跨容灾域的不同存储服务器。因此,某一个容灾域内的所有SS即使全部失效,也不会影响整个DM分布式系统的数据访问。
日志分组(Rlog Group):将日志来源DS划分为不同的日志组,每个DS仅属于一个组。每个日志组中,配置一个RS服务器,提供日志分发及数据读写服务。
数据库(Database):DMTDD支持共享库DSC和非共享库,使用共享库时,整个DMTDD应属于同一个库,非共享库时,一个DS就是一个库。
库共享文件(Database Share File,DBSF):在一个库中唯一的文件,比如DM DSC环境下的ctl文件和vtd文件。
数据文件(Data File):DS存储在DMTDD中的库文件,服务上的逻辑对象,DS通过文件操作方式对其进行按页访问。与库共享文件统称为逻辑文件。
区块(Region):DMTDD将数据文件按照特定大小进行划片,每个划片称作区块。区块是DMTDD的数据划分及数据处理单元。
宏区(Great Region):维护用户副本数据的区块,其预期数据量巨大,因此区块大小也需要设置巨大。宏区默认值大小为10G,有效值范围为8M~20G。
微区(Micro Region):维护系统数据副本的区块,系统数据量有限,因此单个区块大小不宜设置过大。微区默认值大小为2M,有效值范围为1M~4M。
存储文件(Storage File):DMTDD在SS中实际存储数据的文件,也称为物理文件。
物理分区(PHY Region):按照区块将存储文件进行的分片,存储分区数据的文件数据段;DMTDD会为其分配全SS唯一标识,称为物理分区ID(PHY_ID)。
副本(Copy):区块的存储实例,已经分配用以存储数据的物理分区。
1.2 系统规范
在DMTDD系统中,有如下规范及约束:
- DMTDD中的Rlog Group,SS,RS都有自己的实例名,这些实例名要求全局唯一
- DMTDD中可以有多个Rlog Group
- 一个Database可以有多个DS,这些DS可以分布在不同的Rlog Group
- DMDSC的每个dsc节点必须分布在同一个Rlog Group
- 一个Rlog Group管理多个DS和一个RS
- 一个DS仅能属于一个Rlog Group
- 一个RS仅能属于一个Rlog Group
- 每个RS都可以采用主备模式提供服务
- 一个FD管理多个SS
- 一个SS只能属于一个FD
- 每个RS都可以访问所有的SS
- DMTDD并不是将数据文件全文件的副本作为存储文件,而是将其取区块进行划分,与存储文件中的某一块数据进行映射
- 一个SS只管理一种区块类型(宏区GR或微区MR)
- 一个Region可以有多个Copy;库内同一个表空间内所有文件的副本数必须相同,在创建表空间时指定,系统表空间的副本的个数在初始化库时指定
- 一个Region在一个容灾域内最多只能有一个Copy
- 当一个SS内有多个存储文件时,会顺序为各个文件中的Phy Region分配PHY_ID
- DMTDD中存储的逻辑文件(Database Share File和DataFile),在路径风格上采用Linux风格
- DS和DMTDD对外结构标识逻辑文件时,为了与本地存储的文件进行区分,会在其路径最前面加上$;DMTDD内部显示逻辑文件路径时,不显示$.
- DS/SS/DCS所对应的的页大小必须是一致的
1.3 主要技术指标
- 最大存储空间:PB级
- 最大副本数:10
- 计算节点数:32
- 存储节点数:10000
- 其它指标:同普通单机
2 DMTDD的关键实现
2.1 分布式存储
分布式存储层采用宏区(Great Region)和微区(Micro Region)两个粒度级别作为数据副本维护的基本单元。前者用于主要用户数据的副本管理;后者用于系统数据的副本管理。
如下图所示:
所有数据以GR/MR形式,在SS节点间的分布存储;数据分片是由RS通过数据页的文件和页号等基本信息,通过分片数据的容灾组互斥算法决策分配。
在此基础上,由RS维护数据的分布拓扑信息,并由RS直接向相关SS发送redo日志,SS采用异步的方式向RS反馈数据副本的版本推进信息,因此SS间实现了良好的无状态管理,不需要SS间的信息交换。
采用该设计,允许只要存在一个可用副本,即可提供正常的数据服务,不存在需要集群内大多数GR/MR健康才能提供数据的限制。
2.2 日志管理
日志服务器主要承担DS传入的日志的快速持久化。由于数据库日志的写入基本是顺序写,因此性能预期会非常快。
另外,它还负责一些消息的转化和日志的拆分工作,总体CPU资源消耗也不大,因此在集群中采用单一的RS为全体DS和SS服务。
为保持可靠性,可以配置多个RS,用于接收主RS的远程日志归档,增加日志的可靠性,并在必要时接替主RS的工作。
如下图所示:
2.3 典型部署
根据达梦数据库分布式计算架构设计,用户可根据需要,在单个机房内,分别对数据层和计算层各自独立扩展,满足业务的横向扩展需求。
从容灾需求出发,本架构也便于用户部署为两地三中心模式。如下图所示:
用户的数据层节点,由于不要求实时的副本一致性,因此数据节点可以分散在多个机房,只需保证每个数据的副本不在同一机房内存放即可。
日志服务本身即采用高可用方案,因此日志服务可在每个数据中心分别部署一个节点,实现自动故障切换。
数据库服务在主机房按需部署,在本地和异地备用机房日常无需部署,只需在检测到灾害时,即时启动。