#共享集群
共享集群依据YashanDB内核逻辑演进而来,并在共享存储的基础上引入了Cohesive Memory核心技术,用于集群数据库各实例之间协同数据页的读写访问以及各种非数据类的并发控制,主要特点包括:
- 共享集群是一个单库多实例的多活数据库系统,用户连接任意实例都可以访问同一个数据库,多个数据库实例可以并发读写同一份数据,具备高可用、高扩展、高性能等特性。
- 共享集群的核心组件主要包括YCK(Yashan Cluster Kernel,崖山集群内核)、YCS(Yashan Cluster Service,崖山集群服务)和YFS(Yashan File System,崖山文件系统)。
- 共享集群支持在线故障自动切换和故障自动恢复,集群任一实例异常都不影响正常实例对外提供的服务。
- 通过客户端TAF技术,可以实现在故障发生时自动将连接切换到存活的集群实例,故障对业务透明无感知。
# 崖山集群内核
崖山集群内核通过聚合内存技术,聚合多实例对数据资源和非数据资源的并发访问。
# 聚合内存
为了实现高效的多实例并发读写访问,YCK使用Cohesive Memory来聚合多实例的数据资源和非数据类资源的访问。其中:GRC( Global Resource Catalog )负责全局资源管理,GCS( Global Cache Service )负责全局数据页管理,GLS( Global Lock Service )负责全局锁管理。

GRC
采用分布式资源管理算法,每个实例在共享内存中管理一部分全局资源的元数据信息,任一资源的元数据信息在集群内只有一份。由GRC线程组负责处理多实例对全局资源的并发访问控制,并提供排队服务。
GCS
辅助GRC,提供数据类资源的访问和实例间的传输,由GCS线程组提供相应的服务。
GLS
辅助GRC,提供非数据类资源的访问和实例的同步,由GLS线程组提供相应的服务。
# 集群事务
崖山共享集群下的事务引擎采用完全分布式存储的事务架构,每个实例具备独立的undo表空间、对外提供独立的事务管理能力。各实例下的事务ID天然具备唯一性,不需要集中式的事务处理。
集群多实例间的事务并发控制通过聚合内存技术实现,同时对外提供集群级的事务死锁检测能力。

Session
会话由客户端指定实例的连接在指定的实例上创建,所有会话的操作和资源相互隔离。
XID
事务的唯一标识,全局唯一,每一个实例管理本实例的事务,XID具备实例属性。 每个实例上的会话通过分配Local XID进行本地事务操作,当要访问的XID是一个Remote XID时,会通过聚合内存获取其他实例的事务信息。
Xact Area
事务内存区,每个实例管理自己的事务内存区,对外提供独立的事务管理。
Xact Storage
事务存储,每个实例具备独立的undo表空间,事务相关的信息存储在对应的undo表空间内。
# 崖山集群服务
崖山集群服务采用单进程、多线程的服务架构,负责管理共享集群数据库,提供集群配置管理、资源管理、资源监控、集群高可用等能力。

YCR Disk
共享存储上的一个磁盘,用于存储集群的配置文件信息,所有节点的YCS通过访问YCR Disk获取集群内所有相关资源的配置信息。
Voting Disk
共享存储上的一个磁盘,用于存储集群的投票文件信息,所有节点的YCS通过一定的共识算法以及投票盘进行多节点的仲裁处理。
YCS节点管理
提供节点配置、节点启停能力。
资源管理
YCS资源包括外部资源和内嵌资源,当前版本外部资源指数据库实例资源,内嵌资源指YFS资源。
集群监控
资源监控包括YCS监控、数据库实例资源监控、YFS资源监控。
集群高可用
集群高可用主要包括故障诊断、故障恢复、选举仲裁以及资源监控。
# 崖山集群文件系统
崖山集群文件系统采用与YCS共进程的架构,内嵌于YCS组件运行。提供文件系统以及磁盘组管理能力,用于管理共享存储。客户端与服务端采用UDS(Unix Domain Service)进行通信,同时通过共享内存同步文件系统的FAT(File Allocation Table,文件配置表)信息。
多节点下的YFS采用主备架构,集群下只有一个主YFS节点,其他节点的YFS通过复制的方式同步最新的YFS信息。

文件系统
YFS为YashanDB提供高性能的文件系统管理能力、包括目录管理、文件管理、空间管理等。
共享内存
通过共享内存的方式,数据库实例直接访问获取FAT信息,从共享存储上进行数据块的读写访问。
磁盘管理
崖山集群文件系统提供磁盘组的创建、删除、修改等能力,并通过故障组技术实现元数据的高可用。