暂无图片
暂无图片
20
暂无图片
暂无图片
7
暂无图片

Oracle ACE 尹海文:Oracle RAC的优势与难点

原创 墨天轮编辑部 2024-10-08
1271

RAC(Real Application Clusters)技术是Oracle数据库的核心特性之一,旨在实现高可用性和负载均衡。随着企业对数据可用性和性能需求的不断提升,RAC成为了保障数据库系统稳定运行的重要工具。

【墨天轮数据库沙龙】邀请到Oracle ACE 尹海文,为大家分享Oracle RAC 的优势与难点。以下为演讲实录。

尹海文
Oracle ACE、某科技公司DBA总监

Oracle RAC 介绍

首先,让我们简单了解一下RAC。RAC是“Real Application Clusters”的缩写,直译为“真实应用集群”。它采用了存算分离的架构,这意味着计算任务在各个节点上执行,而数据存储则通过共享的集中存储来实现,这种存储可以是物理上的集中存储,也可以是分布式存储。

接下来,我们将探讨Oracle RAC的组件和构成。在软件层面,RAC主要由两个主要部分组成:

Grid Infrastructure(GI):这是RAC的基础,它包括两个关键组件:
• Clusterware:它负责管理集群中的节点、服务和资源。Clusterware确保了集群的高可用性和资源管理。它还负责监听服务、自动存储管理(ASM)以及资源的分配和管理。
• ASM(Automatic Storage Management):这是Oracle的存储管理系统,它负责管理共享存储的磁盘。ASM允许将存储挂载到各个计算节点的磁盘整合为ASM磁盘组,并ASM实例进行统一管理。

Database Software:这是数据库实例运行的地方,负责处理数据库操作和事务。在这里,RAC集群的高可用性等特性是通过Grid Infrastructure和数据库软件结合来保证来实现的。

图1 RAC 的组成部分

在讨论RAC数据库的节点时,我们通常将其分为两大类:数据库节点,也就是计算节点,是我们运行计算实例的地方。数据库实例在这里运行,涉及到内存、进程;另一类节点就是存储节点,为计算节点提供存储。这里需要澄清的是,共享存储并不总是集中式的。许多人误以为RAC(Real Application Clusters)中的共享存储必须是集中存储,但实际上,只要存储能被每个节点访问,它就可以被RAC使用。

在网络方面,RAC主要涉及两种网络:公共网络(Public )和私有网络(Private)。公共网络是外部应用客户端访问数据库的通道,而私有网络则用于集群内部通信。这部分的理解对后续讨论RAC的高可用性至关重要,因为私有网络支持心跳检测、全局缓存(Global Cache,简称GC)的数据传输和融合,以及ASM的远程访问。ASM并不是直接操作磁盘,而是基于映射关系。如果一台机器上的磁盘与其他节点相同,即使本机的ASM出现问题,也可以通过其他节点的ASM实例获取磁盘信息。

此外,还有一些可选的网络配置。例如,存储网络通常用于基于IP SAN的解决方案,而不是基于FC(Fibre Channel)的。FC通常使用HBA(Host Bus Adapter)卡进行映射,而IPSAN则是基于IP的。另一个可选的是管理网络,它在公共或私有网络出现异常时,可以作为连接数据库的备用通道。

图2 RAC 网络

在深入理解RAC时,我们可以将其简化为一对多和多对一的数据库模型。这意味着多个数据库实例可能运行在每个计算节点上,每个实例对应一个数据库。在某些情况下,一个节点可能运行多个实例,例如运行多套RAC或有其他特殊配置。这种模型使得数据库能够通过多个实例来处理更多的工作负载,从而提高性能和可用性。总的来说,RAC的架构设计旨在通过多个计算节点共享访问同一数据库实例,来实现高可用性和负载均衡。这种设计需要仔细考虑网络配置和存储策略,以确保系统的稳定性和效率。

关于数据库的访问,我们通常通过SCAN监听器连接到VIP的本地监听器,这是一个简化的访问示意图。

图3 RAC 数据库访问

RAC 架构的优势

接下来,我们将探讨RAC的优势,主要分为高可用性和高性能两个方面。

首先,我们来谈谈高可用性。尽管这里没有图表展示,但我们可以基于之前的讨论来理解。RAC的一个关键优势是它能够在多个数据节点中提供高可用性。如果任意一个数据节点发生故障,数据库仍然能够继续运行,这是RAC高可用性的首要体现。

在实际生产环境中,我们还需要考虑一个问题:如果一个节点发生故障,其他节点是否能够接管其工作负载。高可用性在这里就显得尤为重要。此外,当一个节点恢复或新节点加入时,我们不需要跨节点同步数据。我们可以直接从共享存储中获取数据,这样就不会影响其他节点的运行。还有一个重要的点是,跨节点的ASM实例是可以接管的。如果一个节点的ASM实例发生故障,但数据库实例没有受到影响,那么我们可以利用其他存活节点上的ASM实例信息来读取本地的共享存储。对于网络而言,无论是公共网络、私有网络,还是存储网络,都可以通过多种方式实现高可用性,例如使用网络绑定(bonding)或多路径(multi-path)技术。这些网络之间是相互独立的,可以实现互不影响的高可用性。

在许多场景中,我们自建的RAC系统,尤其是在万兆网络环境下,可能会遇到私有网络带宽不足的问题。为了解决这一问题,我们通常采用多路多活的方法,即使用两路或更多路的私有网络来运行,这些网络可以是同一网段的IP,也可以是不同网段的。

对于ASM存储,ASM本身支持高可用性和冗余配置,比如我们所知的正常和高(normal/high),它支持两副本或三副本的配置。此外,我们还可以在存储侧使用副本或镜像技术,比如存储多活、存储镜像、存储快照等,以实现存储侧的高可用性。分布式存储本身也提供了一些副本功能,进一步增强了存储的高可用性。

图4 RAC 高可用架构

12.2版本引入了Flex ASM技术,使得每个节点不再需要独立运行数据库实例。这种架构允许节点跨越调用共享的信息,从而提升了整体效率。

参考一个高可用性的简图,其中展示了通过Data Guard(DG)实现的跨实例高可用性。当某个区域发生故障时,另一区域可以迅速接管,确保业务的连续性。

图5 RAC 高可用简图

然而,值得注意的是,在数据库高可用性设计中,应用的高可用性同样不可忽视。如果所有应用都依赖于主数据库,一旦主数据库出现问题,整个系统依然无法使用。因此,在主备架构中,我们必须在两个区域部署同等的应用,甚至考虑交叉部署。此外,还需要统一前端入口和负载均衡,以构建一个真正高效的高可用架构。

接下来,让我们转向Oracle RAC的高性能特点。RAC的高性能主要体现在两个方面:横向扩展数据库节点优化节点间的数据交互

首先,通过横向扩展,我们可以增加更多的数据库节点来提升整体的处理能力。这种扩展方式简单有效,能够根据业务需求灵活调整资源。然而,随着节点数量的增加,尤其是在没有多租户环境的旧版本中,私有网络的带宽压力会显著增加,因为节点间需要进行频繁的数据块(GC块)交互。在多租户架构下,我们可以将特定的PDB(可插拔数据库)放置在一到两个或两到三个节点上,这样可以控制集群内的全局缓存(GC)块交互,减轻私有网络的压力。

在网络层面,RAC可以充分利用几乎所有的网络基础架构,无论是电口还是光纤,甚至是InfiniBand、RoCE等基于RDMA的交换机,RAC都能够直接使用,无需额外配置。此外,无论是公共网络还是私有网络,甚至是存储网络,都可以通过多种方式实现高可用性,如网络绑定或多路径技术,这些网络之间可以互不影响。

对于存储而言,无论是FCSAN、IPSAN的集中存储,还是高性能的分布式存储,RAC都能够提供良好的支持。在某些情况下,如Oracle的一体机中,实际上使用的是分布式存储,这种存储以多副本的方式运行,通常以三副本的形式存在,能够线性扩展性能。

RAC 架构的难点

1、Cache Fusion

在讨论了Oracle RAC的优势之后,我们现在来探讨它面临的一些挑战和难点。其中一个主要问题就是缓存融合(Cache Fusion)的问题。

在RAC环境中,为了保持数据的一致性,每个数据块通常只在一个节点上缓存。这里需要区分的是,缓存一个数据块并不等同于将它保存在内存中。实际上,每个全局缓存(Global Cache)块会有一个主节点负责。在没有启用Dynamic Resource Management(DRM)的情况下,数据块会固定在一个节点上。但是,如果启用了从Oracle 10g R2开始引入的DRM功能,数据块可能会根据负载在节点间移动。尽管如此,目前并不推荐启用DRM,因为它可能会带来一些问题,因此数据块通常还是限定在某个节点上。

当涉及到跨节点操作时,就需要通过私有网络进行数据的传输和融合。这就涉及到如何在不同节点间高效地传输和融合数据,同时降低操作延迟,并满足事务的ACID要求,这是一个相当复杂的问题。此外,我们还看到了一些类似于RAC的架构,其中每个节点可能会缓存相同的数据。这意味着全局需要进行数据管理和事务管理,这增加了内存、网络和计算协调的压力。例如,如果我们有一份常用数据在三个节点的RAC架构中都进行了缓存,当我们在一个节点上对数据进行操作时,数据库需要更新本地的块信息,同时向共享存储写入数据,并横向地向其他节点同步数据,这无疑增加了系统的复杂性和压力。

为进一步说明这一点,我昨天画了一个关于RAC中全局缓存块的简图,其中展示了为什么会有数据的复制(copy)和移动(move)。这是因为DRM的存在,数据可能会根据实际情况在节点间复制或移动。然而,由于实际情况的判定可能会导致一些问题和bug,所以我们通常不会启用DRM功能。

image.png

图6 RAC 难点

总的来说,尽管RAC提供了强大的高可用性和高性能特性,但在实际应用中,它也面临着缓存融合、跨节点数据管理带来的挑战。解决这些问题需要深入的技术知识和精细的系统调优。

在Oracle RAC环境中,数据库节点和计算节点是两个核心组成部分。具体来说,数据库实例在计算节点上运行,涉及到内存、进程以及共享存储。共享存储不一定要是集中式存储,关键是每个节点都能访问到存储。当我们在实际应用中遇到关联查询时,例如两个数据块A和B分别缓存在节点1和节点2上,这时就会产生一些特定的操作。一个SELECT语句通过负载均衡被分配到节点2上的实例2,这时就需要通过私有网络进行数据块的传输和融合。如果操作不涉及开启DRM,那么数据块A在完成关联操作后其变更会被分会到节点1,完成后在节点2上的GC会被释放;如果涉及DRM,则数据块A可能会驻留在节点2,节点1上的GC会被释放。无论哪种方式数据库出现DML操作,对应变更都将写入共享存储中。

在网络层面,除了心跳检测,私有网络还负责处理数据块的变动。无论是公共网络还是私有网络,都可以使用各种网络基础架构,包括以太网、光纤、InfiniBand、RoCE等。这些网络可以无缝使用,无需额外配置。

对于存储而言,无论是FCSAN、IPSAN的集中存储,还是高性能的分布式存储,RAC都能够提供良好的支持。在某些情况下,如Oracle的一体机中,实际上使用的是分布式存储,这种存储以多副本的方式运行,通常以三副本的形式存在,能够线性扩展性能。

2、ASM
Oracle RAC的另一个挑战是ASM存储。通常,使用裸盘或其他类似NFS的架构时,存储I/O的利用率并不高。ASM在这里扮演着重要角色,可以高效地利用存储资源。

3、软硬结合
此外,软硬融合也是RAC的一个优势。例如,使用RDMA网络可以显著提高整个集群的性能。RDMA可以用于降低全局缓存的延迟,如果存储使用IP SAN,也可以降低I/O延迟,并且可以充分利用内存飞翼式内存和直接连接到NVMe的SSD,从而极大降低延迟并提高I/O效率。

4、其他
最后,集群元数据的高效管理和高性能的事务管理也是RAC的难点之一。在管理RAC时,可能会遇到全局事务管理等后台服务,这些服务并没有使用单独的组件,而是包含在数据库内部。

Oracle RAC虽然在高可用性和性能方面具有明显优势,但在实施过程中面临一系列复杂的技术挑战。这些挑战不仅要求对系统架构有深刻的理解,还需要具备高水平的技术调优能力。以上就是我今天的全部分享,谢谢大家!

更多精彩内容,欢迎大家观看现场视频回放与会议资料
视频回放:https://www.modb.pro/video/10140
会议资料:https://www.modb.pro/doc/136257

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

星星之火
暂无图片
3月前
评论
暂无图片 0
Clusterware:它负责管理集群中的节点、服务和资源。Clusterware确保了集群的高可用性和资源管理。它还负责监听服务、自动存储管理(ASM)以及资源的分配和管理
3月前
暂无图片 点赞
评论
阮胜昌
暂无图片
5月前
评论
暂无图片 0
Oracle ACE 尹海文:Oracle RAC的优势与难点
5月前
暂无图片 点赞
评论
N
nick_liu
暂无图片
6月前
评论
暂无图片 0
Oracle ACE 尹海文:Oracle RAC的优势与难点
6月前
暂无图片 点赞
评论
舒悦
暂无图片
6月前
评论
暂无图片 0
Oracle ACE 尹海文:Oracle RAC的优势与难点
6月前
暂无图片 点赞
评论
乐呵呵
暂无图片
6月前
评论
暂无图片 0
RAC(Real Application Clusters)技术是Oracle数据库的核心特性之一,旨在实现高可用性和负载均衡。随着企业对数据可用性和性能需求的不断提升,RAC成为了保障数据库系统稳定运行的重要工具。
6月前
暂无图片 点赞
评论
筱悦星辰
暂无图片
6月前
评论
暂无图片 0
每个人的时间都是宝贵的,守时不仅是一种礼貌,更是一种承诺的体现。越守时的人,往往越值得信赖。
6月前
暂无图片 点赞
评论
查看更多 >