
简介本资源是一份面向数据库管理员、云平台运维工程师及Oracle高可用架构实践者的实战部署指南聚焦华为云ECS环境下Oracle RAC 11.2.0.4集群的落地难题——尤其针对去IOE转型期常见的集群启动报错、双网卡心跳网业务网配置失当、ASM共享存储适配及Grid Infrastructure与数据库软件协同安装等关键痛点提供系统性解决方案。资源为单文件PDF文档2.25MB完整覆盖环境规划、操作系统预检、ASM配置、Grid安装、RAC数据库创建及集群验证全流程目录结构清晰含双节点ECS部署架构图、VPC子网划分说明、OCR/Voting Disk配置要点及DBCA建库实操指引。目前已有1136人学习下载内容基于2021年真实生产环境编写版本明确、修改记录完整可直接用于华为云RAC项目实施参考与排错复盘。1. 华为云ECS上部署Oracle RAC 11.2.0.4不是“云上装个集群”那么简单而是要亲手把裸金属级的高可用架构在虚拟化环境中稳稳托住很多人看到“华为云ECS Oracle RAC 11.2.0.4”这个组合第一反应是不就是照着Oracle官方文档在两台云服务器上装RAC吗——结果一上手就卡在ASM磁盘组创建失败、OCR磁盘无法识别、VIP漂移异常、甚至节点间心跳超时直接导致CRS无法启动。根本原因在于华为云ECS默认是KVM虚拟化环境而Oracle RAC 11.2.0.4对底层存储可见性、网络时延抖动、内核参数和udev规则的敏感度远高于单机Oracle或12c版本。它要求你像管理物理机房一样去调校每一块共享磁盘的IO路径、每一跳网络的MTU与ARP缓存、每一个内核模块的加载顺序。这不是“云迁移”而是“云重构”把传统RAC依赖的裸设备、多路径、私网隔离等能力在ECS的弹性资源约束下重新锚定。适合正在承接Oracle EBS、ERP核心库上云任务的DBA和系统架构师也适合需要验证RAC在公有云真实容灾能力的测试团队——但前提是你愿意花3天时间反复校验udev规则、反复重试ASM磁盘发现、反复抓包分析心跳包丢包率。本文不讲“能不能”只讲“怎么让11.2.0.4在华为云ECS上真正跑稳、可运维、能切主”。2. 环境准备从ECS选型到内核调优每一步都踩在RAC 11.2.0.4的硬性门槛上Oracle RAC 11.2.0.4对硬件和OS层的要求极为苛刻尤其在云环境下很多“看起来够用”的配置实际会触发CRS静默失败或ASM挂载超时。必须严格按以下清单逐项确认缺一不可。2.1 ECS规格与镜像选择避开华为云默认镜像的三大陷阱RAC 11.2.0.4官方仅认证CentOS 5.8/6.5/6.7、Oracle Linux 6.5/6.7UEK3华为云当前主流镜像CentOS 7.x / EulerOS 22.03均未被11.2.0.4官方支持。强行使用会导致ohasd服务无法注册、crsctl check crs始终返回CRS-4638: Oracle High Availability Services is online但实际CRS stack未启动。✅ 正确做法操作系统必须选用华为云市场中已下架但仍可手动导入的CentOS 6.7 x86_64镜像镜像ID通常以centos_67_64开头需联系华为云技术支持获取历史镜像快照ID或使用Oracle Linux 6.7 with Unbreakable Enterprise Kernel 3 (UEK3)—— 这是唯一被Oracle Metalink Note 1553103.1明确列出的11.2.0.4云平台兼容OS。ECS规格最小配置c6.large.22vCPU/4GB内存仅用于验证生产环境强制要求c6.xlarge.44vCPU/16GB内存及以上。RAC 11g的CSSD进程对内存压力极其敏感低于12GB会导致cssd频繁重启。存储类型必须使用华为云“超高IO”云硬盘SSD并启用“多副本”普通IO或通用型云硬盘因IO延迟抖动20ms会导致ASM disk discovery timeout。网络两台ECS必须部署在同一VPC、同一子网、同一安全组且需关闭该安全组的“源目的检查”Source/Dest Check否则私网心跳包被丢弃。提示华为云控制台创建ECS时“镜像”页签搜索oracle linux 6.7选择带UEK3标识的镜像若无则需通过OBS上传OL6.7 ISO并制作自定义镜像——这是绕过兼容性问题的唯一合法路径。2.2 共享存储配置用华为云云硬盘模拟裸设备关键在SCSI ID持久化与多路径映射RAC 11.2.0.4要求OCR/Voting Disk必须位于共享裸设备raw device而华为云不提供iSCSI/SAN直连。唯一合规方案是将一块云硬盘挂载为共享盘通过udev规则绑定固定SCSI ID并用multipath模拟多路径访问。# 在两台ECS上执行确保云硬盘已挂载为 /dev/xvdb # 1. 获取云硬盘的WWID华为云云硬盘WWID格式为 36000000000000000[盘ID] sudo scsi_id --whitelisted --replace-whitespace --device/dev/xvdb # 2. 创建udev规则/etc/udev/rules.d/99-oracle-asm.rules KERNELxvdb, SUBSYSTEMblock, PROGRAM/sbin/scsi_id --whitelisted --replace-whitespace --device/dev/$name, RESULT36000000000000000abcdef1234567890, SYMLINKasm-disk1, OWNERgrid, GROUPoinstall, MODE0660 # 3. 重载udev规则并触发 sudo udevadm control --reload-rules sudo udevadm trigger --subsystem-matchblock --actionadd✅ 关键点说明scsi_id命令输出的WWID必须与华为云控制台中该云硬盘的“云硬盘ID”完全一致去掉开头vol-补全16位十六进制SYMLINKasm-disk1生成的软链接/dev/asm-disk1将作为ASM磁盘路径所有后续安装步骤必须使用此路径而非/dev/xvdbOWNERgrid确保Grid Infrastructure安装用户可读写MODE0660防止其他用户误操作。2.3 内核与网络参数调优RAC心跳不稳先看这7个参数是否生效RAC 11.2.0.4的CSSD进程依赖稳定的UDP心跳默认端口42422而ECS虚拟网卡在高负载下易出现ARP缓存老化、TCP重传超时。必须在/etc/sysctl.conf中固化以下参数# /etc/sysctl.conf 中追加执行 sudo sysctl -p 生效 net.ipv4.ip_forward 0 net.ipv4.conf.all.rp_filter 0 net.ipv4.conf.default.rp_filter 0 net.ipv4.conf.all.arp_ignore 1 net.ipv4.conf.all.arp_announce 2 net.core.rmem_default 262144 net.core.wmem_default 262144 # 关键禁用TCP timestamps避免虚拟化环境时间戳错乱导致SYN重传 net.ipv4.tcp_timestamps 0 # 关键增大连接队列防CSSD连接拒绝 net.core.somaxconn 65535注意arp_ignore1和arp_announce2是解决ECS私网VIP漂移的核心——它强制节点只响应目标IP在本机接口上的ARP请求避免VIP被错误应答。若忽略此配置crsctl check crs可能显示正常但实际VIP无法ping通。3. Grid Infrastructure安装从静默安装到OCR初始化每一步都需人工校验Oracle 11.2.0.4的GI安装是RAC成败的关键其静默安装脚本runInstaller极易因环境变量缺失或权限错误静默失败。必须采用分步校验法而非一键执行。3.1 安装前预检用cluvfy跑通所有check否则不许启动安装在node1上解压GI安装包后必须先运行集群验证工具且所有check必须返回PASSED# 切换到grid用户非root su - grid cd /u01/app/11.2.0/grid/ ./runcluvfy.sh stage -pre crsinst -n node1,node2 -verbose # 重点检查项必须全部PASS # • Node Reachability → 检查两节点SSH免密互通 # • User Equivalence → grid用户在两节点UID/GID一致 # • System Requirements → 内存/CPU/swap满足swap≥2GB # • Cluster Manager Integrity → CRS相关进程未残留 # • OCR Integrity → /dev/asm-disk1可被grid读取✅ 若OCR Integrity失败执行ls -l /dev/asm-disk1确认权限为brw-rw---- 1 grid oinstall执行sudo /usr/lib/oracleasm/querydisk -d /dev/asm-disk1应返回Device /dev/asm-disk1 is marked an ASM disk with label DATA需提前用oracleasm createdisk打标见3.2节。3.2 静默安装GI用response file规避交互但必须手改3处关键字段grid_install.rsp是安装入口其中3个字段决定OCR能否成功初始化# grid_install.rsp 关键修改其他保持默认 oracle.install.optionCRS_CONFIG ORACLE_BASE/u01/app/grid INVENTORY_LOCATION/u01/app/oraInventory oracle.install.asm.OSDBAasmadmin oracle.install.asm.OSOPERasmoper oracle.install.asm.OSASMasmadmin # ↓↓↓ 必须修改为实际ASM磁盘路径 ↓↓↓ oracle.install.asm.diskGroup.nameOCR_VOTE oracle.install.asm.diskGroup.redundancyEXTERNAL # ↓↓↓ 必须填入udev生成的软链接不是/dev/xvdb ↓↓↓ oracle.install.asm.diskGroup.disks/dev/asm-disk1 # ↓↓↓ 密码必须8位以上含大小写字母数字不能含特殊字符 ↓↓↓ oracle.install.asm.diskGroup.passwordOracle123# 执行静默安装在node1上 ./runInstaller -silent -responseFile /path/to/grid_install.rsp -ignoreSysPrereqs -ignorePrereqFailure # 安装完成后按提示在node1/node2上分别执行root.sh sudo /u01/app/11.2.0/grid/root.sh逻辑说明oracle.install.asm.diskGroup.disks必须指向/dev/asm-disk1因为oracleasm工具只能识别udev绑定的路径EXTERNAL冗余模式是云环境唯一选择无第三方多路径软件密码不符合复杂度要求会导致asmca静默失败且无报错。3.3 OCR初始化后验证crsctl query css votedisk必须返回DISK路径安装完成后立即验证OCR和Voting Disk状态# 切换grid用户 su - grid # 1. 检查CSSD是否在线 crsctl check css # 2. 查看投票盘位置必须显示 /dev/asm-disk1 crsctl query css votedisk # 3. 查看OCR状态必须显示 HEALTHY ocrcheck # 4. 查看集群资源ora.cssd、ora.diskmon必须ONLINE crs_stat -t✅ 正常输出示例crsctl query css votedisk ## STATE File Universal Id File Name Disk group -- ----- ----------------- --------- --------- 1. ONLINE 1234567890abcdef1234567890abcdef (/dev/asm-disk1) []若votedisk显示MISSING或路径为空执行sudo /u01/app/11.2.0/grid/bin/crsctl replace votedisk OCR_VOTE强制重置若失败说明ASM实例未启动需检查/u01/app/grid/diag/crs/node1/crs/trace/alert.log中ORA-15032错误——大概率是/dev/asm-disk1权限或udev规则未生效。4. Oracle Database安装与RAC配置DBCA静默建库的3个致命陷阱GI安装成功后Database安装看似简单但DBCA静默建库dbca -silent在11.2.0.4中存在三个未文档化的坑导致数据库实例无法注册到CRS或监听器无法启动。4.1 数据库软件安装必须与GI同用户、同路径、同版本Oracle Database 11.2.0.4的安装介质必须与GI介质完全一致的Build Number如p13390677_112040_Linux-x86-64.zip且安装路径必须为/u01/app/oracle/product/11.2.0/db_1不能是db_2或11gR2。否则srvctl add database会报错PRKO-1010 : Invalid Oracle home。# 解压DB安装包后用静默方式安装node1上 ./runInstaller -silent -responseFile /path/to/db_install.rsp \ ORACLE_HOME/u01/app/oracle/product/11.2.0/db_1 \ ORACLE_BASE/u01/app/oracle \ oracle.install.db.InstallEditionEE \ oracle.install.db.isCustomInstallfalse # 安装完成后执行root.sh sudo /u01/app/oracle/product/11.2.0/db_1/root.sh4.2 DBCA静默建库-nodelist参数必须包含所有节点且顺序不能错DBCA静默建库命令中-nodelist参数的节点顺序决定了实例启动顺序。若顺序与crsctl stat res -t中ora.database.db资源的启动顺序不一致会导致第二个实例无法启动。# 正确命令node1上执行 dbca -silent -createDatabase \ -templateName General_Purpose.dbc \ -gdbname racdb \ -sid racdb \ -responseFile NO_VALUE \ -characterSet AL32UTF8 \ -sysPassword Oracle123 \ -systemPassword Oracle123 \ -dbsnmpPassword Oracle123 \ -datafileDestination DATA \ -redoLogFileSize 50 \ -emConfiguration NONE \ -nodelist node1,node2 \ -storageType ASM \ -asmsnmpPassword Oracle123 \ -diskGroupName DATA \ -recoveryAreaDestination FRA \ -recoveryAreaSize 20480✅ 关键点-nodelist node1,node2中node1必须是GI安装的主节点即执行root.sh的第一台-diskGroupName DATA必须与ASM中已创建的磁盘组名完全一致大小写敏感-recoveryAreaSize单位为MB20480即20GB小于10GB会导致归档空间不足。4.3 CRS注册与监听器配置srvctl add database后必须手动启动监听DBCA建库完成后数据库实例已注册到CRS但监听器listener.ora未自动生成必须手动配置# 1. 为每个节点创建监听器node1上 su - oracle netca -silent -responseFile /u01/app/oracle/product/11.2.0/db_1/network/admin/netca.rsp # 2. 将监听器注册到CRS srvctl add listener -l LISTENER -p TCP:1521 -o /u01/app/oracle/product/11.2.0/db_1 # 3. 启动监听器必须在node1和node2上分别执行 srvctl start listener -n node1 srvctl start listener -n node2 # 4. 验证监听状态 lsnrctl status LISTENER血泪经验netca静默配置监听器时netca.rsp中INSTALL_TYPE必须为custom且LISTENERS_LIST必须包含LISTENER若用typical监听器会绑定到localhost而非VIP导致远程客户端无法连接。5. 避坑指南RAC 11.2.0.4在华为云ECS上最常翻车的5个场景及根因修复RAC在云上部署的失败80%源于对“虚拟化环境与物理环境差异”的低估。以下是我在12个生产环境部署中总结的5个高频、隐蔽、且官方文档未提及的坑每一条都附带现象、根因和可立即执行的修复命令。5.1 现象crsctl check crs返回CRS-4638但crs_stat -t中ora.cssd为OFFLINE原因华为云ECS的/dev/shm默认大小为64MB而RAC 11.2.0.4要求至少2GBCSSD进程共享内存段。/dev/shm空间不足导致CSSD启动后立即core dump。解决# 临时扩容重启失效 sudo mount -t tmpfs shmfs -o size2g /dev/shm # 永久生效写入/etc/fstab echo shmfs /dev/shm tmpfs size2g 0 0 | sudo tee -a /etc/fstab sudo mount -o remount /dev/shm5.2 现象ocrcheck返回PROT-602错误提示OCR设备不可访问原因udev规则中PROGRAM路径错误。华为云ECS的scsi_id路径为/lib/udev/scsi_id非/sbin/scsi_id导致RESULT匹配失败/dev/asm-disk1未生成。解决# 修改udev规则中的PROGRAM路径 sudo sed -i s|/sbin/scsi_id|/lib/udev/scsi_id|g /etc/udev/rules.d/99-oracle-asm.rules sudo udevadm control --reload-rules sudo udevadm trigger --subsystem-matchblock ls -l /dev/asm-disk1 # 应能看到设备文件5.3 现象数据库实例启动后select instance_name, status from gv$instance;只返回一个节点原因/etc/hosts中节点解析顺序错误。RAC要求public IP、VIP、private IP三类地址必须按顺序写入且private IP必须在VIP之后。华为云ECS的/etc/hosts默认只写public IP导致ora.node2.vip资源启动失败。解决# /etc/hosts 必须按此顺序以node1为例 192.168.1.10 node1.example.com node1 192.168.1.11 node1-vip.example.com node1-vip 10.0.0.10 node1-priv.example.com node1-priv 192.168.1.12 node2.example.com node2 192.168.1.13 node2-vip.example.com node2-vip 10.0.0.11 node2-priv.example.com node2-priv5.4 现象srvctl start database -d racdb后crs_stat -t中ora.racdb.db状态为INTERMEDIATE原因$ORACLE_HOME/dbs/init.ora中cluster_databasetrue未设置或$ORACLE_HOME/dbs/spfile.ora未正确指向ASM磁盘组。11.2.0.4要求SPFILE必须位于ASM中且init.ora中spfileDATA/racdb/spfileracdb.ora路径必须精确。解决# 在sqlplus中执行以sysdba登录 sqlplus / as sysdba CREATE SPFILEDATA/racdb/spfileracdb.ora FROM PFILE; SHUTDOWN IMMEDIATE; STARTUP; -- 然后在grid用户下执行 srvctl stop database -d racdb srvctl start database -d racdb5.5 现象客户端连接VIP报错ORA-12545: Connect failed because target host or object does not exist原因华为云安全组未放行VIP所在子网的ICMP协议。RAC客户端连接VIP前会先ping VIP若安全组拦截ICMP连接直接超时。解决登录华为云控制台 → 进入对应安全组 → 添加入方向规则协议ICMP端口全部源地址0.0.0.0/0或客户端IP段执行ping node1-vip和ping node2-vip确认可达。6. 验证与巡检用5条命令建立RAC健康基线把“能跑”变成“敢上生产”装完不等于跑稳。RAC 11.2.0.4在云环境的稳定性必须通过持续巡检来保障。我给自己定的铁律是每次变更后必须跑通这5条命令每周凌晨自动执行一次结果邮件告警。它们覆盖了RAC最脆弱的5个环节——从底层存储到应用连接。6.1 存储层验证ASM磁盘组IO性能与冗余状态RAC的命脉是ASM而ASM的命脉是磁盘组IO。华为云云硬盘的IO延迟波动是最大隐患必须用iostat抓取真实值# 在grid用户下执行每5秒采样持续60秒 iostat -x -d 5 12 | grep asm-disk1 # 关键指标解读 # %util 90%磁盘饱和需扩容或优化SQL # await 20msIO延迟超标联系华为云提工单查存储后端 # r/s w/s 1000IOPS超限考虑升级到“超高IO”规格✅ 生产基线await稳定在15ms%util 70%r/sw/s 800。若连续3次采样超标立即触发预案降级非核心批处理任务。6.2 网络层验证私网心跳包丢包率与VIP漂移日志RAC节点间靠UDP心跳维系任何丢包都会触发reboot。必须用tcpdump抓包验证# 在node1上抓取私网心跳包假设私网网卡为eth1 sudo tcpdump -i eth1 -nn port 42422 -c 1000 -w /tmp/heartbeat.pcap # 分析丢包率在另一台机器上 sudo tshark -r /tmp/heartbeat.pcap -Y udp.port42422 | wc -l # 正常应接近1000若950说明丢包率5%需检查VPC路由表和安全组技巧在/u01/app/grid/diag/crs/node1/crs/trace/alert.log中搜索CSSD关键字提取最近1小时的misscount值。misscount50是默认阈值若日志中频繁出现misscount exceeded说明网络抖动已触达临界点。6.3 CRS层验证资源依赖关系与自动重启策略RAC的高可用本质是CRS对资源依赖链的精准控制。必须确认关键资源的RESTART_ATTEMPTS和FAILURE_THRESHOLD# 查询OCR/Voting Disk资源策略 crsctl stat res ora.OCR_VOTE.dg -p | grep -E (RESTART_ATTEMPTS|FAILURE_THRESHOLD) # 查询数据库资源策略 crsctl stat res ora.racdb.db -p | grep -E (RESTART_ATTEMPTS|FAILURE_THRESHOLD)✅ 基线参数表资源名RESTART_ATTEMPTSFAILURE_THRESHOLD说明ora.OCR_VOTE.dg52OCR磁盘组故障后最多重启5次2次失败即告警ora.racdb.db21数据库实例崩溃后仅尝试重启1次失败即failover注意FAILURE_THRESHOLD1意味着任何一次srvctl stop instance都会触发failover这是11.2.0.4的默认行为不可修改。因此日常维护必须用ALTER SYSTEM CHECKPOINT替代shutdown immediate。6.4 数据库层验证GV$视图一致性与全局锁等待RAC的“全局性”体现在GV$视图上。若节点间数据不一致说明Cache Fusion失效-- 在任意节点执行检查各节点实例状态是否同步 SELECT inst_id, instance_name, status, database_status FROM gv$instance; -- 检查全局锁等待超过5秒即需干预 SELECT inst_id, event, seconds_in_wait, state FROM gv$session_wait WHERE event LIKE gc% AND seconds_in_wait 5;✅ 健康信号gv$instance中所有inst_id的status均为OPENdatabase_status均为ACTIVEgc%等待事件seconds_in_wait为0或2。6.5 应用层验证VIP切换后的连接连续性测试最后一步也是最关键的一步模拟节点宕机验证VIP漂移和连接恢复能力# 在node1上执行模拟节点故障 sudo reboot -f # 等待2分钟然后在客户端执行 sqlplus system/Oracle123//node1-vip:1521/racdb # 若连接成功且SELECT INSTANCE_NAME FROM V$INSTANCE;返回racdb2则验证通过我的习惯每次上线前用oratop工具在后台持续监控node1-vip和node2-vip的连接数变化。当node1宕机时node1-vip连接数应归零node2-vip连接数应在30秒内升至原值的110%含重连。如果超过90秒才恢复说明应用层连接池未配置FAILOVERON必须返工。这些年踩过的坑让我明白RAC不是装出来而是养出来的。在华为云ECS上跑11.2.0.4没有银弹只有把每一块ASM磁盘的SCSI ID刻进肌肉记忆把每一次crsctl check crs的结果当成呼吸频率去监测。当你能在凌晨三点收到await 20ms的告警5分钟内定位到是华为云某批次SSD固件问题并协调他们热替换——那一刻你才算真正把RAC托在了云上。希望帮到你。本文还有配套的精品资源点击获取