跳转至

架构导论

本章是SeaboxMPP数据库系统架构的深入阐述。

SeaboxMPP数据库通过多个服务器的分布式负载来存储和处理海量数据,用户看到的逻辑数据库是由多个单一seaboxsql数据库组成的集合,所有节点共同工作形成整体的数据库集群。

图1-整体架构图

整个SeaboxMPP数据库集群中,分为以下部分:

调度层

SeaboxMPP数据库系统的入口层,同时负责整个集群的管理和全局事务的管理。内部包括:用户连接并提交SQL语句的seaboxsql数据库实例,scdcs一致性协议组件,gtm全局事务管理器组件,monitor管理监控器组件。

SeaboxMPP支持多Coordinator节点(或实例)部署,多个节点均可作为集群入口,完全对等。多个节点之间通过一致性协议SCDCS进行全局信息管理,如全局锁、各组件运行状态等。

coordinator实例负责用户SQL语句的解析、优化,调度集群中其他计算节点executor的工作负载;同时集群的高可用也由coordinator实例管理维护。

GTM负责集群全局事务管理,包括事务ID,一致性时间服务等。

Monitor组件负责所有组件状态的监控与维护,异常组件的高可用切换等。

计算层

SeaboxMPP数据库真正进行数据处理或计算的节点集合;executor处理后的数据存储到分布式存储或本地文件系统中。单个计算节点上可部署多个seaboxsql实例。

seaboxsql计算实例支持传统的数据库行执行器和基于新一代CPU指令集的向量计算执行器。

集群内部计算实例之间的互相通信及数据传输,数据分布、重分布等均通过网络层InterConnection实现。

存储层

SeaboxMPP数据库集群负责数据存储的节点集合。SeaboxMPP数据库支持分布式存储与计算节点本地存储2种架构:

  1. 当存储介质为本地存储时,集群整体为share-nothing架构,此时计算实例与本地存储耦合,节点之间无任何资源共享,不同节点之间的实例数据通过副本冗余机制保障高可用,副本之间通过WAL日志同步保持一致性;

  2. SeaboxMPP支持ceph或其他分布式存储产品通过计算节点mount方式的存算分离部署架构,分布式存储内部保障数据一致性与高可用。

本章主要针对第1种share-nothing架构进行说明,即计算层与存储层统一的情况。

SeaboxMPP集群数据库是一个纯软件的解决方案,即数据库软件与硬件不耦合。SeaboxMPP数据库可运行在通用的X86架构、ARM架构等多种商用服务器平台上。数据库运行性能取决于其安装所在的硬件环境,对于MPP数据库这种将数据分布在多台服务器的数据库机制,正确选择和配置硬件环境对于获得最佳性能至关重要。

本章将描述SeaboxMPP集群数据库的主要组件概念以及与各个组件相关的硬件注意事项,这些组件包括:

此外,完整的解决方案可能包含ETL服务器用于数据加载,以及用于监控及查询数据库系统负载和性能的监控服务器。

调度层

调度层负责整个集群的管理和所有任务的协调,具体分为Coordinator实例、SCDCS一致性组件、GTM组件。

SeaboxMPP数据库集群管理,各组件功能架构如下:

图2-集群管理

部署时,可通过配置文件中指定不同组件所在的主机名和端口来灵活设计整体部署方案。通常情况下,对于主要负载为较低并发的批量加工场景,可将调度层各组件与计算层executor组件部署到同一节点上;对于主要负载为高并发联机查询的场景,建议调度层与计算层executor分离部署。

Coordinator

Coordinator实例是SeaboxMPP数据库系统的入口点,Coordinator实例进程接受客户端连接并处理数据库用户发起的sql命令。用户可使用客户端程序(如ssql或JDBC、ODBC)通过Coordinator实例连接到SeaboxMPP数据库。

每个Coordinator实例由一个seaboxsql数据库实例和一个monitor实例组成,该seaboxsql实例维护"系统目录"(一组包含关于SeaboxMPP数据库系统本身的元数据的系统表),但是该实例不包括不包含任何用户数据,数据只存在于存储节点上。该seaboxsql实例验证客户端连接,处理传入的SQL命令,在executor实例之间调度工作负载,协调每个executor实例返回的结果,并将最终结果提交给客户端程序。

因为Coordinator实例不包含任何用户数据,其磁盘负载很小;而Monitor组件是一个负责监控和调度各个组件的进程,本身不存储任何数据。因此,Coordinator实例仅需要一个快速的专用CPU来处理连接和生产执行计划,通常需要规划额外的空间用来加载文件及备份文件,特别是在生产环境中。此外,有客户可能会将在Coordinator节点上运行ETL和报表工具,该情况下,则需要更多的磁盘空间和处理能力(包括CPU、内存)。

SeaboxMPP支持部署多个Coordinator实例,这些实例为对等关系,均能提供接入服务。

Coordinator实例最小部署数为2.

Monit组件

每个Coordinator实例均会启动一个Monitor进程负责SeaboxMPP集群各组件所在节点的监控以及组件高可用启停、切换等调度。同一时间,集群中仅有一个Coordinator实例的Monitor工作。

Monitor组件不负责存储组件状态与拓扑信息,这些信息均保存在SCDCS组件中。因此,monitor组件是完全无状态的,当前活跃的monitor发生异常时,通过其他coordinator实例的monitor组件接管来保障高可用。

Coordinator实例高可用

SeaboxMPP数据库集群在部署时可以选择coordinator实例的主机名及端口号。Coordinator实例最小部署数为2,最大支持64。多个Coordinator实例完全对等,每个实例上均存放完全一样的“系统目录”数据。实例之间,通过DDL等语句同时下发来保证各个实例间数据一致。当其中一个实例出现故障时,其他实例仍可继续提供服务;异常实例恢复后,可自动从状态正常的实例同步数据,最终达道实例数据完全一致的状态。

Coordinator实例高可用及自愈恢复流程如下图:

图3-Coordinator节点高可用

GTM组件

GTM(全局事务管理器)是SeaboxMPP数据库集群负责分布式事务机制的核心组件,是可独立部署的分布式程序。GTM主要负责集群事务ID、分布式锁的维护。集群初始化时,可指定多个GTM节点;集群正常运行时仅一个GTM处于工作状态,其他GTM实例在当前实例发生异常时接管服务。

GTM运行节点上不存储任何数据,仅作为独立进程提供快速的事务相关信息高速缓存服务;其持久化数据存储在SCDCS一致性服务中,即GTM自身为无状态的。

GTM不占用存储空间,仅需一个CPU提供事务ID与全局锁的维护。通常情况GTM服务与Coordinator服务部署在同样的节点上。

生产环境中通常部署2-3个GTM实例即可。

图4-GTM组件架构

GTM高可用

因GTM服务本身的无状态属性,当Monitor服务监控探测当前GTM服务状态异常时,立即启用其他GTM服务接管。接管时,从SCDCS服务中获取持久化数据。具体过程如下:

图5-GTM高可用

SCDCS组件

SCDCS是SeaboxMPP数据库用于全局配置信息与状态发现的分布式一致性服务组件。SCDCS由多个节点相互通信构成整体对外服务,每个节点都存储了完整的数据,并且通过Raft协议保证每个节点维护的数据是一致的。

单个SCDCS实例架构如下:

图6-SCDCS组件架构图

在正常运行的状态下,SCDCS集群中会有一个leader,其余的成员实例都是followers。leader向 followers同步日志,保证数据在各个实例上都有副本。leader还会定时向所有的成员发送心跳报文,如果在规定的时间里follower没有收到心跳,就会重新进行选举。

客户端所有的请求都会先发送给leader,leader 向所有的followers 同步日志,等收到超过半数的确认后就把该日志存储到磁盘,并返回响应客户端。

每个SCDCS服务有三大主要部分组成:raft实现、WAL日志存储、数据的存储和索引。WAL会在本地磁盘上存储日志内容(wal file)和快照(snapshot)。

SCDCS负责以下SeaboxMPP数据库配置信息的一致性维护:

  • 集群所有的组件信息,集群初始化时即全部确定,Monitor组件以该信息监控所有组件,同时coordinator实例也以该信息维护系统表

  • 每个组件定期注册,作为判断组件是否在线的依据

  • 记录集群中所有节点(主机)的状态

  • 需要全局可见的控制信息,如事务ID等

单个SCDCS实例运行时会占用约1GB内存及少量CPU,磁盘空间因保存WAL日志需确保100GB的使用空间。通常SCDCS部署时,建议与Coordinator实例部署在相同的节点上。

SCDCS涉及一致性协议选主过程,需要考虑过半数原则,通常建议为奇数。生产环境中,一般部署3节点即可。

SCDCS高可用

单个或少数SCDCS实例发生故障或节点异常时,剩余多数节点认可继续提供一致性服务,确保集群状态正常。

当异常实例或节点恢复能力时,通过当前SCDCS集群leader实例的snapshot与WAL日志来同步数据状态,同步完成后加入对外服务。

计算层

本文档主要针对存储层为executor节点本地文件系统的部署情况,即此时计算层与存储层统一提供服务。

SeaboxMPP数据库中,executor节点是数据存储和大多数查询处理执行的地方。用户表及其索引分布在SeaboxMPP数据库集群的可用executor中;每个executor包含整体数据的不同部分。SeaboxMPP数据库支持单个executor节点上部署多个executor实例,每个executor实例是executor节点上的seaboxsql数据库服务器进程。用户不直接与SeaboxMPP数据库系统中的executor直接交互,必须通过coordinator实例进行交互。

部署时,须依据整个集群的硬件配置规划每个executor节点的实例数,该实例数量通常由CPU核数决定。例如,如果executor节点为两路CPU,则建议单节点部署2个或4个executor实例;如果executor节点为四路CPU,则每个节点可以部署三个、六个或十二个executor实例。

可通过性能测试确定所选硬件平台的最佳executor实例数。

Executor节点高可用

部署SeaboxMPP数据库时,可以选择配置镜像executor实例。当主executor实例不可用时,executor镜像机制保障数据库查询切换到备executor。executor镜像是SeaboxMPP数据库支持生产系统持续运行的关键机制。

镜像executor实例必须始终存储在与主executor实例不同的executor节点上。SeaboxMPP集群部署过程中,初始化集群可使用默认的节点组配置方式(nodegroup)或者自定义配置。Nodegroup默认配置为:将镜像executor实例放置在另一个主executor实例所在节点上的存储上。

图7-Executor节点架构

Executor切换及恢复

SeaboxMPP数据库启用executor镜像机制时,如果主实例变得不可用,则系统自动切换到镜像实例。如果一个executor实例或节点发生故障,只有在剩余可用executor节点上的实例都可用时,数据库才能继续运行。

如果coordinator节点无法连接到某个executor实例,Monitor组件会在SCDCS组件和SeaboxMPP数据库集群的系统表中将该executor实例标记为无效。在该executor重新联机之前,实例将保持无效并停止运行。在该节点操作系统启动并正常运行后,Monitor组件会调度该故障节点的自动恢复,恢复过程中会从该executor实例的可用副本实例将新增及变化的数据增量同步过来,最终主executor实例与镜像executor实例数据完全一致后,状态切换为正常。

Executor节点硬件配置说明

不考虑硬件平台,SeaboxMPP数据库生产环境的处理节点(即executor)通常按照本节中描述的方式配置。 executor节点承担大部分数据库的处理,因此executor节点需合理配置以获取尽可能好的性能。SeaboxMPP数据库的性能取决于集群中最慢的executor节点。因此,确保运行SeaboxMPP数据库的底层硬件和操作系统都在其最佳性能级别运行是非常重要的.

  • 建议集群中的所有executor节点具有相同的硬件资源和配置

  • 建议executor节点仅用于SeaboxMPP数据库运行,为了获得最佳的查询性能,尽量避免数据库与其他应用程序争夺机器或网络资源。

Executor节点磁盘配置说明

通常每个executor映射到一个逻辑磁盘。逻辑磁盘包含一个主executor实例的数据库文件系统(或镜像executor实例的数据库文件系统),其通过I/O通道或磁盘控制器访问物理磁盘池。逻辑磁盘和文件系统由操作系统提供。

  • 为确保性能与存储层面高可用,尽可能使用RAID阵列

  • Executor节点的磁盘配置与要运行在SeaboxMPP数据库上的应用数据量与性能要求相关,具体参照“容量估算”章节。

图8-Executor实例磁盘使用示例

不同的硬件平台中,不同的RAID配置提供不同的性能和容量级别。SeaboxMPP支持多种硬件平台及操作系统。安装及部署SeaboxMPP数据库前,建议从产品技术支持处获取更多配置推荐。

Executor节点内存配置说明

内存是计算机中重要的部件之一,它是CPU与磁盘存储的数据进行沟通的桥梁。Executor实例所有程序运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。内存的选择总体上来说是越大越好,尤其是单个实例需要处理大数据量的过滤、关联、聚合等计算时。

通常建议生产环境中,SeaboxMPP数据库集群Executor节点内存不小于128GB。

Interconnect组件

Interconnect组件是SeaboxMPP数据库的网络层。Interconnect组件负责executor实例之间的进程间通信,是该通信所依赖的网络基础设施。建议Interconnect使用标准的万兆网络交换结构。

默认配置下, SeaboxMPP数据库Interconnect组件使用具有控制流的UDP (User Datagram Protocol)协议用于通过网络发送消息的相互通信。SeaboxMPP程序对UDP进行额外的分组校验和检查,因此可靠性相当于TCP协议,性能和可扩展性超过TCP。

Interconnect组件高可用

通过万兆网络交换机的互备机制,以及交换机到SeaboxMPP数据库各个节点的冗余网络连接,可实现Interconnect组件的高可用。

存储层

本文档主要针对存储层为executor节点本地文件系统的部署情况,即此时存储层与计算层统一提供服务。

ETL服务器

SeaboxMPP数据库通过其外部表功能支持快速、并行的数据加载。通过使用外部表和SeaboxMPP数据库的并行文件分发服务(scfs)相结合,用户可实现数据库最大的并行和负载带宽。许多生产系统部署指定的ETL服务器以进行数据加载,这些机器仅运行scfs服务,但不运行SeaboxMPP数据库实例。此外,SeaboxMPP数据库的kafka-flow组件,支持从kafka流式加载数据到数据库集群中,该组件也支持将Oracle、MySQL等数据库通过CDC机制获取到变动的日志数据经kafka同步至SeaboxMPP数据库对应的表中,该组件通常也允许在ETL服务器上。

scfs文件服务支持SeaboxMPP数据库所有executor节点并行获取数据,因此提供极佳的读取速率,对于分隔文本格式的文件,平均加载速率可达350MB/s,对于csv格式的文件加载速率可达200MB/s。因此,建议运行scfs的ETL服务器与SeaboxMPP数据库规划为同一网络平面,也使用万兆网络连接。

ETL服务器可运行多个scfs服务,并为每个服务划分均衡的数据文件。

一些像企业数据仓库、大数据平台的应用系统中,单个ETL服务器可能无法满足用户海量数据的入库,尤其是一些实时入库场景,此时可考虑部署多个ETL服务器。

监控及图形化管理工具服务器

SeaboxMPP数据库提供图形化集群管理工具SCMS与图形化数据库管理工具sdAdmin,SCMS提供图形化安装部署、初始化、扩容、节点替换等集群管理功能,也支持对节点资源使用情况、数据库运行状态的可视化监控界面;sdAdmin是一个B/S架构的数据库对象管理工具,支持SQL编辑、执行,支持各种数据库对象,如数据库、模式、表、视图、存储过程等对象的创建、修改、查看功能。

通常用户在安装SeaboxMPP数据库集群后,使用上述图形化工具来完成数据库的日常运维与管理。

SCMS组件与sdAdmin组件均为B/S架构,本地存储较少数据,通常可部署在虚拟机环境或容器环境中,但通常与SeaboxMPP数据库位于同一网络平面。