Skip to content

Oracle RAC 集群架构

RAC 架构组件

硬件组件

服务器节点

  • 计算节点:运行Oracle数据库实例的服务器
  • 硬件要求:建议使用相同配置的服务器,确保负载均衡
  • 网络接口:每个节点需要至少两个网络接口,分别用于公共网络和私有网络

存储系统

  • 共享存储:所有节点共享的存储设备,存储数据库数据文件
  • 存储协议:支持SAN、NAS、iSCSI等存储协议
  • ASM存储:推荐使用Oracle Automatic Storage Management (ASM)管理共享存储
  • 存储冗余:建议使用RAID等冗余技术,提高存储可靠性

网络组件

  • 公共网络:用于客户端连接和集群节点间通信
  • 私有网络:用于节点间心跳通信和缓存融合
  • 网络要求:私有网络建议使用千兆或万兆以太网,公共网络根据客户端需求配置
  • 网络冗余:建议配置多网卡绑定,提高网络可靠性

软件组件

Oracle Clusterware

  • 集群管理:管理集群资源和节点状态
  • 资源监控:监控集群资源的健康状态
  • 故障转移:当资源故障时,自动将资源转移到健康节点
  • 集群同步:确保集群节点间的状态同步

Oracle Database

  • 数据库实例:每个节点上运行的数据库实例
  • 实例间通信:通过缓存融合技术实现实例间数据一致性
  • 全局缓存服务:管理实例间的缓存同步
  • 全局队列服务:管理实例间的锁定和并发控制

Oracle ASM

  • 存储管理:管理共享存储设备
  • 条带化:自动将数据分布到多个磁盘,提高I/O性能
  • 镜像:提供数据冗余,提高存储可靠性
  • 动态存储:支持在线添加和移除存储设备

RAC 工作原理

缓存融合

  • 概念:RAC的核心技术,实现多个实例对共享数据的并发访问
  • 工作原理:当一个实例需要访问另一个实例缓存的数据时,通过高速私有网络直接传输数据块,而不是从磁盘读取
  • 优势:减少I/O操作,提高性能,确保数据一致性

全局缓存服务 (GCS)

  • 功能:管理实例间的数据块传输和一致性
  • 数据块状态:跟踪数据块的当前状态(共享、独占等)
  • 锁管理:管理数据块级别的锁定
  • 性能优化:通过优化数据块传输,减少网络流量

全局队列服务 (GES)

  • 功能:管理实例间的锁定和并发控制
  • 队列管理:管理各种类型的锁队列
  • 死锁检测:检测和解决死锁情况
  • 资源协调:协调实例间的资源分配

心跳机制

  • 功能:监控集群节点的健康状态
  • 通信方式:通过私有网络发送心跳消息
  • 超时检测:当节点心跳超时,判定节点故障
  • 故障处理:当检测到节点故障,启动故障转移流程

资源管理

  • 资源类型:包括数据库实例、监听器、服务等
  • 资源依赖:管理资源之间的依赖关系
  • 资源状态:监控资源的状态(在线、离线、故障等)
  • 资源启动:按照依赖顺序启动资源

RAC 部署规划

硬件规划

服务器规划

  • 节点数量:根据业务需求和负载情况确定,一般2-8个节点
  • 服务器配置:根据数据库大小和并发用户数确定CPU、内存配置
  • 硬件一致性:建议使用相同配置的服务器,确保负载均衡
  • 扩展考虑:预留足够的扩展空间,方便后续添加节点

存储规划

  • 存储容量:根据数据库大小和增长预测确定
  • 存储性能:根据I/O需求选择适当的存储设备
  • 存储冗余:配置适当的RAID级别,确保数据安全
  • ASM磁盘组:合理规划ASM磁盘组,分离数据、日志和备份

网络规划

  • 网络拓扑:设计合理的网络拓扑,分离公共网络和私有网络
  • 带宽需求:私有网络建议使用千兆或万兆以太网
  • 网络冗余:配置多网卡绑定,提高网络可靠性
  • 网络延迟:确保私有网络延迟低,提高缓存融合性能

软件规划

版本选择

  • Oracle版本:选择稳定的Oracle版本,建议使用最新的长期支持版本
  • 补丁级别:确保安装最新的补丁,修复已知问题
  • 操作系统:选择Oracle支持的操作系统版本
  • 依赖软件:确保安装所有必要的依赖软件

集群配置

  • Clusterware配置:配置集群名称、节点名称、网络设置等
  • 数据库配置:配置数据库名称、实例名称、参数文件等
  • ASM配置:配置ASM磁盘组、故障组等
  • 服务配置:配置数据库服务、负载均衡策略等

高可用性规划

故障转移规划

  • 故障检测:配置适当的心跳超时设置
  • 故障转移策略:选择适当的故障转移类型(会话、选择、无)
  • 服务配置:配置服务的故障转移属性
  • 测试计划:制定详细的故障转移测试计划

备份恢复规划

  • 备份策略:制定适合RAC环境的备份策略
  • 恢复计划:制定详细的数据库恢复计划
  • 备份验证:定期验证备份的有效性
  • 灾难恢复:考虑异地灾难恢复方案

监控规划

  • 监控工具:选择适合RAC环境的监控工具
  • 监控指标:确定关键监控指标
  • 告警设置:配置适当的告警阈值
  • 响应流程:制定监控告警的响应流程

RAC 配置管理

集群配置

集群安装

bash
# 安装前准备
# 配置内核参数
# 安装依赖包
# 配置网络
# 配置存储

# 安装Grid Infrastructure
./runInstaller

# 安装数据库软件
./runInstaller

# 创建数据库
dbca

集群管理命令

bash
# 检查集群状态
crsctl status cluster

# 检查资源状态
crsctl status resource -t

# 启动集群
crsctl start cluster

# 停止集群
crsctl stop cluster

# 检查集群日志
crsctl log

数据库配置

参数文件配置

sql
-- 查看RAC特定参数
SELECT name, value FROM v$parameter WHERE name LIKE '%cluster%' OR name LIKE '%rac%';

-- 修改RAC特定参数
ALTER SYSTEM SET CLUSTER_DATABASE=TRUE SCOPE=SPFILE;
ALTER SYSTEM SET INSTANCE_NUMBER=1 SCOPE=SPFILE SID='orcl1';
ALTER SYSTEM SET INSTANCE_NUMBER=2 SCOPE=SPFILE SID='orcl2';
ALTER SYSTEM SET THREAD=1 SCOPE=SPFILE SID='orcl1';
ALTER SYSTEM SET THREAD=2 SCOPE=SPFILE SID='orcl2';

服务配置

bash
# 创建服务
srvctl add service -d orcl -s sales -r orcl1,orcl2 -a orcl1,orcl2 -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,orcl2 -a orcl1,orcl2

# 查看服务状态
srvctl status service -d orcl

ASM 配置

ASM 磁盘组管理

sql
-- 创建ASM磁盘组
CREATE DISKGROUP DATA EXTERNAL REDUNDANCY DISK '/dev/sdb1', '/dev/sdc1';

-- 增加ASM磁盘
ALTER DISKGROUP DATA ADD DISK '/dev/sdd1';

-- 移除ASM磁盘
ALTER DISKGROUP DATA DROP DISK '/dev/sdb1';

-- 检查ASM磁盘组状态
SELECT name, state, total_mb, free_mb FROM v$asm_diskgroup;

ASM 实例配置

sql
-- 查看ASM实例参数
SELECT name, value FROM v$parameter WHERE instance_name LIKE '%ASM%';

-- 修改ASM实例参数
ALTER SYSTEM SET ASM_POWER_LIMIT=5 SCOPE=BOTH;

RAC 性能优化

硬件优化

服务器优化

  • CPU配置:根据工作负载类型选择适当的CPU配置
  • 内存配置:确保每个节点有足够的内存,避免内存交换
  • I/O配置:使用高性能存储设备,配置适当的RAID级别
  • 网络配置:使用万兆以太网作为私有网络,减少网络延迟

存储优化

  • ASM配置:合理规划ASM磁盘组,分离数据、日志和备份
  • 条带化:使用适当的条带大小,提高I/O性能
  • 镜像:根据数据重要性选择适当的冗余级别
  • I/O均衡:确保I/O负载均衡分布在多个磁盘上

网络优化

  • 私有网络:使用单独的网络接口和交换机
  • 网络绑定:配置多网卡绑定,提高网络带宽和可靠性
  • MTU设置:适当调整MTU大小,提高网络传输效率
  • 网络监控:监控网络性能,及时发现网络问题

软件优化

数据库参数优化

sql
-- 调整缓存融合相关参数
ALTER SYSTEM SET GCS_SERVER_PROCESSES=4 SCOPE=SPFILE;
ALTER SYSTEM SET GES_PROCESSES=20 SCOPE=SPFILE;
ALTER SYSTEM SET PARALLEL_MAX_SERVERS=128 SCOPE=SPFILE;
ALTER SYSTEM SET PROCESSES=1000 SCOPE=SPFILE;

-- 调整内存参数
ALTER SYSTEM SET SGA_TARGET=8G SCOPE=SPFILE;
ALTER SYSTEM SET PGA_AGGREGATE_TARGET=2G SCOPE=SPFILE;

-- 调整I/O相关参数
ALTER SYSTEM SET DB_WRITER_PROCESSES=4 SCOPE=SPFILE;
ALTER SYSTEM SET DB_FILE_MULTIBLOCK_READ_COUNT=16 SCOPE=SPFILE;

服务配置优化

bash
# 配置服务的负载均衡策略
srvctl modify service -d orcl -s sales -B SERVICE_TIME

# 配置服务的连接负载均衡
srvctl modify service -d orcl -s sales -j LONG

# 配置服务的故障转移属性
srvctl modify service -d orcl -s sales -e SELECT -m BASIC

SQL优化

  • 使用绑定变量:减少硬解析,提高共享池利用率
  • 优化SQL语句:避免全表扫描,使用适当的索引
  • 并行执行:对于大型查询,考虑使用并行执行
  • 分区表:对于大型表,考虑使用分区表

资源管理

资源限制

sql
-- 创建资源计划
CREATE RESOURCE PLAN rac_plan;

-- 创建资源消费者组
CREATE CONSUMER GROUP oltp_group;
CREATE CONSUMER GROUP olap_group;

-- 分配资源
ALTER RESOURCE PLAN rac_plan ADD GROUP oltp_group PERCENTAGE 70;
ALTER RESOURCE PLAN rac_plan ADD GROUP olap_group PERCENTAGE 30;

-- 启用资源计划
ALTER SYSTEM SET RESOURCE_MANAGER_PLAN='rac_plan' SCOPE=BOTH;

负载均衡

  • 连接负载均衡:配置客户端连接负载均衡
  • 运行时负载均衡:配置服务运行时负载均衡
  • 工作量管理:使用资源管理器分配资源
  • 动态负载均衡:根据节点负载动态分配工作负载

会话管理

  • 会话限制:限制每个用户的会话数
  • 空闲会话:及时终止空闲会话,释放资源
  • 长运行会话:监控长运行会话,避免资源占用
  • 会话迁移:在节点维护时,将会话迁移到其他节点

RAC 监控

集群监控

监控工具

  • Oracle Enterprise Manager:提供全面的RAC监控功能
  • Grid Control:集中管理多个RAC集群
  • Cloud Control:云环境中的RAC监控
  • 自定义脚本:编写自定义脚本监控特定指标

关键监控指标

  • 集群状态:节点状态、资源状态
  • 网络状态:私有网络延迟、丢包率
  • 存储状态:ASM磁盘组状态、I/O性能
  • 实例状态:实例可用性、资源使用情况
  • 服务状态:服务可用性、故障转移次数

监控视图

sql
-- 查看集群状态
SELECT * FROM V$CLUSTER_INSTANCES;

-- 查看实例状态
SELECT * FROM V$INSTANCE;

-- 查看缓存融合统计
SELECT * FROM V$GCS_STATISTICS;

-- 查看等待事件
SELECT * FROM V$SESSION_WAIT WHERE WAIT_CLASS != 'Idle';

-- 查看服务状态
SELECT * FROM DBA_SERVICES;

性能监控

AWR报告

  • 生成AWR报告@$ORACLE_HOME/rdbms/admin/awrrpt.sql
  • 分析AWR报告:关注集群特定的性能指标
  • 比较AWR报告:比较不同时间段的性能变化
  • 基线分析:建立性能基线,识别性能偏差

ADDM分析

  • 运行ADDM:通过Enterprise Manager或命令行运行ADDM
  • 分析结果:分析ADDM提供的性能建议
  • 实施建议:根据ADDM建议优化系统
  • 验证效果:验证优化措施的效果

实时监控

  • 实时会话监控V$SESSION视图
  • 实时SQL监控V$SQL_MONITOR视图
  • 实时等待事件V$SESSION_WAIT视图
  • 实时系统状态V$SYSTEM_EVENT视图

RAC 故障处理

常见故障类型

节点故障

  • 硬件故障:服务器硬件故障
  • 操作系统故障:操作系统崩溃或挂起
  • 网络故障:私有网络故障导致节点隔离
  • 存储故障:节点无法访问共享存储

实例故障

  • 实例崩溃:数据库实例异常终止
  • 内存不足:实例因内存不足而崩溃
  • 死锁:实例因死锁而无法响应
  • 资源耗尽:实例因资源耗尽而无法处理请求

服务故障

  • 服务不可用:数据库服务无法访问
  • 故障转移失败:服务故障转移失败
  • 负载均衡问题:服务负载均衡失效
  • 连接问题:客户端无法连接到服务

故障诊断

日志分析

  • 集群日志$GRID_HOME/log/目录下的集群日志
  • 数据库告警日志$ORACLE_BASE/diag/rdbms/*/*/trace/alert_*.log
  • 监听器日志$ORACLE_BASE/diag/tnslsnr/*/*/trace/listener.log
  • ASM日志$ORACLE_BASE/diag/asm/*/*/trace/alert_*.log

诊断工具

  • Clusterware诊断crsctl diag命令
  • 数据库诊断adrci命令
  • 网络诊断pingtraceroutenetstat等命令
  • 存储诊断asmcmdfdisk等命令

故障隔离

  • 节点隔离:确定故障是否局限于单个节点
  • 服务隔离:确定故障是否局限于特定服务
  • 组件隔离:确定故障涉及的具体组件
  • 影响评估:评估故障对业务的影响

故障恢复

节点恢复

bash
# 启动故障节点
crsctl start cluster -n node_name

# 检查节点状态
crsctl status node -n node_name

# 检查资源状态
crsctl status resource -t

# 验证服务可用性
srvctl status service -d db_name

实例恢复

bash
# 启动数据库实例
srvctl start instance -d db_name -i instance_name

# 检查实例状态
SELECT status FROM v$instance;

# 验证实例功能
SELECT * FROM dual;

服务恢复

bash
# 启动服务
srvctl start service -d db_name -s service_name

# 检查服务状态
srvctl status service -d db_name -s service_name

# 验证服务可用性
sqlplus user/password@service_name

故障预防

定期维护

  • 补丁应用:定期应用Oracle补丁
  • 硬件检查:定期检查服务器硬件状态
  • 存储检查:定期检查存储设备状态
  • 网络检查:定期检查网络设备和连接

健康检查

  • 集群健康检查:定期运行集群健康检查脚本
  • 数据库健康检查:定期运行数据库健康检查脚本
  • 性能健康检查:定期分析性能指标
  • 安全健康检查:定期进行安全审计

应急演练

  • 故障转移演练:定期进行故障转移测试
  • 恢复演练:定期进行数据库恢复测试
  • 升级演练:在测试环境中演练升级过程
  • 灾难恢复演练:定期进行灾难恢复测试

版本差异

Oracle 10g RAC

  • 集群软件:使用Oracle Clusterware 10g
  • 存储管理:支持ASM 10g
  • 故障转移:支持基本的故障转移功能
  • 负载均衡:支持基本的负载均衡功能
  • 管理工具:使用DBCA和SRVCTL管理

Oracle 11g RAC

  • 集群软件:使用Oracle Clusterware 11g
  • 存储管理:支持ASM 11g,增强了存储管理功能
  • 故障转移:增强了故障转移功能,支持更灵活的故障转移策略
  • 负载均衡:增强了负载均衡功能,支持更多负载均衡策略
  • 管理工具:增强了管理工具,提供更多管理选项

Oracle 12c及以上 RAC

  • 集群软件:使用Oracle Clusterware 12c及以上
  • 存储管理:支持ASM 12c及以上,增强了存储管理功能
  • 多租户:支持多租户架构
  • Flex Cluster:支持灵活集群架构
  • 应用连续性:增强了应用连续性功能
  • 管理工具:增强了管理工具,提供更多自动化功能

最佳实践

部署最佳实践

  • 标准化部署:使用标准化的部署流程和配置
  • 文档记录:详细记录部署过程和配置
  • 测试验证:在生产部署前进行充分的测试
  • 变更管理:建立严格的变更管理流程

管理最佳实践

  • 定期监控:建立完善的监控机制
  • 性能优化:定期进行性能优化
  • 备份验证:定期验证备份的有效性
  • 安全审计:定期进行安全审计

故障处理最佳实践

  • 快速响应:建立快速响应机制,及时处理故障
  • 故障记录:详细记录故障处理过程和结果
  • 根因分析:深入分析故障原因,避免类似问题再次发生
  • 持续改进:根据故障经验,持续改进系统和流程

性能最佳实践

  • 资源规划:根据业务需求,合理规划资源
  • 负载均衡:确保工作负载均衡分布在所有节点上
  • 缓存融合:优化私有网络,提高缓存融合性能
  • SQL优化:定期优化SQL语句,提高查询性能
  • 存储优化:合理规划存储,提高I/O性能

常见问题(FAQ)

Q1: RAC集群中一个节点故障,其他节点性能下降严重,如何解决?

A1: RAC集群中一个节点故障,其他节点性能下降严重可能是由以下原因导致的:

  • 负载不均衡:故障节点的工作负载转移到其他节点,导致资源竞争
  • 缓存融合开销:节点减少后,缓存融合开销增加
  • 资源不足:其他节点资源不足以处理额外的工作负载
  • 连接风暴:故障转移导致大量连接同时重建

解决方法:

  • 增加节点资源:确保每个节点有足够的资源处理峰值负载
  • 优化缓存融合:使用高速私有网络,减少网络延迟
  • 调整连接池:配置合理的应用连接池,避免连接风暴
  • 实施资源管理:使用资源管理器分配资源,确保关键业务优先
  • 快速恢复故障节点:尽快恢复故障节点,分担工作负载

Q2: RAC集群中出现脑裂(Split-Brain)现象,如何解决?

A2: 脑裂是RAC集群中的严重问题,当集群节点无法相互通信时,可能导致集群分裂成多个子集群,每个子集群都认为自己是唯一的活跃集群。

解决方法:

  • 配置表决磁盘:使用奇数个表决磁盘,避免脑裂
  • 网络冗余:配置多个私有网络,提高网络可靠性
  • 合理的超时设置:设置适当的心跳超时时间
  • 隔离故障节点:当检测到脑裂时,及时隔离故障节点
  • 人工干预:在必要时,通过强制手段恢复集群

Q3: 如何优化RAC集群的缓存融合性能?

A3: 优化RAC集群的缓存融合性能可以从以下几个方面入手:

  • 网络优化:使用万兆以太网作为私有网络,减少网络延迟
  • 网络配置:配置多网卡绑定,提高网络带宽和可靠性
  • 内存配置:确保每个节点有足够的内存,减少缓存竞争
  • 参数优化:调整GCS_SERVER_PROCESSES、GES_PROCESSES等参数
  • SQL优化:减少跨节点数据访问,避免全表扫描
  • 存储优化:使用高性能存储,减少I/O等待

Q4: RAC集群如何进行滚动升级?

A4: RAC集群的滚动升级允许在不中断服务的情况下升级软件版本:

滚动升级步骤:

  1. 准备工作:备份数据库,阅读升级文档
  2. 升级前检查:运行升级前检查脚本
  3. 节点隔离:将一个节点从集群中隔离
  4. 升级节点:在隔离的节点上应用补丁
  5. 节点重集成:将升级后的节点重集成到集群
  6. 服务迁移:将服务迁移到升级后的节点
  7. 重复过程:对其他节点重复上述过程
  8. 验证升级:验证所有节点和服务正常运行

Q5: 如何在RAC集群中添加新节点?

A5: 在RAC集群中添加新节点的步骤:

  1. 准备工作:准备新服务器,配置网络和存储
  2. 安装Grid Infrastructure:在新节点上安装Grid Infrastructure
  3. 添加节点到集群:使用addnode.sh脚本将节点添加到集群
  4. 安装数据库软件:在新节点上安装数据库软件
  5. 添加数据库实例:使用dbca或手动添加数据库实例
  6. 配置服务:将新节点添加到服务的首选或可用节点列表
  7. 验证配置:验证新节点和实例正常运行
  8. 负载测试:测试新节点的负载处理能力

Q6: RAC集群中,如何处理节点间的时间同步问题?

A6: RAC集群中,节点间的时间同步非常重要,不一致的时间可能导致各种问题:

解决方法:

  • 配置NTP服务:所有节点配置相同的NTP服务器
  • 时间同步检查:定期检查节点间的时间差异
  • 时间同步监控:监控NTP服务状态
  • 时间同步告警:设置时间差异告警阈值
  • 手动同步:在必要时,手动同步节点时间

Q7: 如何监控RAC集群的缓存融合性能?

A7: 监控RAC集群的缓存融合性能可以通过以下方法:

  • 使用V$GCS_STATISTICS视图:监控缓存融合统计信息
  • 使用V$GCSPFMASTER_INFO视图:监控全局缓存服务主节点信息
  • 使用V$GC_ELEMENTS视图:监控全局缓存元素
  • 分析AWR报告:关注AWR报告中的缓存融合部分
  • 监控网络性能:监控私有网络的延迟和带宽使用情况
  • 使用Oracle Enterprise Manager:通过OEM监控缓存融合性能

Q8: RAC集群与Data Guard结合使用时,需要注意什么?

A8: RAC集群与Data Guard结合使用时,需要注意以下几点:

  • 主库配置:确保RAC主库配置正确,所有节点都能正常运行
  • 备库配置:备库可以是单实例或RAC配置
  • 日志传输:确保所有节点的归档日志都能正确传输到备库
  • 角色转换:在执行切换或故障转移时,确保所有节点都能正确处理
  • 监控:同时监控RAC集群和Data Guard状态
  • 测试:定期测试角色转换和故障转移过程
  • 文档:详细记录RAC与Data Guard的配置和操作流程

Q9: 如何评估RAC集群的可扩展性?

A9: 评估RAC集群的可扩展性可以从以下几个方面入手:

  • 性能测试:通过添加节点,测试系统处理能力的增长情况
  • 线性扩展:评估系统性能是否随节点增加而线性增长
  • 瓶颈识别:识别系统扩展的瓶颈,如存储I/O、网络带宽等
  • 资源利用率:监控各节点的资源利用率,确保负载均衡
  • 缓存融合开销:评估随着节点增加,缓存融合开销的增长情况
  • 成本效益:评估添加节点的成本与性能提升的比例

Q10: RAC集群的维护窗口如何规划?

A10: RAC集群的维护窗口规划需要考虑以下因素:

  • 业务需求:根据业务需求,选择业务低峰期作为维护窗口
  • 维护类型:根据维护类型(补丁应用、硬件升级等)确定维护窗口长度
  • 滚动维护:对于支持滚动维护的操作,使用滚动方式减少停机时间
  • 通知机制:提前通知相关人员和用户
  • 备份策略:在维护前执行数据库备份
  • 回滚计划:制定详细的回滚计划,以防维护失败
  • 验证步骤:制定维护后的验证步骤,确保系统正常运行
  • 文档记录:详细记录维护过程和结果