开放代码社区 › Cantian 存储引擎
Cantian 存储引擎
基础设施与运维CCantian 是采用存算分离架构的数据库存储引擎,通过分布式缓存、事务 MVCC 和多主集群高可用等技术,让普通单机数据库具备类似 Oracle RAC 的多读多写能力。它以无侵入方式作为 MySQL 等数据库的存储引擎插件运行,基于共享存储构建,支持集群管理、共享系统表、滚动升级与备份恢复,适用于需要提升数据库并发性能、避免分库分表并缩短故障倒换时间的场景。
仓库地址
https://gitee.com/openeuler/cantian.gitREADME
# Notice: This project has been migrated to [AtomGit](https://atomgit.com/openeuler/cantian)
# 通知: 本项目已经正式迁移至 [AtomGit](https://atomgit.com/openeuler/cantian) 平台
# README<a name="ZH-CN_TOPIC_0000001963217182"></a>

Cantian引擎,是一个存储引擎,采用了存算分离的架构,通过分布式缓存技术、事务MVCC机制、多主集群高可用等关键技术,可以让普通的单机数据库变得具有类似Oracle RAC的多读多写能力。
Cantian引擎无需修改已有数据库的实现,可以以无侵入的方式被MySQL等数据库加载运行。
类似Oracle RAC,Cantian引擎的多读多写,也需要基于共享存储来构建。任何能够提供共享存储并可以提供标准文件接口的存储系统都可以进行对接测试。
**主要价值<a name="section95698263517"></a>**
部署Cantian引擎后,性能可以获得倍数级提升,且无需被动分库分表,故障倒换时间大幅缩减。
**架构简介<a name="section11823171812167"></a>**
Cantian引擎主要由五个主要部分组成:
- CTC(Cantian Connector):负责支持Cantian引擎作为分布式数据库的存储引擎插件,支持DDL、DML、事务等数据库功能,兼容分布式数据库的生态应用。
- CMS(Cluster Manager Service): 负责集群管理。
- 多读多写模块:Cantian引擎是基于共享存储的多写集群,各个节点在架构上对等,多读多写模块确保从任何一个节点都可以对数据库做DDL/DML/DCL等操作。任何一个节点做的修改,在满足隔离级别的要求下,其他节点都可以看到。所有计算节点共享和读写存储上同一份用户数据。
- 存储访问层:Cantian引擎通过共享存储提供的接口,例如标准文件接口,对数据进行读写操作,同时借助文件系统提供的锁机制进行互斥。
- 工具:包括备份恢复工具:将数据库下的所有表导出成SQL语句或者表格文本,逻辑恢复时再将文本格式的逻辑数据文件导入到数据库中。运维管理工具:各自命令行等。
更详细的Cantian引擎架构介绍,请参考对应版本的[《技术白皮书》](https://gitee.com/openeuler/cantian/tree/master/documents)。
**主要特性<a name="section186081955174817"></a>**
- 多读多写
Cantian引擎是基于共享存储的多写集群,各个节点在架构上对等,从任何一个节点都可以对数据库做DDL/DML/DCL等操作。任何一个节点做的修改,在满足隔离级别的要求下,其他节点都可以看到。所有计算节点也都可以共享和读写存储上的同一份用户数据。
- 集群管理
Cantian引擎支持通过CMS(Cluster manager server)进行集群管理,包括集群成员状态维护、集群异常处理、仲裁等。
- 支持与MySQL对接
作为MySQL数据库的存储引擎插件,Cantian引擎支持DDL、DML、事务等数据库功能,兼容MySQL(InnoDB)的生态应用。
- 支持MySQL共享系统表
MySQL8.0默认的系统表元数据存储引擎为innodb,Cantian作为一个存储引擎,也有其系统表元数据,通过修改MySQL初始化流程将系统表的存储引擎改为Cantian,可以使Cantian引擎能够存放MySQL的元数据。
- 支持滚动升级
Cantian引擎支持集群离线方式进行升级(离线升级),也支持在线进行版本升级(滚动升级),从而保证版本升级不影响客户业务的连续性。
- 备份功能
数据备份是容灾的基础,本特性旨在为Cantian引擎提供备份恢复功能,通过合理规划备份方式和备份频率,避免意外状况下的数据损失。
各个特性的实现原理和详细说明,请参考对应版本的[《技术白皮书》](https://gitee.com/openeuler/cantian/tree/master/documents)。
**工程说明<a name="section1990572616234"></a>**
- 编程语言:C
- 编译工程:cmake或make,建议使用cmake
- 目录说明:
<a name="zh-cn_topic_0000001570546425_table12447637174618"></a>
<table><thead align="left"><tr id="zh-cn_topic_0000001570546425_row12448437114615"><th class="cellrowborder" valign="top" width="29.25%" id="mcps1.1.3.1.1"><p id="zh-cn_topic_0000001570546425_p6163124154816"><a name="zh-cn_topic_0000001570546425_p6163124154816"></a><a name="zh-cn_topic_0000001570546425_p6163124154816"></a>目录名称</p>
</th>
<th class="cellrowborder" valign="top" width="70.75%" id="mcps1.1.3.1.2"><p id="zh-cn_topic_0000001570546425_p715135711588"><a name="zh-cn_topic_0000001570546425_p715135711588"></a><a name="zh-cn_topic_0000001570546425_p715135711588"></a>说明</p>
</th>
</tr>
</thead>
<tbody><tr id="zh-cn_topic_0000001570546425_row10766533194814"><td class="cellrowborder" valign="top" width="29.25%" headers="mcps1.1.3.1.1 "><p id="zh-cn_topic_0000001570546425_p14190154554814"><a name="zh-cn_topic_0000001570546425_p14190154554814"></a><a name="zh-cn_topic_0000001570546425_p14190154554814"></a>CI</p>
</td>
<td class="cellrowborder" valign="top" width="70.75%" headers="mcps1.1.3.1.2 "><p id="p92301231105011"><a name="p92301231105011"></a><a name="p92301231105011"></a>执行Cantian引擎测试用例的脚本。</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001570546425_row444883724619"><td class="cellrowborder" valign="top" width="29.25%" headers="mcps1.1.3.1.1 "><p id="zh-cn_topic_0000001570546425_p91902451481"><a name="zh-cn_topic_0000001570546425_p91902451481"></a><a name="zh-cn_topic_0000001570546425_p91902451481"></a>build</p>
</td>
<td class="cellrowborder" valign="top" width="70.75%" headers="mcps1.1.3.1.2 "><p id="p1065863514507"><a name="p1065863514507"></a><a name="p1065863514507"></a>编译构建Cantian引擎工程的脚本。</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001570546425_row1444983711469"><td class="cellrowborder" valign="top" width="29.25%" headers="mcps1.1.3.1.1 "><p id="zh-cn_topic_0000001570546425_p0190845144811"><a name="zh-cn_topic_0000001570546425_p0190845144811"></a><a name="zh-cn_topic_0000001570546425_p0190845144811"></a>common</p>
</td>
<td class="cellrowborder" valign="top" width="70.75%" headers="mcps1.1.3.1.2 "><p id="zh-cn_topic_0000001570546425_p16190144594812"><a name="zh-cn_topic_0000001570546425_p16190144594812"></a><a name="zh-cn_topic_0000001570546425_p16190144594812"></a>后台定时任务运行(管控面)脚本。</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001570546425_row8449143713463"><td class="cellrowborder" valign="top" width="29.25%" headers="mcps1.1.3.1.1 "><p id="zh-cn_topic_0000001570546425_p1819144514815"><a name="zh-cn_topic_0000001570546425_p1819144514815"></a><a name="zh-cn_topic_0000001570546425_p1819144514815"></a>ct_om</p>
</td>
<td class="cellrowborder" valign="top" width="70.75%" headers="mcps1.1.3.1.2 "><p id="zh-cn_topic_0000001570546425_p1819114514812"><a name="zh-cn_topic_0000001570546425_p1819114514812"></a><a name="zh-cn_topic_0000001570546425_p1819114514812"></a>安装部署脚本。</p>
</td>
</tr>
<tr id="row334613520509"><td class="cellrowborder" valign="top" width="29.25%" headers="mcps1.1.3.1.1 "><p id="p534625225014"><a name="p534625225014"></a><a name="p534625225014"></a>document</p>
</td>
<td class="cellrowborder" valign="top" width="70.75%" headers="mcps1.1.3.1.2 "><p id="p123469527502"><a name="p123469527502"></a><a name="p123469527502"></a>项目参考文档,包括《编译指南》、《安装指南》等。</p>
</td>
</tr>
<tr id="row2034725295016"><td class="cellrowborder" valign="top" width="29.25%" headers="mcps1.1.3.1.1 "><p id="p23471252135015"><a name="p23471252135015"></a><a name="p23471252135015"></a>docker</p>
</td>
<td class="cellrowborder" valign="top" width="70.75%" headers="mcps1.1.3.1.2 "><p id="p73472523502"><a name="p73472523502"></a><a name="p73472523502"></a>启动Cantian引擎容器镜像的相关脚本。</p>
</td>
</tr>
<tr id="row7347155285012"><td class="cellrowborder" valign="top" width="29.25%" headers="mcps1.1.3.1.1 "><p id="p4347352145018"><a nam