Skip to content

Oracle RAC 架构

Oracle RAC 架构概述

Oracle Real Application Clusters (RAC) 是 Oracle 数据库的高可用性和可扩展性解决方案,允许多个数据库实例同时访问同一个数据库存储。RAC 通过共享存储和高速集群互连,实现了数据库的高可用性、负载均衡和水平扩展。RAC 适用于对可用性和性能要求较高的关键业务系统,如金融、电信、电子商务等。

RAC 的核心优势

  • 高可用性:当单个节点故障时,其他节点可以继续提供服务,避免单点故障
  • 负载均衡:多个节点可以分担数据库负载,提高系统的整体性能
  • 水平扩展:可以通过添加节点轻松扩展系统容量,无需停机
  • 滚动升级:支持在不中断服务的情况下进行数据库升级和维护
  • 资源共享:多个节点共享存储和数据库资源,提高资源利用率

RAC 架构的基本概念

  • 集群节点:参与 RAC 集群的服务器
  • 数据库实例:每个节点上运行的 Oracle 数据库实例
  • 共享存储:所有节点共享的存储设备,用于存储数据库文件
  • 集群互连:节点之间的高速通信网络,用于实例间通信
  • Clusterware:集群管理软件,负责节点管理、资源管理和故障检测

RAC 架构组件

1. 硬件组件

1.1 服务器节点

  • 节点配置:每个节点通常配置相同的硬件规格,包括 CPU、内存、存储和网络
  • 节点数量:Oracle RAC 支持 2 到 128 个节点,具体取决于数据库版本和硬件限制

1.2 共享存储

  • 存储类型

    • 光纤通道存储区域网络 (FC SAN)
    • iSCSI SAN
    • Network Attached Storage (NAS)(需要特定配置)
    • Oracle Automatic Storage Management (ASM) 支持的存储
  • 存储配置

    • 数据文件、控制文件、重做日志文件存储在共享存储上
    • 每个节点的参数文件 (spfile) 通常存储在共享存储上,或通过 Clusterware 管理

1.3 网络组件

  • 公共网络:用于客户端连接和节点间的普通通信
  • 私有网络/集群互连:用于节点间的高速通信,如 Cache Fusion 数据传输
    • 推荐使用 InfiniBand 或 10Gbps 以上的以太网
    • 建议配置冗余的私有网络,提高可靠性

2. 软件组件

2.1 Oracle Clusterware

Oracle Clusterware 是 RAC 集群的核心管理组件,负责:

  • 节点管理:节点的加入、退出和故障检测
  • 资源管理:数据库实例、监听器、服务等资源的管理
  • 故障转移:当节点故障时,将资源转移到其他节点
  • 集群时间同步:确保所有节点的时间一致

2.2 Oracle ASM (Automatic Storage Management)

ASM 是 Oracle 提供的存储管理解决方案,专为 Oracle 数据库设计:

  • 自动管理磁盘组、卷和文件
  • 提供条带化和镜像功能,提高性能和可靠性
  • 支持在线添加和移除磁盘
  • 简化存储管理,减少 DBA 工作量

2.3 Oracle Database with RAC Option

  • 包含 RAC 特定的数据库内核功能
  • 支持 Cache Fusion 技术,实现实例间的数据共享
  • 提供服务管理功能,支持客户端连接的负载均衡和故障转移

3. 核心技术组件

3.1 Cache Fusion

Cache Fusion 是 RAC 的核心技术,允许不同节点的数据库实例共享缓冲区缓存:

  • 当一个节点需要访问另一个节点缓存中的数据块时,通过集群互连直接获取,无需从磁盘读取
  • 支持数据块的当前版本和一致性读取
  • 减少磁盘 I/O,提高系统性能
  • 确保数据的一致性和完整性

3.2 Global Resource Directory (GRD)

GRD 维护集群中所有资源的状态信息,包括:

  • 数据块的位置和状态
  • 锁和资源的持有者
  • 缓存一致性信息

3.3 服务管理

RAC 服务允许将数据库工作负载分组和管理:

  • 可以为不同的应用程序创建不同的服务
  • 支持服务级别的负载均衡和故障转移
  • 允许在特定节点上运行特定服务
  • 支持服务的自动启动和停止

RAC 工作原理

1. 实例启动流程

  1. 节点上的 Oracle Clusterware 启动
  2. Clusterware 启动 ASM 实例(如果使用 ASM)
  3. Clusterware 启动数据库实例
  4. 数据库实例加入集群,注册到 GRD
  5. 实例开始接受客户端连接

2. 客户端连接流程

  1. 客户端通过 SCAN (Single Client Access Name) 或节点 VIP 连接到数据库
  2. 监听器将连接请求转发到适当的节点
  3. 连接被分配到一个数据库实例
  4. 实例处理客户端请求,如有需要通过 Cache Fusion 访问其他节点的数据

3. 故障检测与恢复流程

  1. Clusterware 定期向所有节点发送心跳信号
  2. 如果一个节点未能响应心跳,Clusterware 标记该节点为故障
  3. Clusterware 清理故障节点的资源
  4. 如果配置了故障转移,Clusterware 将故障节点上的服务转移到其他节点
  5. 其他节点继续提供服务,客户端可以重新连接

4. Cache Fusion 数据访问流程

  1. 节点 A 需要访问一个数据块
  2. 检查本地缓冲区缓存,发现数据块不在本地
  3. 通过 GRD 查找数据块的位置(节点 B)
  4. 节点 B 将数据块通过集群互连发送到节点 A
  5. 节点 A 将数据块放入本地缓冲区缓存并处理请求

RAC 部署架构

1. 标准 RAC 架构

  • 2 个或多个节点共享同一存储
  • 每个节点运行一个数据库实例
  • 节点间通过私有网络通信
  • 客户端通过公共网络访问数据库

2. RAC One Node

  • 单节点 RAC 部署,提供高可用性但不提供负载均衡
  • 支持在线节点迁移,无需停机即可移动实例
  • 适合对可用性要求较高但负载较低的应用

3. Extended RAC

  • 节点分布在不同的地理位置,通过高速网络连接
  • 提供灾难恢复能力,当一个数据中心故障时,另一个数据中心可以继续提供服务
  • 对网络延迟要求较高,通常需要专用的高速网络

4. Flex Cluster

  • Oracle 12c 及以上版本支持的新型 RAC 架构
  • 分为 Hub 节点和 Leaf 节点
  • Hub 节点直接访问共享存储,Leaf 节点通过 Hub 节点访问存储
  • 支持更大规模的集群,最多 1000 个节点

RAC 配置与管理

1. RAC 配置文件

  • spfile:通常存储在共享存储上,或通过 ASM 管理
  • tnsnames.ora:配置客户端连接信息,包括 SCAN 和服务名
  • listener.ora:配置监听器,支持 RAC 特定的参数
  • sqlnet.ora:配置网络相关参数

2. 常用 RAC 管理命令

2.1 集群状态检查

sql
-- 检查集群状态
$ crsctl status cluster -all

-- 检查资源状态
$ crsctl status resource -all

-- 检查节点状态
$ olsnodes -a -i -s

2.2 实例管理

sql
-- 启动所有实例
$ srvctl start database -d orcl

-- 启动特定实例
$ srvctl start instance -d orcl -i orcl1

-- 停止所有实例
$ srvctl stop database -d orcl

-- 停止特定实例
$ srvctl stop instance -d orcl -i orcl1

2.3 服务管理

sql
-- 创建服务
$ srvctl add service -d orcl -s sales -r orcl1,orcl2 -a orcl3,orcl4 -P BASIC

-- 启动服务
$ srvctl start service -d orcl -s sales

-- 停止服务
$ srvctl stop service -d orcl -s sales

-- 修改服务
$ srvctl modify service -d orcl -s sales -r orcl1,orcl3 -a orcl2,orcl4

2.4 数据库参数管理

sql
-- 修改集群级参数
ALTER SYSTEM SET parameter_name = value SCOPE=BOTH SID='*';

-- 修改特定实例参数
ALTER SYSTEM SET parameter_name = value SCOPE=BOTH SID='orcl1';

RAC 性能优化

1. 硬件优化

  • 使用高性能存储:如全闪存阵列,提高 I/O 性能
  • 配置高速集群互连:使用 InfiniBand 或 100Gbps 以太网
  • 均衡节点配置:确保所有节点的硬件规格相同
  • 足够的内存:每个节点配置足够的内存,减少 Cache Fusion 流量

2. 网络优化

  • 分离公共网络和私有网络:使用不同的物理网络
  • 优化私有网络配置:调整网络参数,如 MTU、缓冲区大小等
  • 配置网络冗余:使用多网卡绑定提高可靠性

3. 数据库优化

  • 使用服务管理:为不同的应用程序创建专用服务
  • 优化并行执行:根据节点数量调整并行度
  • 使用连接池:减少连接建立的开销
  • 优化 SQL 语句:减少不必要的数据访问和锁竞争

4. 存储优化

  • 使用 ASM:简化存储管理,提高性能和可靠性
  • 合理配置磁盘组:根据 I/O 类型创建不同的磁盘组
  • 使用适当的条带大小:根据存储类型和 I/O 模式调整条带大小
  • 启用 ASM 智能数据分布:提高数据分布的均匀性

Oracle 19c 和 21c RAC 新特性

Oracle 19c RAC 新特性

1. 自动索引支持

Oracle 19c RAC 支持自动索引功能,可以:

  • 自动创建、维护和删除索引
  • 支持跨节点的索引优化
  • 提高查询性能,减少 DBA 工作量

2. 增强的集群管理

  • 简化了集群的安装和配置
  • 增强了集群的监控和诊断功能
  • 提高了集群的可靠性和可用性

3. 多租户支持增强

  • 支持 PDB 级别的服务管理
  • 增强了 PDB 的迁移和管理功能
  • 提高了多租户环境下的性能和可扩展性

Oracle 21c RAC 新特性

1. 增强的 Flex Cluster

  • 进一步简化了 Flex Cluster 的配置和管理
  • 增强了 Leaf 节点的功能和性能
  • 支持更多的节点数量

2. 自动集群配置

  • 支持自动检测和配置集群环境
  • 简化了集群的部署和维护
  • 减少了人为错误的可能性

3. 增强的安全性

  • 支持透明数据加密 (TDE) 对 RAC 数据的保护
  • 增强了集群通信的安全性
  • 支持更细粒度的访问控制

RAC 最佳实践

1. 设计阶段最佳实践

  • 评估业务需求:确定是否需要 RAC,以及需要的节点数量
  • 选择合适的硬件:根据工作负载选择合适的服务器、存储和网络
  • 设计合理的网络架构:分离公共网络和私有网络,配置冗余
  • 规划存储布局:使用 ASM,根据 I/O 类型创建不同的磁盘组

2. 部署阶段最佳实践

  • 使用 Oracle 官方文档:参考官方文档进行安装和配置
  • 使用自动部署工具:如 Oracle Universal Installer (OUI) 或 Ansible
  • 进行彻底的测试:验证集群的高可用性、负载均衡和故障转移功能
  • 文档化配置:记录所有配置和参数设置

3. 运维阶段最佳实践

  • 定期监控集群状态:使用 Grid Control、OEM 或命令行工具
  • 监控性能指标:如 Cache Fusion 流量、I/O 性能、节点负载等
  • 定期备份:包括数据库备份和 Clusterware 备份
  • 进行定期维护:如补丁应用、统计信息收集等
  • 制定故障恢复计划:包括节点故障、存储故障等场景的恢复流程

常见问题(FAQ)

Q1: 什么时候需要使用 Oracle RAC?

A1: 当您的应用程序对可用性、可扩展性和性能有较高要求时,可以考虑使用 Oracle RAC。具体场景包括:

  • 关键业务系统,需要 24/7 可用性
  • 高并发应用,需要负载均衡
  • 快速增长的业务,需要水平扩展
  • 需要滚动升级和维护的系统

Q2: RAC 与 Data Guard 有什么区别?

A2: RAC 和 Data Guard 是 Oracle 提供的两种不同的高可用性解决方案:

  • RAC 提供单个数据库的高可用性和负载均衡,所有节点共享同一存储
  • Data Guard 提供数据库的冗余和灾难恢复,主库和备库使用独立的存储
  • 两者可以结合使用,提供更高级别的可用性和灾难恢复能力

Q3: 如何监控 RAC 集群的性能?

A3: 可以使用以下工具监控 RAC 集群的性能:

  • Oracle Enterprise Manager (OEM):提供图形化的监控界面
  • AWR 和 ASH 报告:提供详细的性能分析
  • 集群健康监控工具:如 Cluster Health Monitor (CHM)
  • 操作系统命令:如 top、vmstat、iostat 等

Q4: 如何处理 RAC 节点故障?

A4: 当 RAC 节点故障时,Clusterware 会自动处理:

  • 标记故障节点
  • 清理故障节点的资源
  • 将故障节点上的服务转移到其他节点
  • 客户端可以通过服务名重新连接到数据库

Q5: RAC 对应用程序有什么要求?

A5: RAC 对应用程序的要求主要包括:

  • 应用程序应该是无状态的,或使用会话状态管理
  • 应用程序应该使用服务名连接数据库,而不是实例名
  • 应用程序应该处理连接中断和重新连接
  • 应用程序应该避免长时间持有锁

Q6: 如何扩展 RAC 集群?

A6: 扩展 RAC 集群的步骤包括:

  • 准备新的服务器节点
  • 安装和配置 Clusterware
  • 将节点加入现有集群
  • 在新节点上安装数据库软件
  • 创建数据库实例
  • 配置服务和负载均衡

总结

Oracle RAC 是一个强大的高可用性和可扩展性解决方案,通过共享存储和高速集群互连,实现了数据库的高可用性、负载均衡和水平扩展。RAC 适用于对可用性和性能要求较高的关键业务系统,如金融、电信、电子商务等。

RAC 架构包括硬件组件(服务器、存储、网络)和软件组件(Clusterware、ASM、数据库),核心技术包括 Cache Fusion、GRD 和服务管理。Oracle 19c 和 21c 引入了许多新特性,如自动索引、增强的集群管理和多租户支持等,进一步提高了 RAC 的性能、可靠性和易用性。

在设计、部署和运维 RAC 集群时,需要遵循最佳实践,包括评估业务需求、选择合适的硬件、设计合理的网络架构、使用 ASM、定期监控和维护等。通过合理的配置和管理,可以充分发挥 RAC 的优势,为业务提供高可用性、高性能的数据库服务。