如果你曾经在凌晨三点被数据库单点故障的告警电话叫醒或者经历过因为硬件维护导致业务停摆的尴尬时刻那么 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 才能真正成为支撑关键业务的可靠基石。