外观
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 orclASM 配置
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 BASICSQL优化
- 使用绑定变量:减少硬解析,提高共享池利用率
- 优化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命令 - 网络诊断:
ping、traceroute、netstat等命令 - 存储诊断:
asmcmd、fdisk等命令
故障隔离
- 节点隔离:确定故障是否局限于单个节点
- 服务隔离:确定故障是否局限于特定服务
- 组件隔离:确定故障涉及的具体组件
- 影响评估:评估故障对业务的影响
故障恢复
节点恢复
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集群的滚动升级允许在不中断服务的情况下升级软件版本:
滚动升级步骤:
- 准备工作:备份数据库,阅读升级文档
- 升级前检查:运行升级前检查脚本
- 节点隔离:将一个节点从集群中隔离
- 升级节点:在隔离的节点上应用补丁
- 节点重集成:将升级后的节点重集成到集群
- 服务迁移:将服务迁移到升级后的节点
- 重复过程:对其他节点重复上述过程
- 验证升级:验证所有节点和服务正常运行
Q5: 如何在RAC集群中添加新节点?
A5: 在RAC集群中添加新节点的步骤:
- 准备工作:准备新服务器,配置网络和存储
- 安装Grid Infrastructure:在新节点上安装Grid Infrastructure
- 添加节点到集群:使用addnode.sh脚本将节点添加到集群
- 安装数据库软件:在新节点上安装数据库软件
- 添加数据库实例:使用dbca或手动添加数据库实例
- 配置服务:将新节点添加到服务的首选或可用节点列表
- 验证配置:验证新节点和实例正常运行
- 负载测试:测试新节点的负载处理能力
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集群的维护窗口规划需要考虑以下因素:
- 业务需求:根据业务需求,选择业务低峰期作为维护窗口
- 维护类型:根据维护类型(补丁应用、硬件升级等)确定维护窗口长度
- 滚动维护:对于支持滚动维护的操作,使用滚动方式减少停机时间
- 通知机制:提前通知相关人员和用户
- 备份策略:在维护前执行数据库备份
- 回滚计划:制定详细的回滚计划,以防维护失败
- 验证步骤:制定维护后的验证步骤,确保系统正常运行
- 文档记录:详细记录维护过程和结果
