数据库管理-第250期 深入浅出多主多活数据库技术- Cantian存储引擎(一)(20241009)
作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Pro: Database(Oracle与MySQL)
PostgreSQL ACE Partner
10年数据库行业经验,现主要从事数据库服务工作
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP、年度墨力之星,ITPUB认证专家、专家百人团成员,OCM讲师,PolarDB开源社区技术顾问,HaloDB外聘技术顾问,OceanBase观察团成员,青学会MOP技术社区(青年数据库学习互助会)技术顾问
圈内拥有“总监”、“保安”、“国产数据库最大敌人”等称号,非著名社恐(社交恐怖分子)
公众号:胖头鱼的鱼缸;CSDN:胖头鱼的鱼缸(尹海文);墨天轮:胖头鱼的鱼缸;ITPUB:yhw1809。
除授权转载并标明出处外,均为“非法”抄袭
之前在参天的邀请下,通过华为稼先社区在华为内部做了一个与数据库、RDMA和存算分离架构的线上演讲与讨论。时隔一段时间了,还是有必要对参天(Cantian)进行了解。
1 简介
Cantian是一个存储引擎,采用了存算分的离架构,通过分布式缓存技术、事务MVCC机制、多主集群高可用等关键技术,可以让使能普通的单机数据库,让其变得具有类似Oracle RAC的多读多写能力。Cantian引擎无需修改已有数据库的实现,可以以无侵入的方式被MySQL等数据库加载运行。Cantian引擎的多读多写需要基于共享存储来构建。任何能够提供共享存储并可以提供标准文件接口的存储系统都可以进行对接。
Cantian的主要特性:
-
多读多写
-
集群管理:集群成员状态维护、集群异常处理、仲裁等
-
支持与MySQL对接:与Innodb兼容
-
支持MySQL共享系统表
-
支持滚动升级
-
支持备份
Cantian于2023年8月25日华为数据存储用户精英论坛上正式开源,使用木兰开源许可协议。代码仓库:https://gitee.com/openeuler/cantian
目前Klustron数据库已发布Cantian伙伴版本。
2 引擎构成
Cantian引擎主要由五个主要部分组成:
-
CTC(Cantian Connector):负责支持Cantian引擎作为分布式数据库的存储引擎插件,支持DDL、DML、事务等数据库功能,兼容分布式数据库的生态应用。
-
CMS(Cluster Manager Service): 负责集群管理。
-
多读多写模块:Cantian引擎是基于共享存储的多写集群,各个节点在架构上对等,多读多写模块确保从任何一个节点都可以对数据库做DDL/DML/DCL等操作。任何一个节点做的修改,在满足隔离级别的要求下,其他节点都可以看到。所有计算节点共享和读写存储上同一份用户数据。
-
存储访问层:Cantian引擎通过共享存储提供的接口,例如标准文件接口,对数据进行读写操作,同时借助文件系统提供的锁机制进行互斥。
-
工具:包括备份恢复工具:将数据库下的所有表导出成SQL语句或者表格文本,逻辑恢复时再将文本格式的逻辑数据文件导入到数据库中。运维管理工具:各自命令行等。
3 引擎架构
架构中黄色为Cantian核心模块,蓝色部分不包括在Cantian开源代码中,需要由Cantian开源的使用者,例如数据库厂商提供。
-
①为和MySQL对接的Connector部分,这部分和MySQL在一个进程空间运行,主要作用是接受MySQL的请求,并通过IPC和Cantian进程进行通信。(这部分代码完全遵守MySQL的开源协议进行开源)
-
②提供ctmgr由第三方管理Agent调用,上报到管理平台
-
③提供ctbackup工具,语法上最大兼容extrabackup。由备份软件调度完成备份操作。
-
④提供安装部署,容灾配置等脚本。由管理平台调用完成安装扩容容灾调度等操作。
-
⑤提供安装容器相关指导。资源发放管理,容器化管理平台。
-
Cantian引擎,有Cantian业务进程和集群管理CMS进程组成。每个Cantian进程都会对应一个CMS进程来负责监管Cantian运行状态、脑裂仲裁以及故障拉起。当CMS故障时有watchdog拉起。多个服务器上运行的Cantian之间的高速网络通信。Cantian访问共享存储,获取数据。
Cantian的Global Cache机制和老版本的RAC类似,确定某个缓冲块的Master实例,当一个实例拥有需要访问的对应缓冲块时则可直接访问,否则需要向Master实例查询该缓冲块的位置,Master通知该缓冲块缓冲的实例将其发送给需要访问该数据的数据库实例。
关于更多架构相关内容可以查看代码仓库中的《技术白皮书》,有很详尽的介绍。
4 文件分布
在Cantian中的文件位置和Oracle RAC中类似,都是存放在共享存储中的,但是:
-
集群中每个实例独占访问log、undo、temp等文件,只有故障恢复时,集群中的其他实例才能读取
-
控制文件、system、users等表空间是可以在集群中并发读写的
5 分布式MVCC
-
segment(段)管理
根据上一节文件分布可知,每个实例拥有自己的undo表空间,即拥有自己独立的undo段管理和回收机制,一般只能进行本实例读取和修改,不进入data fusion,实例之间互不干扰。
Cantian使用SMON线程后台是在当前实例的undo段范围内进行shrink操作。 -
txn管理
(xmap, xnum) xmap -> (seg_id, slot)
事务xid随着seg_id的分离而分离,根据当前事务xid中的seg_id可以快速定位到事务所在的实例和实际实例内的segment。
每个实例的undo下面具有独立的事务表,事务分配按照单机分配回收机制进行,事务在实例间是不能复用的。 -
分布式MVCC
集群模式下一致性读场景,某个实例要查询的页面可能在其他实例,甚至正在被其他实例上的事务修改。由于实例之前的undo和事务是隔离的,当前查询无法直接在本地完成CR页面的构建,如果依靠其他实例将需要的undo页面通过DCS传输到本地,则效率太低。考虑采用传输CR页面的方式,由相关实例后台参与CR页面的构建。
当MVCC需要一个经过多个实例多次变更的PRE-IMAGE的时候,在Cantian引擎里构建过程相对复杂,需要通过xid确定undo对应实例信息,再通过多个实例一级级的向前传递,最终才能完成构建对应CR页面。根据前面Global Cache机制相关内容,如页面不在本地,则在owner所在实例构建CR页面。
6 限制/要求
针对本期涉及的内容,Cantian有以下一些限制或要求:
-
目前发布的版本暂时仅支持2节点部署模式。
-
计算节点之间需要稳定高速的通信网络以交换page、锁等资源。
总结
Cantian作为一个存储引擎,类似于Oracle RAC的ASM,实现让原来单点的数据库可以使用高性能高可靠的共享存储,以实现计算性能的横向扩展。
老规矩,知道写了些啥。
本文经 胖头鱼的鱼缸(尹海文) 授权转载。