初探华为Cantian(二)——类似于 Oracle RAC 共享存储架构都有啥?

科技   2024-11-29 10:02   北京  
作者 | JiekeXu
来源 |公众号 JiekeXu DBA之路(ID: JiekeXu_IT)
如需转载请联系授权 | (个人微信 ID:JiekeXu_DBA)
大家好,我是 JiekeXu,江湖人称“强哥”,荣获 Oracle ACE Pro 称号,墨天轮 MVP,墨天轮年度“墨力之星”,拥有 Oracle OCP/OCM 认证,MySQL 5.7/8.0 OCP 认证以及 PCA、PCTA、OBCA、OGCA、KCP 等众多国产数据库认证证书,今天和大家一起来看看初探华为Cantian(二)——类似于 Oracle RAC 共享存储架构都有啥?欢迎点击最上方蓝字“JiekeXu DBA之路”关注我的微信公众号,然后点击右上方三个点“设为星标”置顶,更多干货文章才能第一时间推送,谢谢!


前  言  

在上一篇文章中,我们已经初探华为Cantian 引擎的架构以及主要的特性,以及使用Cantian 引擎能够解决什么样的问题。我们知道了 Cantian 引擎是类似于 Oracle RAC 的架构,今天我们先来复习一下 O 记的 RAC,然后再来看看 Cantian 引擎内部的原理。

Oracle RAC 

众所周知,O 记的 RAC 自 8i 时代的雏形,那时候还叫 OPS(Oracle Parallel Server),9i 之后内存融合技术正式出现,为了实现内存融合技术,GRD(Global Resource Directory)被引入,同时Oracle还引入了专门的后台进程,例如:LMON、LMS、LMD等,但 9i 的时候还需要借助第三方集群管理软件,不是很成熟;到了 10g 之后,Oracle推出了自己的集群管理软件产品——CRS(Cluster Ready Service),并推出了另一个组件 ASM (Automatic Storage Management)来管理集群中的共享磁盘,这样便使 RAC 更加完美,CRS 集群件管理集群,ASM 作为存储软件,负责为集群和数据库提供共享磁盘,并对共享磁盘进行管理。RAC是集群中运行的最主要的资源,它通过 ASM 实例获得集群中的共享磁盘信息,并访问上面的各种数据库文件,同时 RAC 数据库也需要和 CRS 进行通信来获得集群层面的信息;但不足之处在于 10g 的 RAC 中 CRS 的重要共享文件 OCR(Oracle Cluster Register)VF(Voting File)还不能通过 ASM 进行管理。   

到了 11gR2 这个版本,RAC 的集群管理被命名为 GI(Grid Infrastructure),其集群管理软件分为:集群初始化组件、集群存储管理组件和应用程序组件。到了 12c 这个版本,多租户(Multitenant)和 in-memory 新特性算是最大的变动,打破了数据库传统的一对一架构,而对于集群管理软件层面,12C 最大的新特性就是 Flex ASMFlex Cluster


其中,内存融合技术(Cache Fusion)则是 RAC 最关键的技术之一,内存融合技术大概就是在多个实例并发访问一个块里的数据时不再借助磁盘作为数据传递的中介,而完全依靠高速互联网络在实例之间的内存中传递不同版本的数据块来实现数据的并发访问,这大大减少了 I/O 操作,提高了性能。

在上面这个 9i 的内存融合架构图中,控制文件作为最重要的一环,控制着整个集群,后来演变成 OCR 中的 VF 表决盘,数据库实例会向控制文件注册自己的状态,同时通过控制文件获得集群的实例列表和实例状态信息,这部分功能被称为 CGS(Cluster Group Service)。CGS 的功能主要是通过后台进程LMON来实现的。数据库实例的SGA中的信息通过高速的集群私网进行交互,形成一个更大的融合的 SGA 内存结构。为了维护多个实例并发访问数据时的一致性,GRD全局资源目录被用来保存资源在每个实例上的锁信息,这些信息均匀地分布在每个实例中,而根据类型和功能的不同,资源被分成了PCM资源和non-PCM资源,其中GCS(Global Cache Service) 负责提供对PCM资源(数据块)的访问和管理;GES(Global Enqueue Service)负责提供对non-PCM资源(也就是各种排队)的访问和管理。GCS的功能主要是通过后台进程LMS(Lock Manager Service) 来实现的,而GES的主要功能由LMD后台进程实现(当然有一部分instance lock的功能是通过LCK进程实现的)。    

对于这块的概念也是比较难掌握,由于本人能力问题就先介绍到这里,下面我们来看看国产数据库解决方案 Cantian 存储引擎的多读多写架构是怎么实现的呢?简单来说则是通过 Cantian connector(CTC) 插件把 MySQL 对存储引擎的接口调用通过共享内存转发给了 Cantian 存储引擎,而参天引擎由集群化组件以及共享存储组成。如下所示,MySQL 生态系数据库可以通过 CTC 插件把 Cantian 引擎作为默认插件替代 InnoDB 存储引擎来实现多写。

 Cantian 集群化组件  

通过 Cantian集群化组件便可以把单机的操作扩展到多节点集群,目前参天引擎仅支持两节点的集群,后期会扩展到更多节点

lDCS(Distributed Cache Service):分布式缓存服务,管理数据页在缓存中的并发读写,实现缓存融合,全局数据页读写请求的处理,数据页 owner/只读副本的管理,最新版本数据页在集群范围内传输和老版本的失效等操作。每个数据页都有协调者(Master)、请求者(Requester)和持有者(Owner)三个角色。master 负责登记该数据页的持有者信息,requester 为最新请求读写该数据页的节点,owner 持有该资源的最新版本,一般是上一次修改数据的节点。    

         

 

在整个集群范围内,某个数据页同一时刻只能被 1 个节点写,可以同时被多个节点读取。读写数据页是互斥操作。页面请求过程:requester 根据 Page ID 计算协调者所在节点,将 SCN 和请求的 Page ID 发给 master,master 通知该 Page 的 owner 将Page 发送给 requester,requester 收到该 Page,然后 requester 通知 master 自己成为该 Page 的 owner。

         

 

         

 

lDRC(Distributed Resource Catalog): 分布式资源目录,管理资源在集群中的分布和分布式元数据信息,包括 page/lock 等资源在集群范围下的 owner、权限、并发控制等信息;    

lDLS(Distributed Lock Service):分布式锁服务,实现其他共享资源并发控制,管理集群范围内 lock 的并发控制,把 spinlock, latch 等锁资源扩展到整个集群。和 DCS 一样,每个 DLS 资源都有协调者(Master)、请求者(Requester)和持有者(Owner)三个角色。

lMES(Message Exchange Service):消息交换服务,实现集群间网络通信组件。

lCMS(Cluster Management Service):集群管理服务,故障检测与处理,类似于 Oracle 的 GI 集群件。


Cantian集群管理组件CMS 

如下图所示,CMS 集群管理组件有 Interface 接口层,CMS Server 层,CMS TOOL 工具层以及 Share Storage 共享存储层四个组件   


CMS分为四个模块:

1.接口
o提供API接口供外部系统进行集群状态的查询
o资源注册、状态变更通知回调
2.工具
o提供命令行工具
o集群定义管理:增加节点、删除节点、修改节点、节点查询
o集群资源定义管理:增加资源、修改资源、删除资源、资源查询
o集群管理:节点下线、节点上线
o集群信息查询:节点状态查询、节点资源状态查询
3.共享存储
o共享存储需提供全局锁和IO读写能力    
o集群的定义信息、状态信息、投票信息都持久化在共享存储上
4.CMS Server
o提供资源监控、自动重拉、投票选举、通知、心跳等功能
o故障检测:支持Cantian进程故障、节点故障、网络故障、存储链路故障、存储故障的检测与处理

o协调集群内节点完成集群重构操作

Cantian 集群文件布局 

集中式架构下实现多读多写则需要共享存储的支持,由多个计算节点组成多写集群。如下图所示:所有计算节点共享 ctrl 控制文件,共享 system 表空间、doublewrite 区和 user 表空间。但是每个节点都有单独的 undo 表空间、temp 表空间和 redo log 日志。每个节点只能写本节点的 undo、redo 和 temp 文件

集群正常运行时,每个节点只能写本节点的 redo log。Temp 表空间是节点私有的,只能被本节点读写,不会被其他节点访问。当节点的 temp buffer 不足时,节点会把 temp buffer 的内容换入换出到 temp 表空间。temp buffer 和 temp 表空间一样,都是节点私有的。集群的文件布局如下:

上面说到,每个实例有自己独立的 undo ,也有独立的 undo segment管理机制,undo回收机制,互不干扰。每个实例有自己的事务表,事务在实例间是不能复用的。每个实例的undo 下面具有独立的事务表,事务分配按照单机分配回收机制进行。行,由于个人水平问题,Cantian 引擎也就说这么多,更多细节内容还需要深挖官方文档和白皮书,由于 Cantian 引擎是开源产品,我们可以直接在 Gitee 上访问,甚至可以查看源代码。

最后,看着这么优秀的多读多写架构,和 Oracle RAC 一样牛逼的架构,到底有没有落地实践的产品呢?据我所知是有的,最近看到有媒体说在某行落地,某行和一数据库厂商联合基于华为 Cantian 引擎实现了金融行业首款国产多读多写数据库。MySQL生态可以实现,那么 PG 系,openGauss 系数据库应该也能实现这种架构,未来,集中式数据库还是有一席之地的。希望在未来的日子里能听到更多的 Cantian 引擎应用案例落地,也希望 Cantian 引擎被更多的人所看到,愿 Cantian 引擎如其名扎根深远长成参天大树! 

参考链接

《Oracle RAC核心技术详解》 - 高斌 著(微信读书)Cantian引擎开源软件代码仓:https://gitee.com/openeuler/cantianconnector开源软件代码仓:https://gitee.com/openeuler/cantian-connector-mysql

全文完,希望可以帮到正在阅读的你,如果觉得有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~



分享几个数据库备份脚本

一文搞懂 Oracle 统计信息

我的 Oracle ACE 心路历程

MOP 系列|MOP 三种主流数据库索引简介

Oracle 主流版本不同架构下的静默安装指南

关机重启导致 ASM 磁盘丢失数据库无法启动

Oracle SQL 性能分析(SPA)原理与实战演练

Oracle 11g 升级到 19c 需要关注的几个问题

Windows 10 环境下 MySQL 8.0.33 安装指南

SQL 大全(四)|数据库迁移升级时常用 SQL 语句

OGG|使用 OGG19c 迁移 Oracle11g 到 19C(第二版)

Oracle 大数据量导出工具——sqluldr2 的安装与使用

Oracle ACE 视角下的国产数据库现状与选型及应对策略

从国产数据库调研报告中你都能了解哪些信息及我的总结建议

使用数据泵利用 rowid 分片导出导入 lob 大表及最佳实践

在归档模式下直接 rm dbf 数据文件并重启数据库还有救吗?

欢迎关注我的公众号【JiekeXu DBA之路】,一起学习新知识!
——————————————————————————
公众号:JiekeXu DBA之路
墨天轮:https://www.modb.pro/u/4347

CSDN :https://blog.csdn.net/JiekeXu
ITPUB:https://blog.itpub.net/69968215
腾讯云:https://cloud.tencent.com/developer/user/5645107——————————————————————————

JiekeXu DBA之路
JiekeXu:Oracle ACE-Pro,获 Oracle OCP/OCM 及 MySQL OCP 认证,墨天轮 MVP,利用闲时间记录菜鸟 DBA 学习成长之路,所发布文字属于个人观点和学习笔记,如有错误及不当之处,敬请批评指正!
 最新文章