Oracle RAC 26ai双节点部署实战:从环境准备到高可用验证
如果你曾经在凌晨三点被数据库单点故障的告警电话叫醒或者经历过因为硬件维护导致业务停摆的尴尬时刻那么 Oracle RACReal Application Clusters对你来说可能不仅仅是一个技术方案而是保障业务连续性的生命线。但很多人在初次接触 RAC 时容易陷入一个误区认为只要把两个节点装上 Oracle 软件、连上共享存储就能自动获得高可用性。实际上RAC 部署中最容易出问题的往往不是软件安装本身而是前期环境准备和后期运维细节——特别是网络规划、共享存储配置和集群状态监控这三个关键环节。今天我们就以 Oracle 26ai 版本在 Linux 环境下的双节点 RAC 部署为例从实战角度拆解每个步骤背后的原理和注意事项。这不是一个简单的操作手册而是一个让你真正理解 RAC 工作机制的完整指南。1. 为什么 RAC 部署的关键在环境准备而不是软件安装很多人一拿到 RAC 安装包就急着运行安装程序结果在中间步骤频繁报错。实际上Oracle RAC 对底层环境的要求极为严格90% 的安装失败都源于环境配置不当。1.1 网络规划RAC 的神经系统RAC 集群依赖三套独立的网络体系每套网络都有不可替代的作用Public Network公网负责客户端连接和日常管理通信。在实际部署中建议使用绑定bonding模式提高可靠性。比如使用 mode1active-backup确保单网卡故障时自动切换# 查看网卡绑定状态 cat /proc/net/bonding/bond0Private Network私网是节点间的心跳网络负责缓存融合Cache Fusion数据同步。这是 RAC 性能的关键所在必须满足两个硬性要求网络延迟必须低于 1 毫秒必须使用专用交换机或 VLAN绝对禁止与公网混用你可以用以下命令测试私网质量# 测试延迟和丢包率 ping -c 100 -s 1472 192.168.10.11 # 使用更专业的网络测试工具 yum install -y iperf3 # 在节点2启动服务端 iperf3 -s # 在节点1测试带宽和抖动 iperf3 -c 192.168.10.11 -t 60 -JStorage Network存储网络如果使用 iSCSI 或 NFS 等基于 IP 的存储方案需要独立的网络通道。在企业环境中通常采用光纤通道FC或 NVMe over Fabrics 获得更低延迟。1.2 共享存储RAC 的心脏RAC 的核心思想是多个节点共享同一份数据。这意味着所有节点必须能够同时读写相同的磁盘设备。Oracle 官方推荐的方案是 ASMAutomatic Storage Management它本质上是一个专门为 Oracle 数据库设计的卷管理器。ASM 的优势不仅在于自动条带化和镜像更重要的是它与 Oracle 数据库内核深度集成能够感知数据块的热度并智能分布 I/O 负载。在规划 ASM 磁盘时要注意以下几点每个 ASM 磁盘应该来自不同的物理磁盘或 RAID 组避免单点故障建议使用 4MB 的分配单元AU_SIZE平衡大表扫描和小事务的性能为不同的用途创建独立的磁盘组DATA数据文件、FRA恢复文件、OCR集群注册信息1.3 操作系统一致性避免隐性问题RAC 要求所有节点的操作系统版本、内核版本、软件包版本完全一致。一个常见的坑是两个节点看似配置相同但细微的时区设置或语言环境差异可能导致集群软件行为异常。# 检查系统一致性 # 节点1执行后将命令输出保存为文件 cat /etc/os-release uname -r rpm -qa | sort node1_rpms.list # 节点2执行相同操作后对比差异 diff node1_rpms.list node2_rpms.list如果发现不一致的软件包需要先统一环境再继续安装。这一步虽然繁琐但能避免后续很多难以排查的问题。2. 分步实操从零构建双节点 RAC 集群环境准备就绪后我们进入具体的安装流程。Oracle RAC 安装分为两个主要阶段先安装 Grid Infrastructure集群基础架构再安装 Database 软件并创建数据库。2.1 第一阶段Grid Infrastructure 部署Grid Infrastructure 是 RAC 的基石包含集群管理、存储管理和高可用服务。安装前需要确认以下关键点用户和权限配置创建专用的操作系统用户和组。注意权限分离原则# 创建必要的用户组 groupadd -g 54321 oinstall groupadd -g 54322 dba groupadd -g 54323 oper groupadd -g 54324 asmdba groupadd -g 54325 asmoper groupadd -g 54326 asmadmin # 创建 Grid Infrastructure 用户 useradd -u 54321 -g oinstall -G asmadmin,asmdba,asmoper,dba,oper grid # 创建 Database 用户稍后使用 useradd -u 54322 -g oinstall -G dba,oper,asmdba oracle共享存储初始化配置 ASM 磁盘。这里演示使用 Oracle ASMLib 的方式# 安装 ASMLib 工具包 yum install -y oracleasm-support oracleasmlib oracleasm-uname -r # 配置 ASMLib oracleasm configure -i # 按照提示设置默认用户和组 # 扫描磁盘设备 oracleasm scandisks oracleasm listdisks # 创建 ASM 磁盘 oracleasm createdisk DATA_DISK01 /dev/sdb1 oracleasm createdisk DATA_DISK02 /dev/sdc1 oracleasm createdisk FRA_DISK01 /dev/sdd1安装 Grid Infrastructure使用静默安装方式更适合生产环境。准备响应文件是关键# 解压安装包 unzip linuxx64_26ai_grid_home.zip -d /u01/app/26ai/grid # 创建响应文件模板 ./grid/runInstaller -generateResponseFile -destinationFile /home/grid/grid.rsp # 编辑响应文件重点配置以下参数 # oracle.install.optionHA_CONFIG # ORACLE_HOSTNAMEnode1 # ORACLE_BASE/u01/app/grid # INVENTORY_LOCATION/u01/app/oraInventory # SELECTED_LANGUAGESen,zh_CN # oracle.install.asm.OSDBAasmdba # oracle.install.asm.OSOPERasmoper # oracle.install.asm.OSASMasmadmin # oracle.install.crs.config.gpnp.scanNamerac-scan.example.com # oracle.install.crs.config.gpnp.scanPort1521 # 执行静默安装 ./grid/runInstaller -silent -responseFile /home/grid/grid.rsp -ignorePrereqFailure安装完成后以 root 身份在两个节点依次执行配置脚本# 在节点1执行 /u01/app/oraInventory/orainstRoot.sh /u01/app/26ai/grid/root.sh # 在节点2执行 /u01/app/26ai/grid/root.sh2.2 第二阶段Database 软件安装和数据库创建Grid Infrastructure 就绪后开始安装 Database 软件。这里有个重要决策点是使用 Oracle Universal Installer 图形界面还是静默安装对于生产环境我强烈推荐静默安装。不仅因为效率高更重要的是可以版本化控制安装参数便于后续重复部署和自动化管理。Database 软件安装# 解压安装包 unzip linuxx64_26ai_database.zip -d /u01/app/oracle/software # 准备响应文件 ./database/runInstaller -generateResponseFile -destinationFile /home/oracle/db.rsp # 关键配置参数 # oracle.install.optionINSTALL_DB_SWONLY # UNIX_GROUP_NAMEoinstall # ORACLE_HOME/u01/app/oracle/product/26ai/dbhome_1 # ORACLE_BASE/u01/app/oracle # oracle.install.db.InstallEditionEE # oracle.install.db.OSDBAdba # oracle.install.db.OSOPERoper # oracle.install.db.OSBACKUPdba # 静默安装 ./database/runInstaller -silent -responseFile /home/oracle/db.rsp使用 DBCA 创建 RAC 数据库这是最关键的步骤很多配置一旦设定就很难修改。# 启动 DBCA 静默模式 dbca -silent \ -createDatabase \ -templateName General_Purpose.dbc \ -gdbName racdb.example.com \ -sid racdb \ -characterSet AL32UTF8 \ -createAsContainerDatabase true \ -numberOfPDBs 1 \ -pdbName pdb1 \ -useLocalUndoForPDBs true \ -sid racdb \ -sysPassword YourSysPass123! \ -systemPassword YourSystemPass123! \ -emConfiguration NONE \ -storageType ASM \ -diskGroupName DATA \ -recoveryGroupName FRA \ -sampleSchema true \ -databaseConfigType RAC \ -nodelist node1,node2 \ -totalMemory 4096创建完成后立即验证集群状态-- 检查实例状态 SELECT instance_name, host_name, status, database_status FROM gv$instance; -- 验证缓存融合功能 SELECT inst_id, name, value FROM gv$sysstat WHERE name LIKE %gc% AND value 0; -- 检查 ASM 磁盘组使用情况 SELECT name, total_mb, free_mb, usable_file_mb FROM v$asm_diskgroup;3. 安装后的关键验证确保高可用真正生效数据库创建成功只是第一步真正的考验是验证高可用功能是否按预期工作。很多团队在安装后只是简单测试连接就认为大功告成结果真正发生故障时才发现配置有问题。3.1 基础功能验证连接负载均衡测试RAC 应该能够将新连接均匀分布到各个节点。# 使用 SCAN 地址连接观察连接分配到哪个节点 sqlplus system/YourSystemPass123!rac-scan.example.com:1521/racdb # 在数据库内查看当前连接的实例 SELECT instance_name FROM v$instance;透明应用故障切换TAF测试模拟节点故障验证会话是否自动迁移。-- 在节点1上创建一个测试会话 INSERT INTO test_taf VALUES (1, 测试数据, SYSDATE); COMMIT; -- 突然关闭节点1的数据库实例 ALTER SYSTEM DISCONNECT SESSION sid,serial# IMMEDIATE; -- 在原来的会话中继续操作应该自动切换到节点2 SELECT * FROM test_taf;3.2 性能基准测试RAC 环境下的性能特征与单实例有很大不同需要特别关注缓存融合的开销。-- 测试跨节点数据访问性能 -- 在节点1上创建测试表 CREATE TABLE perf_test AS SELECT * FROM dba_objects; -- 在节点2上频繁访问该表 DECLARE v_count NUMBER; BEGIN FOR i IN 1..1000 LOOP SELECT COUNT(*) INTO v_count FROM perf_test; END LOOP; END; / -- 监控全局缓存效率 SELECT inst_id, name, value FROM gv$sysstat WHERE name IN (global cache blocks received, global cache blocks served);理想的缓存命中率应该在 90% 以上。如果发现过多的跨节点数据块传输可能需要调整数据分布或应用设计。3.3 故障恢复演练定期进行有计划的故障演练是保证 RAC 可靠性的关键。以下是一个标准的演练清单网络故障演练临时断开私网连接观察集群如何反应存储故障演练模拟一块 ASM 磁盘故障验证镜像保护机制节点故障演练正常关闭一个节点验证服务自动切换脑裂场景演练模拟网络分区验证投票磁盘机制每次演练后都要详细记录恢复时间和数据一致性状态不断完善应急预案。4. 生产环境运维要点从能用走向好用RAC 安装成功只是开始长期稳定运行需要建立完善的运维体系。以下是容易被忽视但至关重要的实践要点。4.1 监控体系构建基础的集群状态监控是必要的但还不够。一个完整的 RAC 监控体系应该包括集群层监控# 定期检查集群状态 crsctl status resource -t # 监控节点间网络延迟 cluvfy comp health -n all -verbose数据库层监控-- 监控全局队列性能 SELECT * FROM v$cr_block_server; -- 监控实例间锁竞争 SELECT * FROM v$dlm_stats;应用层监控通过业务视角验证集群健康度比如关键事务的响应时间分布。4.2 备份恢复策略RAC 环境的备份恢复比单实例更复杂需要特别注意使用 RMAN 备份时确保连接到正确的实例定期验证备份的可用性特别是归档日志的连续性制定详细的灾难恢复流程明确各种故障场景下的恢复步骤# RAC 环境下的 RMAN 备份示例 rman target sys/YourSysPass123!racdb1 RUN { ALLOCATE CHANNEL ch1 DEVICE TYPE DISK CONNECT sys/YourSysPass123!racdb1; ALLOCATE CHANNEL ch2 DEVICE TYPE DISK CONNECT sys/YourSysPass123!racdb2; BACKUP DATABASE PLUS ARCHIVELOG; RELEASE CHANNEL ch1; RELEASE CHANNEL ch2; }4.3 性能优化持续进行RAC 性能优化是一个持续的过程重点关注以下几个方面应用设计优化尽量减少跨实例的数据访问通过数据分区将相关数据放在同一实例上。数据库参数调优特别注意与集群相关的参数如cluster_database_instances、cluster_interconnects等。系统资源规划定期评估硬件资源使用情况提前规划扩容方案。5. 常见问题深度排查从现象到根因即使按照最佳实践部署RAC 环境中仍然可能出现各种问题。关键在于建立系统化的排查思路。5.1 节点驱逐问题排查节点被意外驱逐是 RAC 环境中最严重的问题之一。排查思路如下检查集群日志首先查看$GRID_HOME/log/hostname/alerthostname.log分析时间线确定驱逐发生的确切时间关联系统日志和网络监控数据网络质量分析检查私网在故障时间点的延迟和丢包率资源竞争分析检查当时是否有资源瓶颈导致心跳超时5.2 性能问题排查RAC 性能问题往往比单实例更复杂需要多维度分析-- 快速定位性能瓶颈的查询 SELECT inst_id, event, total_waits, time_waited_micro FROM gv$system_event WHERE wait_class Idle ORDER BY time_waited_micro DESC; -- 检查跨实例等待事件 SELECT * FROM v$waitclassmetric WHERE wait_class_name Cluster;5.3 连接管理问题连接池配置不当是 RAC 环境常见的问题源确保连接字符串正确使用 SCAN 地址验证负载均衡配置是否生效检查连接超时和故障切换设置监控连接分布是否均衡Oracle RAC 的部署和运维确实比单实例数据库复杂得多但这种复杂性换来的是业务连续性的质的提升。真正的价值不在于安装成功的那一刻而在于当硬件故障、网络中断或其他意外情况发生时业务能够几乎无感知地继续运行。最重要的是要把 RAC 看作一个完整的体系而不仅仅是软件组合。从前期规划、中期部署到后期运维每个环节都需要严谨的态度和系统化的方法。只有这样RAC 才能真正成为支撑关键业务的可靠基石。

相关新闻

Nino:C#与Unity高性能序列化库的设计原理与实战应用

Nino:C#与Unity高性能序列化库的设计原理与实战应用

1. 项目概述:为什么我们需要Nino? 如果你是一个C#或Unity开发者,尤其是在处理网络通信、数据持久化或者跨平台数据交换时,肯定对序列化这个概念不陌生。简单来说,序列化就是把一个内存中的对象,转换成一串可…

2026/10/13 0:31:16 阅读更多 →
免费开源直播录制软件 OBS Studio 32.2.0 发布,新增功能、变更及多项错误修复!

免费开源直播录制软件 OBS Studio 32.2.0 发布,新增功能、变更及多项错误修复!

免费开源的视频录制与直播串流软件 OBS Studio 32.2.0 正式发布,带来新功能、变更及众多错误修复,提升使用体验。新功能亮点OBS Studio 32.2.0 有诸多新功能。如将 add source dropdown 替换为新对话框,前端 API 增添复制粘贴功能&#xff0c…

2026/10/6 21:36:33 阅读更多 →
UE5 C++与UnLua脚本交互实战:接口调用与Lua栈操作详解

UE5 C++与UnLua脚本交互实战:接口调用与Lua栈操作详解

1. 项目概述:为什么要在UE5 C中调用UnLua?在虚幻引擎5(UE5)的开发中,我们常常面临一个经典的选择:用蓝图还是用C?蓝图可视化、上手快,适合快速原型和逻辑设计;C性能高、控…

2026/10/6 11:29:55 阅读更多 →

最新新闻

RevitLookup 2020 编译与加载配置:Revit 二次开发调试工具实战

RevitLookup 2020 编译与加载配置:Revit 二次开发调试工具实战

简介:RevitLookup 2020是一款面向Revit二次开发人员的实用工具,用于快速浏览和检查Revit模型中的元素数据,在API调试和功能验证中非常有用。压缩包共包含161个文件,大小仅1.05MB,既有可直接部署的RevitLookup.addin与d…

2026/10/14 13:33:33 阅读更多 →
Entity Framework Core开发模式与性能优化实战

Entity Framework Core开发模式与性能优化实战

1. Entity Framework 核心概念解析Entity Framework(简称EF)作为.NET平台的主流ORM框架,本质上解决了对象模型与关系数据库之间的"阻抗不匹配"问题。我在实际项目中最常遇到的情况是:业务代码中定义了一个Customer类&am…

2026/10/14 13:33:33 阅读更多 →
Entity Framework Core实战:ORM原理与性能优化指南

Entity Framework Core实战:ORM原理与性能优化指南

1. 项目概述Entity Framework(EF)作为.NET生态中最受欢迎的ORM框架,已经陪伴我们走过了15个年头。记得2012年我刚接触EF4.3时,手动编写SQL语句的日子终于看到了曙光。如今EF Core 8的发布,让这个框架在性能、功能和易用…

2026/10/14 13:33:33 阅读更多 →
ANTLR4语法解析实战:从基础到高级应用

ANTLR4语法解析实战:从基础到高级应用

1. ANTLR4 基础与核心价值 ANTLR(ANother Tool for Language Recognition)是当前最流行的语言识别工具之一,其第四代版本ANTLR4通过改进的LL(*)解析算法和自适应预测机制,大幅提升了语法解析的效率和容错能力。作为语言工程的瑞士…

2026/10/14 13:33:33 阅读更多 →
HyperFrames:AI代理确定性视频渲染框架的架构与实战

HyperFrames:AI代理确定性视频渲染框架的架构与实战

视频渲染这件事,放在传统视频工程里,讲究的是“出片快、画质好、成本低”。但一旦放到 AI 代理(AI Agent)这个场景里,衡量标准就完全变了:渲染结果必须是确定性的。同样的输入、同样的决策序列,…

2026/10/14 13:33:33 阅读更多 →
fabric.js绘制直线:从基础到进阶实战

fabric.js绘制直线:从基础到进阶实战

1. 项目概述在Web前端开发中,Canvas绘图是一个非常重要的技能点。而fabric.js作为一款强大的Canvas库,能够大大简化我们操作Canvas的过程。今天我们就来聊聊如何使用fabric.js在画布上添加最基本的图形元素——直线。作为一个长期使用fabric.js的开发者&…

2026/10/14 13:32:31 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →