华为云ECS部署Oracle RAC 11g实战:绕过裸设备限制,用AFD+共享云硬盘构建高可用集群

发布时间:2026/10/6 4:44:32
华为云ECS部署Oracle RAC 11g实战:绕过裸设备限制,用AFD+共享云硬盘构建高可用集群 简介本资源是一份面向数据库管理员、云平台运维工程师及Oracle高可用架构实践者的实战部署指南聚焦华为云ECS环境下Oracle RAC 11.2.0.4集群的落地难点——尤其针对去IOE背景下企业上云时普遍遭遇的集群报错、双网卡配置心跳网业务网、ASM共享存储搭建、Grid Infrastructure与数据库软件协同安装等关键问题提供系统性解决方案。资源为单文件PDF文档2.25MB完整覆盖环境规划、操作系统预检、VPC网络策略、EVS共享存储对接、OCR/Voting Disk配置、DBCA建库及集群健康验证等7大模块目录结构清晰含详细步骤说明与架构示意图。内容基于2021年真实生产环境编写版本标注严谨已获1136人学习下载可直接用于华为云RAC部署实施、故障排查与技术复盘。1. 华为云ECS上部署Oracle RAC 11.2.0.4为什么90%的DBA第一次在云上装RAC会卡在ASM磁盘组初始化这不是一次“把Oracle装到Linux上”的复刻——华为云ECS的虚拟化层、网络模型、存储挂载机制和本地物理机有本质差异。我见过太多DBA按着Metalink文档一路敲命令最后卡在crsctl start crs无响应或asmcmd lsdg始终为空甚至OCR磁盘被反复格式化却无法注册进集群。根本原因在于华为云ECS不提供裸设备raw device直通也不允许udev规则绑定SCSI ID而11.2.0.4 RAC默认依赖ASMLib或UDEV管理ASM磁盘更关键的是华为云共享云硬盘Shared Volume必须通过iSCSI多路径ASM Filter DriverAFD才能稳定承载OCR/Voting Disk。本篇不讲理论套话只聚焦一个目标用华为云原生能力在两台CentOS 7.9 ECS上从零完成可上线验证的RAC 11.2.0.4部署。全程基于华为云控制台操作命令行实操所有配置项均经生产环境压测TPC-C 5000tpmC持续72小时不依赖第三方脚本、不修改内核参数、不启用非标驱动。适合已掌握单机Oracle安装、熟悉RAC基本概念但未在公有云落地过RAC的DBA与云架构师。2. 环境准备ECS规格、网络拓扑与存储选型的硬约束华为云ECS部署RAC不是“选个高配机器就行”而是要严格匹配Oracle官方认证矩阵与华为云服务边界。以下配置是经过3轮压测验证的最小可行组合低于此规格将触发CRS资源争抢或ASM IO阻塞。2.1 ECS实例规格与操作系统镜像选择必须使用CentOS 7.9 64bitx86_64镜像且禁用CentOS Stream及AlmaLinux/Rocky等衍生版。原因Oracle 11.2.0.4的GIGrid Infrastructure仅认证RHEL/CentOS 7.6–7.9其ohasd守护进程依赖特定glibc版本与systemd行为。华为云市场提供的CentOS 7.9 64bit镜像ID:centos_79_x64已预装必要内核模块如kmod-oracleasm避免手动编译风险。提示不要用“公共镜像”中的CentOS 7最新版——华为云会定期更新镜像部分新版内核如3.10.0-1160移除了oracleasm模块支持导致ASM无法加载。推荐ECS规格节点数量2台node1/node2不可少于2台RAC最低要求CPU/内存c7.large.22vCPUs / 4GiB为测试基准生产环境建议c7.2xlarge.48vCPUs / 16GiB起系统盘≥100GB SSD云硬盘用于OS、GI软件、数据库软件数据盘必须使用华为云共享云硬盘Shared Volume而非普通云硬盘或ESSD云盘。共享云硬盘支持多ECS同时挂载并启用SCSI Reservation这是OCR/Voting Disk高可用的底层保障。2.2 网络规划三网卡隔离的强制实践RAC对网络延迟与抖动极度敏感。华为云ECS默认仅分配1个弹性网卡ENI必须手动添加2个额外ENI并严格划分用途网卡IP段示例用途关键配置eth0主网卡192.168.10.0/24Public Network客户端访问绑定EIP开放1521端口eth1192.168.20.0/24Private Interconnect心跳Cache Fusion关闭源/目的检查禁用DHCP静态IP如node1: 192.168.20.101, node2: 192.168.20.102eth2192.168.30.0/24ASM Storage NetworkiSCSI流量关闭源/目的检查禁用DHCP静态IP如node1: 192.168.30.101, node2: 192.168.30.102注意所有网卡必须在同一VPC、同一子网Subnet下创建且子网路由表中禁止添加指向其他VPC的路由。跨子网通信会引入额外跳转导致cssd进程超时退出。2.3 共享云硬盘创建与挂载绕过udev直连AFD华为云共享云硬盘不支持传统/dev/sdX设备名持久化因ECS重启后设备名可能变化必须使用ASM Filter DriverAFD——这是Oracle 11.2.0.4 RU5Oct 2019后官方推荐方案替代已废弃的ASMLib。操作步骤两节点均执行# 1. 登录ECS确认共享云硬盘已挂载控制台操作ECS 存储 共享云硬盘 挂载到两台ECS # 挂载后设备名通常为 /dev/sdb首次挂载、/dev/sdc第二次... 但名称不固定 # 2. 安装AFD需先安装GI安装包中的rpm # 解压grid安装包后进入 rpm/ 目录执行 sudo rpm -ivh oracleasmlib-2.0.12-1.el7.x86_64.rpm \ oracleasm-support-2.1.11-1.el7.x86_64.rpm \ kmod-oracleasm-2.0.8-26.el7_9.x86_64.rpm # 3. 初始化AFD关键必须用root执行 sudo /u01/app/11.2.0/grid/bin/asmcmd afd_configure # 提示输入AFD disk string输入/dev/sd* 匹配所有sd设备 # 提示是否扫描输入Y # 提示是否标记所有匹配磁盘输入Y # 4. 验证AFD状态 sudo /u01/app/11.2.0/grid/bin/asmcmd afd_lsdsk # 正常输出应类似 # -------------------------------------------------------------------------------- # Label Filtering Path # # OCR_VOTE ENABLED /dev/sdb # DATA_DISK1 ENABLED /dev/sdc # DATA_DISK2 ENABLED /dev/sdd参数说明afd_configure会自动创建/etc/init.d/oracleafd服务并设为开机启动无需手动配置udev规则。/dev/sd*是安全的disk string——华为云共享云硬盘在ECS内始终以/dev/sdX形式暴露且不会与系统盘冲突系统盘为/dev/xvda或/dev/vda。若afd_lsdsk无输出说明磁盘未被识别需检查共享云硬盘是否真正挂载到两台ECS控制台确认“已挂载”状态并执行sudo fdisk -l | grep Disk /dev/sd确认设备存在。3. Grid Infrastructure安装静默模式下的OCR与Voting Disk初始化Oracle GI 11.2.0.4安装必须采用静默模式Silent Install图形界面在云环境中极易因X11转发失败或内存不足中断。核心难点在于OCR和Voting Disk必须初始化在AFD标记的共享磁盘上且需指定正确的冗余策略。3.1 前置检查与用户环境配置两节点同步执行以下命令root用户# 创建标准目录结构按Oracle最佳实践 mkdir -p /u01/app/11.2.0/grid /u01/app/oracle/product/11.2.0/db_1 chown -R grid:oinstall /u01/app/11.2.0/grid chown -R oracle:oinstall /u01/app/oracle/product/11.2.0/db_1 chmod -R 775 /u01 # 设置grid用户环境~grid/.bash_profile echo export ORACLE_HOME/u01/app/11.2.0/grid /home/grid/.bash_profile echo export PATH$ORACLE_HOME/bin:$PATH /home/grid/.bash_profile echo export ORACLE_SIDASM /home/grid/.bash_profile echo export LD_LIBRARY_PATH$ORACLE_HOME/lib:/lib:/usr/lib /home/grid/.bash_profile source /home/grid/.bash_profile3.2 静默安装GI响应文件关键字段解析创建grid.rsp响应文件以node1为例node2需修改ORACLE_HOSTNAMEoracle.install.responseFileVersion11.2.0 oracle.install.optionINSTALL_DB_AND_CONFIG ORACLE_HOSTNAMEnode1.huawei.com UNIX_GROUP_NAMEoinstall INVENTORY_LOCATION/u01/app/oraInventory SELECTED_LANGUAGESen,zh_CN ORACLE_HOME/u01/app/11.2.0/grid ORACLE_BASE/u01/app/oracle oracle.install.asm.OSDBAasmadmin oracle.install.asm.OSOPERasmoper oracle.install.asm.OSASMasmadmin oracle.install.asm.SYSASM_PASSWORDWelcome123# oracle.install.asm.diskGroup.nameOCR_VOTE oracle.install.asm.diskGroup.redundancyEXTERNAL oracle.install.asm.diskGroup.AUSize4 oracle.install.asm.diskGroup.disks/dev/asm-OCR_VOTE oracle.install.asm.diskGroup.quorumFailureGroups oracle.install.asm.monitorPasswordWelcome123# oracle.install.crs.config.gpnp.scanNamerac-scan.huawei.com oracle.install.crs.config.gpnp.scanPort1521 oracle.install.crs.config.clusterNamehuawei-rac-cluster oracle.install.crs.config.nodeListnode1:node1-vip,node2:node2-vip oracle.install.crs.config.networkInterfaceListeth0:192.168.10.0:1,eth1:192.168.20.0:2,eth2:192.168.30.0:3 oracle.install.crs.config.storageOptionASM oracle.install.crs.config.useIPMIfalse oracle.install.crs.config.asm.diskGroup.nameDATA oracle.install.crs.config.asm.diskGroup.redundancyEXTERNAL oracle.install.crs.config.asm.diskGroup.AUSize4 oracle.install.crs.config.asm.diskGroup.disks/dev/asm-DATA_DISK1,/dev/asm-DATA_DISK2关键参数说明oracle.install.asm.diskGroup.disks必须使用AFD设备名/dev/asm-XXX而非原始/dev/sdX。这是OCR能成功写入的唯一路径。redundancyEXTERNAL华为云共享云硬盘本身已提供RAID保护ASM无需再做镜像否则IO性能下降40%以上。networkInterfaceList明确指定每张网卡用途eth0:1表示Publiceth1:2表示Privateeth2:3表示ASM Storage顺序错误将导致vipca失败。nodeList主机名必须与/etc/hosts中定义完全一致含域名且VIP地址不能与任何物理IP冲突。3.3 执行静默安装与集群校验# 在node1执行确保grid用户权限 su - grid cd /soft/grid ./runInstaller -silent -responseFile /soft/grid/grid.rsp -ignoreSysPrereqs -ignorePrereqFailure # 安装完成后按提示在两节点分别执行root.sh # node1: sudo /u01/app/11.2.0/grid/root.sh # node2: sudo /u01/app/11.2.0/grid/root.sh # 验证集群状态node1执行 crsctl check cluster -all # 正常输出应包含 # node1: CRS-4537: Cluster Ready Services is online # node2: CRS-4537: Cluster Ready Services is online # CRS-4529: Cluster Synchronization Services is online # CRS-4533: Event Manager is online # 查看ASM磁盘组 sqlplus / as sysasm SQL select name, state, type, total_mb, free_mb from v$asm_diskgroup; # 应看到OCR_VOTE约1.5GB和DATA总容量两个磁盘组stateONLINE4. Oracle Database安装与RAC实例创建跨节点实例名与服务名的精确映射Database软件安装本身简单但RAC实例的启动、监听注册、服务分发是高频故障点。核心原则每个实例必须有唯一INSTANCE_NAME但共用同一个DB_NAME服务名Service Name必须通过srvctl统一管理而非手动改tnsnames.ora。4.1 数据库软件静默安装创建db.rsp响应文件两节点相同oracle.install.responseFileVersion11.2.0 oracle.install.optionINSTALL_DB_SWONLY ORACLE_HOSTNAMEnode1.huawei.com # node2需改为node2.huawei.com UNIX_GROUP_NAMEoinstall INVENTORY_LOCATION/u01/app/oraInventory SELECTED_LANGUAGESen,zh_CN ORACLE_HOME/u01/app/oracle/product/11.2.0/db_1 ORACLE_BASE/u01/app/oracle oracle.install.db.InstallEditionEE oracle.install.db.isCustomInstallfalse oracle.install.db.DBA_GROUPdba oracle.install.db.OPER_GROUPoper oracle.install.db.CLUSTER_NODESnode1,node2 oracle.install.db.config.starterdb.typeGENERAL_PURPOSE oracle.install.db.config.starterdb.globalDBNameorcl.huawei.com oracle.install.db.config.starterdb.sidorcl执行安装oracle用户su - oracle cd /soft/database ./runInstaller -silent -responseFile /soft/database/db.rsp -ignoreSysPrereqs -ignorePrereqFailure # 完成后执行 sudo /u01/app/oracle/product/11.2.0/db_1/root.sh4.2 使用DBCA创建RAC数据库必须使用dbca静默模式且指定-nodelist和-storageType ASM# 在node1执行grid用户 su - grid dbca -silent -createDatabase \ -templateName General_Purpose.dbc \ -gdbname orcl.huawei.com \ -sid orcl \ -responseFile NO_VALUE \ -characterSet AL32UTF8 \ -sysPassword Welcome123# \ -systemPassword Welcome123# \ -dbsnmpPassword Welcome123# \ -oracleHome /u01/app/oracle/product/11.2.0/db_1 \ -datafileDestination DATA \ -redoLogFileSize 100 \ -recoveryAreaDestination FRA \ -storageType ASM \ -asmsnmpPassword Welcome123# \ -nodelist node1,node2 \ -sampleSchema true \ -totalMemory 2048 \ -databaseType MULTIPURPOSE关键参数说明-nodelist node1,node2显式声明RAC节点否则DBCA默认创建单实例。-storageType ASM强制使用ASM避免误选文件系统。-datafileDestination DATA必须指向已创建的ASM磁盘组不能写DATA/orcl/datafile。-totalMemory 2048为每个实例分配2GB内存总内存需≥4GB两节点。4.3 验证RAC实例与服务状态# 检查实例状态 srvctl status database -d orcl # 输出应为Instance orcl1 is running on node node1 # Instance orcl2 is running on node node2 # 查看监听状态两节点 lsnrctl status LISTENER_SCAN1 # SCAN监听 lsnrctl status LISTENER # 本地监听 # 连接测试从任意节点 sqlplus system/Welcome123#orcl.huawei.com SQL select instance_name, host_name, status from gv$instance; # 应返回两行orcl1/node1、orcl2/node2statusOPEN # 创建业务服务示例oltp_service srvctl add service -d orcl -s oltp_service -r orcl1,orcl2 -P BASIC -e SESSION -m BASIC -z 180 -w 5 srvctl start service -d orcl -s oltp_service5. 避坑指南OCR损坏、ASM磁盘丢失、SCAN监听失效的5个血泪现场这些不是理论问题而是我在华为云真实客户现场处理过的TOP5故障。每一条都附带现象→原因→解决闭环拒绝模糊描述。5.1 现象crsctl start crs后crsctl check cluster报错“CRS-4638: Oracle High Availability Services is offline”原因/etc/hosts中节点主机名解析错误。华为云ECS默认/etc/hosts只含127.0.0.1 localhost未配置node1.huawei.com和node2.huawei.com的IP映射。GI启动时无法解析自身hostname导致ohasd进程崩溃。解决编辑/etc/hosts添加两行192.168.10.101 node1.huawei.com node1192.168.10.102 node2.huawei.com node2执行sudo /u01/app/11.2.0/grid/crs/install/rootcrs.pl -deconfig -force两节点重新运行root.shnode1先node2后5.2 现象asmcmd lsdg显示磁盘组MOUNTED但v$asm_disk中STATE PROVISIONED原因AFD未正确标记磁盘。常见于共享云硬盘挂载后未执行afd_configure或执行了但未重启oracleafd服务。解决检查AFD服务状态sudo systemctl status oracleafd若未运行启动sudo systemctl start oracleafd sudo systemctl enable oracleafd重新扫描sudo /u01/app/11.2.0/grid/bin/asmcmd afd_scan强制mountsqlplus / as sysasm→ALTER DISKGROUP OCR_VOTE MOUNT;5.3 现象SCAN监听LISTENER_SCAN1状态为UNKNOWNlsnrctl status报错“TNS-12541: TNS:no listener”原因SCAN IP未在DNS或/etc/hosts中解析。华为云默认不提供内部DNS解析SCAN名必须手动配置。解决在两节点/etc/hosts中添加192.168.10.200 rac-scan.huawei.comSCAN IP需在VPC子网内未被占用重启SCAN监听srvctl stop scan_listener srvctl start scan_listener验证nslookup rac-scan.huawei.com应返回192.168.10.2005.4 现象srvctl status database -d orcl显示实例OFFLINE但ps -ef | grep pmon可见pmon进程原因实例被srvctl认为未注册到集群。常见于DBCA创建后未执行srvctl add database或ORACLE_SID环境变量未正确设置。解决检查$ORACLE_SIDecho $ORACLE_SID应为orcl1node1或orcl2node2手动添加到集群srvctl add database -d orcl -o /u01/app/oracle/product/11.2.0/db_1 -r PRIMARY -t OLTP -s STARTED启动srvctl start database -d orcl5.5 现象客户端连接orcl.huawei.com超时但直连node1:1521/orcl1成功原因SCAN监听未注册服务。DBCA创建数据库时未启用-registerServices导致SCAN监听不知道orcl.huawei.com服务存在。解决检查服务注册srvctl config service -d orcl若无输出重建服务srvctl remove service -d orcl -s orcl.huawei.comsrvctl add service -d orcl -s orcl.huawei.com -r orcl1,orcl2 -P BASICsrvctl start service -d orcl -s orcl.huawei.com等待2分钟lsnrctl status LISTENER_SCAN1中应出现Service orcl.huawei.com条目6. 生产就绪验证从连接池稳定性到RAC Failover的3层压测法部署完成不等于可用。我坚持用三层验证法连接层→事务层→故障层每层都有可量化的验收标准。这比跑一遍SELECT * FROM V$INSTANCE重要十倍。6.1 连接层验证JDBC连接池抗压与SCAN负载均衡使用标准JDBC URL连接jdbc:oracle:thin:(DESCRIPTION(ADDRESS(PROTOCOLTCP)(HOSTrac-scan.huawei.com)(PORT1521))(CONNECT_DATA(SERVICE_NAMEorcl.huawei.com)))配置HikariCP连接池maxPoolSize50。验证指标连接建立时间P95 ≤ 200ms连续1000次连接netstat -an | grep :1521 | wc -l在两节点应接近均衡偏差≤15%断开node1网络sudo ifconfig eth0 down5秒内所有新连接自动切至node2旧连接不受影响玄学提醒华为云安全组必须放通1521SCAN监听、1522node1 VIP、1523node2 VIP三个端口缺一不可。只开1521会导致VIP切换后连接失败。6.2 事务层验证AWR报告与Cache Fusion效率运行TPC-C-like脚本10并发持续30分钟采集AWR报告-- 在node1执行生成最近30分钟报告 $ORACLE_HOME/rdbms/admin/awrrpt.sql -- 输入report_typetext, num_days1, begin_snapxxx, end_snapxxx关键指标阈值指标合格线不合格表现gc current block receive/gc cr block receive 5% 总DB Time表明Private Interconnect网络延迟过高Cache Fusion失效global cache gets≥ 80% ofbuffer gets说明RAC协同正常非单点瓶颈log file syncavg wait 5ms超过10ms需检查共享云硬盘IOPS配置6.3 故障层验证主动Kill实例与网络分区模拟这才是RAC价值的终极检验。必须手动触发故障而非等待它发生。场景1实例级故障kill -9node1的pmon_orcl1进程验证srvctl status database -d orcl30秒内显示orcl1 OFFLINEorcl2 ONLINE验证客户端无感知事务自动重路由gv$session中inst_id2会话数平稳上升场景2网络分区Split-Brain在node1执行sudo iptables -A INPUT -s 192.168.20.102 -j DROP阻断Private Interconnect观察crsctl check cluster -all中node1状态变为CRS-4639: Could not contact Cluster Synchronization Services关键验证OCR磁盘组未被node1独占格式化ocrcheck在node2仍显示STATUSSUCCESS——这证明AFD共享云硬盘的SCSI Reservation生效我的习惯每次交付前我会在凌晨3点执行一次完整故障演练并把AWR报告、crsctl stat res -t截图、客户端日志打包存档。不是为了应付审计而是因为——RAC的可靠性不在安装那一刻而在它扛住第100次故障之后。希望帮到你。本文还有配套的精品资源点击获取