Klustron(原KlustronBase) 系统架构
Klustron(原KlustronBase) 系统架构
01 前言
Klustron 昆仑分布式数据库集群(下文简称 Klustron)是一个分布式关系数据库管理系统,面向 TB 和 PB 级别海量数据处理,以高吞吐量和低延时处理海量数据高并发读写请求。
它提供健壮的事务 ACID 保障,高效易用的分布式查询处理,高可扩展性,高可用性和透明的分库分表数据处理功能,业务层和终端用户无感知的水平扩展能力,是典型的 NewSQL 分布式数据库系统。
应用软件开发者按照使用单节点关系数据库相同的方法使用昆仑数据库,就可以得到所有上述 NewSQL 数据库的优点,完全不需要考虑数据的分区方式等存储细节。
这样,应用开发者就可以非常快速的开发健壮可靠的,高可用和高可扩展的信息系统,来处理PB级海量数据。所有的海量数据管理的挑战和困难都由昆仑系统来解决,从而大大降低了开发分布式系统的时间成本和资金成本和技术难度,并且全面提升其产品质量,大大加快应用开发和变更过程中的上线进度。
02 架构介绍
一个 Klustron 集群有3类组件构成:一个或者多个计算节点,一个或者多个存储 shard,一个元数据集群,以及集群管理工具。
KunlunBase(也叫:Klustron) 的计算节点(Klustron-server(也叫:Klustron-server)) 负责接受应用软件端的连接请求,验证请求合法性后建立连接;以及从已经建立的连接中接受SQL查询请求,执行请求,然后后返回查询结果。
三个或者更多个存储节点组成一个存储集群(storage shard,简称shard),每个shard 存储着一部分用户表或者表分区,不同shard的数据没有交集;
每个KunlunBase集群有若干个计算节点和若干个shard组成。一个 shard 的主节点接受来自计算节点的读写请求,执行请求并返回结果给计算节点;启用了备机读功能时,shard 的备节点可以接收和处理来自计算节点的只读请求,常用于做数据分析和报表。
2.1 计算节点
Klustron 的计算节点(Klustron-server) 负责接受应用软件端的连接请求,验证请求合法性后建立连接;以及从已经建立的连接中接受SQL查询请求,执行请求,然后后返回查询结果。
一个Klustron的每个Klustron-server节点 含有每个数据表以及其他数据库对象(索引、视图、物化视图、序列、存储过程/函数、用户/角色和特权等)的元数据,但是不存储用户数据,因而可以随时按需增减Klustron-server节点。用户数据存储在存储 shard 中。
用户可以根据工作负载来增减计算节点,每个计算节点彼此平等和独立,没有依赖关系,都可以处理用户连接和读写请求。
计算节点支持 PostgreSQL 连接协议和 MySQL 连接协议接收和验证用户的连接请求,验证通过后,就接收和处理连接上发来的查询并返回结果给客户端。
执行一个 SQL时,计算节点解析该语句,然后对它做分布式查询优化,然后通过与后端存储 shard 做交互来完成分布式查询执行。交互的方法就是根据 SQL 语句的需要和数据表分区在后端 shard 的分布信息,为相关的后端存储 shard 生成 SQL 语句。
计算节点会并发地发送 SQL 语句到存储集群,如果执行的 SQL 语句是 SELECT 或者 INSERT/DELETE/UPDATE...RETURNING 而不是简单的 INSERT/DELETE/UPDATE , 那么计算节点发送语句后还会接收存储集群返回的部分结果并且合并处理所有后端存储 shard 返回的结果,形成最终的查询结果,返回给客户端。
Klustron 的计算节点Klustron-server 基于 PostgreSQL 开发,当前 1.0/1.1 版本基于PostgreSQL-11.5,未来会升级到更新版本的PostgreSQL。为了实现Klustron的各种核心功能,例如自动的 DDL 同步及复制、分布式事务处理,分布式查询处理、全局死锁处理,并行查询处理等高级功能,我们在 PostgreSQL 源代码中新增和修改了大量代码,Klustron 各模块和组件的自研代码总量超过100万行。
我们的代码保持了很好的模块化,方便将来可以继续跟随 PostgreSQL 版本更新。
2.2 存储集群(shard )
Klustron-storage 是 Klustron 的存储节点,它是我们基于 percona-server-8.0 深度优化开发的 MySQL 分支。用户必须使用 Klustron-storage 软件组建 Klustron 的存储集群和元数据集群,因为 Klustron 集群需要的关键功能只存在于 Klustron-storage 中,并且它还包含了社区版 MySQL-8.0 XA 事务处理的所有容灾缺陷的修复;最后,Klustron-storage 在 XA 事务处理方面比社区版 MySQL 有大幅性能优化。
每个存储 shard 存储着一部分用户表或者表分区,每个 shard 的用户数据子集没有交集;每个存储 shard 是一个 binlog 复制集群,通过标准的 MySQL row based binlog replication 和Klustron特有的 Fullsync 强同步机制 来实现金融级数据一致性,确保RPO=0;同时 Klustron 自研的高可用机制 Fullsync HA 可以监测每个shard的主节点运行状态并且在发现主节点故障时自动完成主节点选举和主备切换,确保 RTO小于30秒。
一个 shard 的主节点接受来自计算节点的读写请求,执行请求并返回结果给计算节点;启用了备机读功能时,shard 的备节点可以接收和处理来自计算节点的只读请求。
用户可以根据数据量的增加和减少来增加和较少存储 shard,数据会自动均匀分散到所有 shard 上面,从而达到自动和透明的高可扩展性。
2.3 元数据集群
元数据集群也是一个由 Klustron-storage 实例组成的binlog 复制集群,并且也基于Fullsync 和Fullsync HA技术实现强一致性和高可用。一个元数据集群存储着一个 Klustron 集群的元数据,可以被多个数据库集群共用。元数据集群存储这些Klustron集群的拓扑结构、节点连接信息、DDL日志,commit log,和其他集群管理日志。
2.4 cluster_mgr 集群
Klustron 的 cluster_mgr 集群负责维护正确的集群和节点状态,实现集群管理、集群逻辑备份和恢复, 集群物理备份和恢复、水平弹性伸缩等功能。所有这些功能都以API的形式提供给用户,方便用户在脚本或者各种软件中调用。 同时,Klustron 自带的 XPanel DBA GUI 工具软件 也是通过调用 cluster_mgr API 来实现其功能。
cluster_mgr 高可用集群基于raft技术,确保主节点宕机后,集群备节点可以立刻发现并选举出新的主节点提供集群管理工作。DBA可以管理cluster_mgr集群 ,完成高级cluster_mgr集群管理功能。
一个cluster_mgr 集群绑定一个元数据集群并与之紧密协作,为一个或者多个Klustron 集群提供服务。这里绑定的意思是指一个cluster_mgr集群使用一个固定的元数据集群,一个元数据集群只能被同一个cluster_mgr集群使用,二者是一对一的。
2.5 辅助工具
1、XPanel
Klustron 提供了 XPanel GUI 工具软件,让 DBA 通过点击鼠标就可以轻松完成所有的数据库运维管理工作。
2、prometheus 和 Grafana 监控集群节点运行状态
Klustron 在 bootstrap 时自动安装 prometheus 和 Grafana 以便 DBA 可以使用 Grafana 监控 Klustron 集群各个节点的实时运行状态。
3、ElasticSearch + Kibana 收集和检索集群节点日志
如果用户安装了 ElasticSearch 并且在 bootstrap 时候设置了其访问方式的话,Klustron 的相关模块还会自动与 ES 相关模块协作,让 ES 可以收集 Klustron 集群所有节点的运行日志,方便用户通过 Kibana 检索和查看这些节点的日志。
4、Klustron 具备完备的数据导入导出工具集
这些工具方便用户轻松地用 MySQL 和 PostgreSQL 数据库实例的全量数据备份完成静态数据迁移,或者用其全量数据备份加上流式增量数据更新完成热数据迁移和复制。同时 Klustron 可以与常见的第三方数据迁移工具协作,从常见的数据库系统(例如 Oracle,SQL Server,TiDB 等)完成静态全量数据迁移和动态的热数据迁移。