Oracle RAC环境使用及说明

 更新时间:2026年06月25日 09:25:18   作者:六月雨滴  
这篇文章主要介绍了Oracle RAC环境使用及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Oracle RAC 全称 Real Application Clusters(真正应用集群),是 Oracle 数据库提供的企业级高可用与横向扩展架构

简单来说:多个独立的服务器(节点)同时运行同一个 Oracle 数据库,所有节点共享同一份物理数据文件,对外表现为一个统一的数据库服务。

一、RAC 核心架构(5 大关键组件)

RAC 是一个 "多实例、单数据库" 的架构,与传统单实例数据库(一个实例对应一个数据库)有本质区别。

客户端 → 监听器(负载均衡) → 节点1实例/节点2实例/... → 共享存储(数据文件/控制文件/日志文件)
                ↓
          高速私有互联(Cache Fusion)

1、集群节点(Cluster Nodes)

  • 2~100 + 台 独立的物理 / 虚拟服务器,每台称为一个 "节点"
  • 每个节点运行自己的操作系统和 Oracle 数据库实例
  • 节点之间通过高速私有网络(通常是万兆以太网或 InfiniBand)互联

2、Oracle Grid Infrastructure(集群件)

  • RAC 的基础平台,必须单独安装在所有节点上
  • 核心功能:集群节点管理、资源调度、故障检测、VIP 漂移、ASM 存储管理
  • 包含两个关键服务:CRS(Cluster Ready Services)和 ASM(Automatic Storage Management)

3、共享存储(Shared Storage)

  • 所有节点必须能同时访问的集中式存储
  • 存储类型:SAN(存储区域网络)、NAS(网络附加存储)、Exadata 存储服务器
  • 存储内容:数据文件、控制文件、联机重做日志、归档日志、SPFILE 参数文件
  • 注意:只有数据是共享的,每个节点的内存和 CPU 是独立的

4、数据库实例(Database Instances)

  • 每个节点运行一个独立的 Oracle 实例(内存 + 后台进程)
  • 所有实例共同访问同一个物理数据库
  • 每个实例有自己的 SGA(系统全局区)和后台进程
  • 实例之间通过 Cache Fusion(缓存融合) 技术同步数据

5、监听器与服务(Listeners & Services)

  • 客户端通过数据库服务名连接,而不是直接连接某个节点
  • SCAN(Single Client Access Name)监听器提供统一的连接入口
  • 自动实现连接负载均衡故障转移

二、RAC 核心技术:Cache Fusion(缓存融合)

这是 RAC 区别于其他集群数据库的最核心技术,也是 RAC 高性能的关键。

  • 传统集群问题:多个节点修改同一数据时,需要频繁写入磁盘同步,性能极差
  • Cache Fusion 解决方案:数据块直接在节点的内存之间通过高速私有网络传输,不需要写入磁盘

工作流程

  1. 节点 A 需要修改数据块 X,发现节点 B 的缓存中已经有该数据块
  2. 节点 A 通过私有网络向节点 B 发送请求
  3. 节点 B 将数据块 X 的最新版本直接发送给节点 A
  4. 节点 A 修改数据块 X,然后通过私有网络通知其他节点该数据块已更新

三、RAC vs 单实例数据库对比

特性Oracle 单实例Oracle RAC
架构一个实例对应一个数据库多个实例对应一个数据库
高可用性单点故障:服务器宕机则数据库不可用无单点故障:一个节点宕机,其他节点自动接管
可扩展性只能纵向扩展(升级单台服务器 CPU / 内存)可以横向扩展(增加更多节点)
性能受限于单台服务器的硬件能力可以利用多台服务器的 CPU 和内存资源
维护成本低,配置简单高,需要专业的集群管理技能
硬件成本高,需要共享存储和高速网络

四、RAC 的主要优势

1、极致高可用性(99.99%+)

  • 节点级故障自动转移:一个节点宕机,连接会自动切换到其他正常节点
  • 滚动升级:可以逐个节点升级数据库和操作系统,不中断业务
  • 计划内停机时间几乎为零

2、线性横向扩展

  • 当业务量增长时,只需添加新的节点即可提升数据库性能
  • 理论上可以扩展到上百个节点(实际生产环境通常 2~8 个节点)

3、负载均衡

  • 连接时负载均衡:新连接自动分配到负载较轻的节点
  • 运行时负载均衡:可以将不同的业务负载分配到不同的节点

4、资源管理

  • 可以为不同的业务服务分配不同的节点和资源
  • 避免关键业务被非关键业务影响

五、RAC 的适用场景与不适用场景

1、适用场景

  • 核心 OLTP 系统:银行核心交易系统、电信计费系统、电商订单系统
  • 需要 7×24 小时不间断运行的关键业务系统
  • 业务量持续增长,单节点无法满足性能需求的系统
  • 对计划内停机时间要求严格的系统

2、不适用场景

  • 小型应用:单节点完全能满足需求,RAC 会增加不必要的复杂度和成本
  • 大量长查询的 OLAP 系统:Cache Fusion 会产生大量的网络流量,反而降低性能
  • 预算有限的项目:RAC 需要昂贵的共享存储和 Oracle 企业版许可证
  • 缺乏专业 DBA 团队的企业:RAC 的管理和排错比单实例复杂得多

六、常见误解澄清

  1. RAC 不是备份解决方案:RAC 只能防止节点级故障,不能防止数据损坏或误删除,仍然需要定期备份
  2. RAC 不是性能万能药:如果应用设计不好(比如存在大量热点数据),RAC 性能可能比单实例还差
  3. RAC 不能代替容灾:RAC 只能解决本地机房的节点故障,不能解决机房级灾难,需要配合 Data Guard 使用

七、总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • GoLang中Json Tag用法实例总结

    GoLang中Json Tag用法实例总结

    这篇文章主要给大家介绍了关于GoLang中Json Tag用法的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-02-02
  • Golang Goroutine的使用

    Golang Goroutine的使用

    这篇文章主要介绍了Golang Goroutine的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • golang RPC包原理和使用详细介绍

    golang RPC包原理和使用详细介绍

    golang的rpc支持三个级别的RPC:TCP、HTTP、JSONRPC。但Go的RPC包是独一无二的RPC,它和传统的RPC系统不同,它只支持Go开发的服务器与客户端之间的交互,因为在内部,它们采用了Gob来编码
    2022-09-09
  • Golang工具库viper的使用教程

    Golang工具库viper的使用教程

    viper 是 go 项目中用来读取配置文件的库,支持读取 yaml、toml、json、hcl、env 等格式的配置文件,下面就来和大家聊聊它的具体使用吧
    2023-07-07
  • GO语言基本类型String和Slice,Map操作详解

    GO语言基本类型String和Slice,Map操作详解

    这篇文章主要为大家介绍了GO语言基本类型String和Slice,Map操作示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • 一文带你深入了解Golang中的自旋锁

    一文带你深入了解Golang中的自旋锁

    自旋锁是一种忙等待锁,当一个线程尝试获取一个已经被其它线程持有的锁时,这个线程会持续循环检查锁的状态(即“自旋”) ,直到锁被释放后获得所有权,下面我们就来深入了解下自旋锁的具体操作吧
    2024-01-01
  • go语言中的面向对象

    go语言中的面向对象

    Go不支持类,而是提供了结构体。结构体中可以添加属性和方法。这样可以将数据和操作数据的方法绑定在一起,实现与类相似的效果。这篇文章介绍了go语言中的面向对象,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • 深入了解Golang中的格式化输出

    深入了解Golang中的格式化输出

    fmt是Go语言中用于控制文本输出的常用标准库,文中将通过示例详细讲解一下Go语言中不同形式的格式化输出,感兴趣的小伙伴可以了解一下
    2022-11-11
  • Golang实现常见的限流算法的示例代码

    Golang实现常见的限流算法的示例代码

    限流是项目中经常需要使用到的一种工具,一般用于限制用户的请求的频率,也可以避免瞬间流量过大导致系统崩溃,或者稳定消息处理速率,本文主要介绍了使用Go实现常见的限流算法,希望对大家有所帮助
    2023-04-04
  • 快速上手GO的net/http包

    快速上手GO的net/http包

    本文主要介绍了快速上手GO的net/http包,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-05-05

最新评论