数据库高可用能力,是数据库能否承载核心业务的关键能力之一。在众多的高可用架构中,基于共享存储的高可用架构是最为常见、也是被广泛使用的架构。这其中的典型代表就是 Oracle RAC,几乎已经成为使用 Oracle 的标配架构。随着近些年来国产数据库逐步进入深水区,开始承载核心业务,因此对高可用的要求更高;那么基于共享存储的高可用架构正在被更多关注。本文尝试对共享存储架构特点及国内数据库共享存储架构产品加以阐述,说明下此类架构产品的当前能力,便于用户去选项使用。
1. 共享存储架构特点与优势
共享存储架构,对比于其他架构有着鲜明的特点,可以提供很好的高可用、高性能、可扩展和应用透明的特性。下图将针对常用的架构及与共享存储架构的对比来说明下。
(1)主备架构(HA)
参见图一。主备架构,也简称HA架构,是采取一主一备架构;即正常运行情况下,所有应用都连接到主数据库,备数据库处于空闲状态。HA 软件通过心跳线监控主数据库状态,如果发现主库宕机,则 HA 软件将备数据库实例自动启动并拉起数据库,再自动将VIP地址飘移到新主库,所有应用也将飘移到新主库。
(2)非共享存储架构(MPP)
参见图二。非共享磁盘架构,也称为 Shared Nothing 架构,是一种典型的分布式架构。这种架构中,每一个节点都是独立的、自给的,没有共享存储和硬盘,不存在单点竞争问题。这种架构首先具备高可用,单台出现故障其余节点仍可用;其次无资源竞争,几乎可线性扩展;第三是支持并行计算,可拓展节点提高算力。这种架构通常用于分析类场景,可支持很大的吞吐量,这里简称为 MPP 架构。
(3)数据分片架构(Sharding)
参见图三。与非共享存储架构类似,同样每个节点都是独立的、自给的,没有共享存储和硬盘,不存在单点竞争问题,具有良好的扩展性和容错隔离能力等。与前者稍有区别在于场景,数据分片架构是伴随着互联网发展起来的,其原理是将一个完整的逻辑数据库通过分片键划分成多个相互独立的物理数据库,应用软件再通过分片键进行路由访问。这样不仅单个交易事务将被路由到某个分片数据库,只访问一个小数据库,具备更好的性能,而且随着访问量的爆炸式膨胀,可快速增加更多节点和存储,提供更多的对外服务能力,实现良好的扩展性。这种架构通常用于在线交易场景,可支持较高并发,这里简称为 Sharding 架构。
(4)主从复制架构(Replication)
参见图四。与之前谈到的主备架构类似,主从复制架构数据库也均为单机,区别在于从数据库是否在线并提供服务。当主库出现故障时,将切换到某个从库。主从数据库之间是通过数据复制技术保证数据同步的。从数据复制技术来讲,存在逻辑复制或物理复制(基于块),相对而言后者效率更高些。但这种架构天然存在主从延时问题,虽然也可设置为强同步模式,但性能会下降很多且无法应对单点故障问题。这类架构在互联网公司非常普遍,这里简称为 Replication 架构。
(5)多活复制架构(Multi-Active)
参见图五。多活复制架构也是基于数据复制技术,这点与主从复制架构一样;区别在于多份数据都可进行写操作。这种架构会导致严重的写数据冲突和数据一致性问题,同时,多数据副本存在,也加大管理、维护难度。此类架构产品相对而言,比较小众。这里简称为 Multi-Active 架构。
下表将针对上面这些架构的优缺点及与共享存储架构(如图六)对比,后者存在的优势加以说明。
2. Oracle RAC 主要能力及发展史
作为共享存储架构产品的代表性产品,Oracle RAC 可以说是将共享存储架构真正推广开来。下面我们简单了解下Oracle RAC 这一产品,也为后面谈国产数据库类似架构产品加以参照对比。
(1)Oracle RAC 核心能力
下面是摘自 Oracle 官方的一篇白皮书,重点阐述了 RAC 的核心能力。
❖ 高可用性
支持关键应用程序的数据库,需要持续地为应用程序请求提供服务,即使面临硬件或软件故障。它还必须能够在不中断应用程序的情况下,在所有级别(包括硬件、操作系统、数据库软件和数据库模式)执行计划维护。
❖ 工作负载可伸缩性
支持关键应用程序的数据库,需要动态地、不中断地适应不断增加的应用程序工作负载。它必须透明地扩展计算、存储、内存、连接、用户并以应对应用程序复杂性。
❖ 不更改应用程序
支持关键应用程序的数据库必须支持上述需求,而不需要更改应用程序。企业已经投入了数十人年的工程师时间来开发他们的应用程序,重写现有的应用程序并不划算。
(2)Oracle RAC 架构及组件
互连是 RAC 体系结构的一个关键元素,因为它有助于确保向外扩展的 Oracle RAC 数据库被视为“单个”数据库系统。这意味着应用程序不需要知道哪个数据库实例正在处理工作负载请求。此外,Oracle RAC 使用五个关键软件组件:
❖ 可扩展的数据库实例
多个数据库实例并发访问数据库数据是不够的;它们必须有能力协调应用访问和数据更新。这种智能扩展能力关键在于由 Oracle RAC 提供独特的缓存融合技术,该算法实现跨节点数据的一致分布式缓存的,以实现有效的水平扩展。
❖ 集群管理
集群管理组件,将多台服务器转换为高可用性集群。从管理角度来看,集群作为单个实体进行管理,而不是作为独立服务器池进行管理。集群管理组件还提供故障集群的检测、故障转移和节点成员管理。
❖ 自动存储管理
通过允许所有用户并发访问数据库文件来扩展存储 Oracle RAC 数据库实例。此外,Oracle ASM提供卷管理功能,包括优化的数据库文件访问和数据镜像,以防止存储故障。
❖ 应用程序连续性
支持将活动应用程序连接自动透明地转移到存活的实例,通过以非中断和快速的方式执行或部分执行正在运行的请求和事务重演。
❖ 补丁和配置
自动化补丁和配置管理,通过提供编排配置,修补和升级,以最大限度提高数据库对应用程序的可用性。
(3)Oracle RAC 发展历史
自2001年9i版本推出之后,历经20年的发展,不仅在全球各行各业得到了广泛深入的运用,而且 Oracle 公司一直在不断优化 RAC 技术本身,每个版本都推出了涵盖 RAC 高可用性、高性能等领域的若干新特性。从最早期的8i版本开始,RAC 的雏形已经出现(当时名为Oracle Parallel Server,OPS),其实现多实例的数据读读,读写模式(DLM)和写写模式,仍后者仍需要借助磁盘作为中介,因此效率较低。到了9i版本,真正实现了内存融合,具备全局资源目录,并独立出 LMON、LMS 等进程专门管理;10g版本,出现了独立的集群服务,包括CSS、CRS、EVM等,并有了ASM文件系统专门用于集群文件管理;11g版本,具备了集群资源管理、引入SCAN IP 等;12c版本,则出现了 Flex Cluster 和 Flex ASM,彻底改变了 RAC 集群中数据库实例与ASM实例间的关系...
3. 国产数据库RAC能力说明
近些年来,随着国产数据库在更多行业、更核心场景投入使用,共享存储架构的优势凸显,厂商也越发重视对共享存储架构的投入。很多厂商也纷纷推出了自有的基于共享存储架构的产品,其目标都是对标 Oracle RAC。下面针对收集到的国内部分厂商此类架构产品做了简单介绍与对比。从整体上看,当前国内此类产品还相对处于早期,信息资料也不是很完整,下文根据各厂商官网及白皮书上的信息整理如下。
(1)达梦-DMDSC
DM 共享存储数据库集群,英文全称 DM Data Shared Cluster,简称 DMDSC;是在 DM8 中采用的一项新技术,具有高可用性、可扩展性,是数据库支持网络计算环境的核心技术。DMDSC集群是一个多实例、单数据库的系统,主要由数据库和数据库实例、共享存储、本地存储、通信网络、以及集群控制软件DMCSS组成。DM 共享存储数据库集群,允许多个数据库实例同时访问、操作同一数据库,具有高可用、高性能、负载均衡等特性。用户可以登录集群中的任意一个数据库实例,获得完整的数据库服务。DMDSC 支持故障自动切换和故障自动重加入,某一个数据库实例故障后,不会导致数据库服务无法提供。
❖ 架构图
DMDSC 集群主要由数据库和数据库实例、共享存储、DMASM 或 DMASM 镜像、本地存储、通信网络、集群控制软件 DMCSS、集群监视器 DMCSSM 组成。数据文件、控制文件在集群系统中只有一份,不论有几个节点,这些节点都平等地使用这些文件,这些文件保存在共享存储上。每个节点有自己独立的联机日志和归档日志,联机日志和归档日志都需要保存在共享存储上。
❖ 特点:高可用性
只要集群中有一个活动节点,就能正常提供数据库服务。此外,当出现磁盘损坏或数据丢失时,既可以利用其他镜像副本继续提供数据库服务,又可以使用其他镜像副本进行数据恢复。
- 实例高可用-DMCSS,当出现系统故障、硬件故障、或人为操作失误时,DMCSS 可检测故障并自动将故障节点踢出集群,保证数据库服务的正常提供。故障节点的用户连接会自动切换到活动节点,这些连接上的未提交事务将被回滚,已提交事务不受影响;活动节点的用户连接不受影响,正在执行的操作将被挂起一段时间,在故障处理完成后,继续执行。当 DMCSS 检测到故障节点恢复时,自动启动节点重加入流程,将恢复的故障节点重新加入 DMDSC 集群,将集群恢复到正常的运行状态。
- 数据高可用-DMASM,如果 DMDSC 配置了 DMASM 镜像,镜像功能可提供多副本技术。当出现磁盘损坏或数据丢失时,系统无需人工干预即可利用其他镜像副本继续提供数据库服务,同时又可以自动或手动通过使用其他镜像副本进行数据恢复。
❖ 特点:高吞吐量
- 多个节点同时提供数据库服务,有效提升集群的整体事务处理能力。
- DMDSC 集群中包含多个数据库实例,数据库实例访问独立的处理器、内存,数据库实例之间通过缓存交换技术提升共享数据的访问速度,每个数据库实例都可以接收并处理用户的各种数据库请求。
- 与单节点数据库管理系统相比,DMDSC 集群可以充分利用多台物理机器的处理能力,支撑更多的用户连接请求,提供更高的吞吐量。与双机热备系统相比,DMDSC 集群不存在始终保持备用状态的节点,不会造成硬件资源的浪费。
❖ 特点:负载均衡
一方面,通过巧用服务名,用户的连接请求被平均分配到集群中的各个节点,确保连接负载平衡;另一方面,条带化技术可保证写入的数据均匀分布到磁盘组内的不同磁盘中,实现数据负载均衡。
- 流量负载均衡,通过配置 DM 数据库连接服务名来访问 DMDSC 集群,可以实现节点间的连接自动负载均衡。用户的数据库连接请求会被自动、平均地分配到 DMDSC 集群中的各个节点。并且连接服务名支持 JDBC、DPI、ODBC、DCI、.Net Provider 等各种数据库接口。
- IO负载均衡,通过配置 DMASM 镜像,使用镜像的条带化技术可保证写入的数据均匀分布到磁盘组内的不同磁盘中,实现数据负载均衡。
(2)人大金仓-KES RAC
❖ 架构图
KES RAC 提供了数据库的连接驱动,实现了客户端的负载均衡。中间部分的集群管理软件-clusterware,提供集群成员管理,进行故障检测与处置。KES RAC 数据库提供跨节点一致的读写服务。集群文件系统支持各节点数据库对共享存储的一致性访问。
❖ 特点:读写请求横向扩展
KingbaseES RAC集群目前支持2~8个节点的规模。在OLTP类应用可以无冲突的访问各个节点时,可以获得0.8以上的吞吐量加速比。
❖ 特点:高可用性
使用 KingbaseES RAC 可以在一定程度上避免因为硬件或软件故障引起的计划内或计划外停机,增加系统的可用性。KingbaseES RAC提供RPO=0,RTO<60s的可用性以及故障排除后的自动恢复能力。在2节点部署、200并发、负载均衡、多表2000行/s写入情况下,集群默认配置下RTO参考
❖ 特点:多种部署模式
- 负载均衡模式,集群各节点都接收读写请求,在提供可用性的同时提供横向性能扩展。在各节点请求无冲突时基准测试可实现0.8以上的加速比。
- 单活模式,集群单节点接收读写请求,其他节点只在接收请求的节点故障后接管。各类资源的主节点都保持在接收请求的节点。适用于负载均衡模式下有跨节点通信瓶颈业务场景,提供可用性的同时不会有主备复制的同步延迟。
- One Node模式,类似Oracle RAC One Node模式,集群中提供多个单实例服务,提供冷备级可用性,单实例支持扩展为多实例。适用于数据库集中类场景,需要低成本运行多个业务。
(3)南大通用-GBase8s
GBase 8s是天津南大通用数据技术股份有限公司自主研发的、成熟稳定的基于共享存储的数据库集群。该方案实现了在低成本服务器上构建数据库高可用系统,应用自由部署,故障自动切换。GBase 8s 共享存储集群 Shared Storage Cluster(SSC)通过多个节点对外提供服务,保障系统高可用。数据保存在共享存储上,所有节点共享一份数据。共享存储集群提供的通信协议、SQL 协议与单机相同,保障应用系统无缝迁移。支持集中式部署、共享存储高可用部署、两地三中心高可用部署,具备高容量、高并发、高性能等特性。
❖ 特点:高可用性
- 当某节点发生故障时,其他节点自动接管服务请求。主节点故障秒级切换,辅助节点故障不影响数据库服务。
- 共享存储高可用,支持共享存储高可用,解决用户关键业务中非常关心的数据高可用问题,支持故障自动秒级切换。支持节点数达16个,用户可通过增加节点数,实现读性能近线性提升。
- 支持同机房共享存储(SSC)、主备高可用灾备(HAC)能力、异地灾备高可用(RHAC)能力。
❖ 特点:高扩展性
GBase 8s 共享存储集群最高可支持 128 节点,用户可根据自己需要在线增加节点数。
❖ 特点:应用透明性
Connection Manager 功能部件,它可以提供SLA功能,更好地实现负载均衡的能力,同时提供了 FOC(FailOver Connection) 功能,实现透明故障接管能力。
❖ 特点:多部署方式
GBase 8s 系统的高可用集群有共享存储集群、容灾集群三种,并支持组合,实现两地三中心高可用部署。集群切换可通过连接管理器(CM)组件实现。
- 灾备集群 HAC(High availability cluster)根据备份距离不同分为同城灾备集群和异地灾备集群。HAC 技术是一种将数据从主服务器复制到备服务器的技术。异地灾备集群是同城容灾的扩展,提供远程的容灾备份方案,同城容灾备集群支持同步、半同步、异步三种模式,异地灾备集群支持异步模式;
- 共享存储集群SSC(Shared storage cluster) 通过多个节点对外提供服务,保障系统高可用。数据保存在共享存储上,所有节点共享一份数据。当主节点出现故障时,备节点将自动、快速接管主节点服务。
- 企业级复制 Enterprise Replication(ER)是基于日志的异步工具,用于在 GBase 8s Server 数据库服务器之间复制数据。源服务器上的Enterprise Replication 通过读取逻辑日志,存储事务并将每个事务作为复制数据可靠传输至目标服务器。
- 连接管理器(CM)是一个轻量级连接管理组件,位于应用程序和 8s 高可用数据库集群之间,根据集群状态提供负载均衡及故障接管功能,支持代理和重定向两种模式。
GBase 8s 提供强大的高可用集群整体解决方案,除 SSC、HAC、远程 HAC 集群外,还支持 SSC+HAC 构建同城双活高可用架构方案、SSC+HAC+远程 HAC 异地灾备技术构建两地三中心高可用架构方案,以及支持实时同步的 ER 集群解决方案。
(4)优炫-UXDB SRAC
优炫的共享存储多写多读高可用集群(SRAC)是 UXDB 基于 shared-disk 架构的共享存储集群。通过 SRAC 构建更强大的高可用、高性能、易伸缩解决方案,适用于金融账务系统、生产制造等大型交易应用。
❖ 特点:高可用
共享存储集群高可用,SRAC 是将多个优炫数据库通过组网方式并联在一起,集群间各数据库实例通过共享存储的模式共用一份数据文件集合,并利用共享缓冲区,在集群之间建立信息同步机制,保证集群内各实例的相互协调,实现多活分布,多写多读。针对高可用的保障分为故障转移和数据完整性。故障转移是当集群中某台数据库实例出现故障时,SQL 请求会被转移到其它正常实例上,保障应用访问的连续性。数据文件存储在集中式共享存储中,通过多副本机制,保证数据的完整性。
❖ 特点:负载均衡
负载均衡是指将不同的请求分布到多个服务器,以便可以在其中均衡分配负载。优炫数据库的负载均衡支持轮询、权重、最小连接数以及自定义负载均衡策略,能显著提升数据库整体性能,优炫数据库提供如下负载均衡方案。UXPool 是位于 UXDB 服务器和客户端之间的中间件,提供连接池、复制、负载均衡、并行查询、限制超过限度的连接等功能,程序拦截每个 SQL 查询并把它发送给一个或多个 UXDB 节点,适用于读写分离的 UXDB 集群部署方式下的负载均衡。使用该 UXPool 可有效减少数据库连接开销,其配合 UXDB 集群的浮动 IP 配置,可满足多节点故障自动转移,实现需要负载均衡但对应用完全透明的需求。集群节点故障后自动切换,故障恢复自动重加入。
❖ 特点:灾备
区别于为应对意外事件造成的数据丢失问题的备份,容灾是为了在遭遇灾害时能保证信息数据库系统仍能正常运行,帮助企业实现业务连续性目标。UXDB 支持基于应用程序、数据库、存储设备的远程复制和操作系统级的远程镜像等多种方法。支持同城双中心灾备、二地三中心的异地灾备方案。
(5)崖山-YanshanDB
❖ 架构图
- YashanDB共享集群依据YashanDB的数据库内核逻辑演进而来,并在共享存储的基础上引入了Cohesive Memory核心技术,用于集群数据库各实例之间协同数据页的读写访问以及各种非数据类资源的并发控制。其中,GRC( Global Resource Catalog )负责全局资源管理,GCS( Global Cache Service )负责全局数据页管理,GLS( Global Lock Service )负责全局锁管理。
- Inter-Communication Service,内部通讯服务,简称ICS,用于建立实例之间的连接池,并实现实例间的相互通信。
- Yashan File System,崖山文件系统,简称YFS,崖山文件系统承担了集群文件系统的职责,直接管理裸设备,并提供强一致的文件系统服务给数据库使用。
- Yashan Cluster Service,崖山集群服务,简称YCS,崖山集群服务是集群数据库高可用的核心部件,统一管理崖山文件系统、数据库等资源,包括配置、启停、监控等,并在各种故障场景下提供仲裁服务,维护全局统一的拓扑状态,支撑YashanDB共享集群从部署到启停的完整形态的稳定运行。
❖ 特点:高可用
- 一套共享集群由若干台服务器组成,当某台物理服务器宕机时,共享集群仍能正常提供服务。
- 崖山集群文件系统(后续简称YFS),还提供了管理diskgroup(磁盘组)、failuregroup(故障组)等重要特性,以支持共享集群的存储高可用。
❖ 特点:透明应用切换
通过TAF( Transparent Application Failover )技术,在客户端层面实现数据库服务端发生故障时,能够自动重连或切换到活跃实例,不需要用户介入和感知,但用户的未提交事务将被执行回滚。透明应用切换属于客户端侧功能,用户可自由选择是否使用,但与不使用导致抛出连接错误相比,透明应用切换使得应用程序对用户变得更加友好,最大程度保证了业务的连续性。