Oracle RAC 架构深度解析

Oracle RAC 架构深度解析

适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07


1. 概述

RAC(Real Application Clusters)多实例共享存储[1]:

特性

  • 多实例
  • 共享存储
  • Cache Fusion
  • 高可用

详细见:Oracle RAC 架构详解


2. RAC 架构

2.1 组件

- 多节点
- 共享存储(ASM / SAN)
- 集群件(Grid Infrastructure)
- Cache Fusion
- 私有网络
- 公共网络

2.2 单实例 vs RAC

特性单实例RAC
实例1N
存储独占共享
高可用
扩展垂直水平

3. Grid Infrastructure

3.1 组件

- OHASD(Oracle High Availability Service Daemon)
- CSSD(Cluster Synchronization Service Daemon)
- CRSD(Cluster Ready Service Daemon)
- EVMD(Event Manager Daemon)
- ASM
- Listener

3.2 Voting Disk

- 节点仲裁
- 多数票
- 防止脑裂

3.3 OCR(Oracle Cluster Registry)

- 集群配置
- 多副本
- 镜像

4. Cache Fusion

4.1 概念

- 内存间数据传输
- 跨实例读
- 跨实例写

4.2 流程

1. 实例 A 请求块
2. 块在实例 B Buffer Cache
3. 实例 B 通过私有网络传给 A
4. A 缓存

4.3 锁

  • Past Image(PI)
  • 锁升级
  • GCS(Global Cache Service)

5. GCS / GES

5.1 GCS(Global Cache Service)

- 块级锁
- Cache Fusion
- LMS 进程

5.2 GES(Global Enqueue Service)

- 队列锁
- 全局锁
- LMD 进程

6. RAC 进程

6.1 LMS

- Lock Manager Server
- Cache Fusion 块传输

6.2 LMD

- Lock Manager Daemon
- 全局锁管理
- 死锁检测

6.3 LMON

- Lock Monitor
- 集群成员管理
- 节点加入/离开

6.4 LCKn

- Lock Process
- 非 Cache Fusion 资源

7. 服务

7.1 创建

BEGIN
  DBMS_SERVICE.CREATE_SERVICE(
    service_name => 'oltp_svc',
    network_name => 'oltp_svc'
  );
END;
/

srvctl add service -db orcl -service oltp_svc -preferred orcl1,orcl2
srvctl start service -db orcl -service oltp_svc

7.2 TAF(Transparent Application Failover)

- 客户端透明故障切换
- SELECT 继续
- 事务重连

7.3 FCF(Fast Connection Failover)

- 连接池
- 快速故障切换
- ODP.NET / UCP

8. 负载均衡

8.1 客户端

LOAD_BALANCE = YES
FAILOVER = ON

8.2 服务端

- Listener 负载
- 服务路由

9. VIP

9.1 概念

- Virtual IP
- 节点失败快速切换
- 应用重连

9.2 配置

srvctl add vip -node rac1 -address rac1-vip/255.255.255.0/eth0

10. SCAN

10.1 概念

- Single Client Access Name
- 单一连接点
- 3 个 IP

10.2 优势

- 客户端无需改连接串
- 节点增删透明
- 负载均衡

11. 故障切换

11.1 节点失败

1. 集群检测
2. VIP 迁移
3. 服务重定位
4. 客户端重连
5. 事务回滚

11.2 实例失败

- CRS 自动重启
- 重启失败则重定位

12. 性能

12.1 GC 等待

- gc cr block 2-way
- gc cr block 3-way
- gc current block 2-way
- Cache Fusion 性能

12.2 优化

- 私有网络高速
- UDP
- Jumbo Frame
- 减少跨节点访问

详细见:Oracle RAC 性能调优


13. 监控

13.1 集群

crsctl stat res -t
crsctl check cluster -all

13.2 实例

SELECT 
  inst_id, instance_name, host_name, status 
FROM gv$instance;

13.3 GC

SELECT 
  inst_id, event, total_waits, time_waited
FROM gv$system_event
WHERE event LIKE 'gc%';

13.4 服务

srvctl status service -db orcl

14. 管理

14.1 启停

# 集群
crsctl start cluster -all
crsctl stop cluster -all

# 节点
crsctl start crs
crsctl stop crs

14.2 数据库

srvctl start database -db orcl
srvctl stop database -db orcl

14.3 实例

srvctl start instance -db orcl -instance orcl1
srvctl stop instance -db orcl -instance orcl1

详细见:Oracle RAC 部署实战


15. 常见坑与排错

15.1 脑裂

- 私有网络断
- Voting Disk 仲裁
- 少数节点驱逐

15.2 GC 性能

- 跨节点访问多
- 服务分区
- 应用层优化

15.3 CSSD 失败

- Voting Disk 问题
- 重启节点

16. 最佳实践

  1. 私有网络:万兆 + 冗余
  2. Jumbo Frame:性能
  3. ASM 共享存储:现代
  4. SCAN:客户端
  5. 服务分区:减少 GC
  6. VIP:快速故障切换
  7. TAF/FCF:应用
  8. 监控 GC:性能
  9. 测试故障:高可用
  10. 文档化:架构

17. 参考资料

[1] Oracle Real Application Clusters Administration and Deployment Guide 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/racad/