
简介本资源是一份面向DBA、云计算运维工程师及Oracle高可用架构实践者的实战型部署手册系统讲解在阿里云ECS上基于CentOS 7.6搭建Oracle 19c双节点RAC集群的全流程——涵盖环境准备、存储与网络精细化规划OCR/DATA/FRA磁盘组配置、Public/Private双网设计、SCAN与HAIP部署、Grid Infrastructure与数据库实例安装、性能优化要点及日常维护策略。资源为单个PDF文件共6.56MB内容结构完整含主机配置清单、ASM磁盘组容量与冗余选型建议、网卡绑定与DNS/chrony时间同步实操细节、以及19c特有的MGMT库可选安装说明。目前已有1524人学习下载适合需在公有云环境落地RAC高可用方案的中高级技术人员可直接用于生产环境部署参考与故障排查依据。1. 为什么在阿里云ECS上部署Oracle 19c RAC不是“照搬物理机手册”就能成的事你在本地VMware里用CentOS 7.6装过Oracle 19c RAC三台虚拟机、共享iSCSI存储、udev绑定磁盘、grid用户跑root.sh——一切顺利。但把同样步骤搬到阿里云ECS双节点上刚到runInstaller -silent阶段就卡死在“Checking for required packages”或者更糟CRS启动后crsctl check cluster显示CRS-4537: Cluster Ready Services is online但crsctl stat res -t里所有数据库资源全是OFFLINEora.asm反复重启/u01/app/grid/diag/crs/.../crsd/trace/crsd.log里滚动着ORA-15032: not all alterations performed和ORA-15025: could not open disk /dev/oracleasm/disks/DISK1——而你明明用fdisk -l确认了/dev/vdb、/dev/vdc都存在ls -l /dev/oracleasm/disks/却空空如也。这不是配置错误是云环境对RAC底层假设的系统性挑战阿里云ECS没有真正的共享块设备Shared Block Storage你挂载的多块云盘在底层是独立LUN无法被两个节点同时以读写模式识别为同一块ASM磁盘ECS实例的内核模块如oracleasm默认不加载udev规则在云主机热迁移后失效CentOS 7.6的systemd服务依赖链与Oracle Grid Infrastructure的启动时序冲突更关键的是阿里云安全组默认禁止RAC必需的私网通信端口如45678、6200等而文档里从不提这茬。本手册不讲“理论可行”只聚焦在ECS真实约束下让19c RAC双节点真正跑起来、稳住、能维护——从裸机镜像选择、网络拓扑设计、ASM磁盘组构建策略到CRS异常时3分钟定位根因的实操路径。适合已在阿里云有ECS资源、需快速交付高可用Oracle集群的DBA或云平台工程师拒绝纸上谈兵。2. 阿里云ECS环境适配从镜像选型到网络与存储的硬约束落地2.1 镜像与内核为什么必须用CentOS 7.6而非7.9或8 Stream阿里云官方镜像市场中“CentOS 7.6 64位”是唯一预装kernel-3.10.0-957.el7.x86_64且默认启用oracleasm内核模块的版本。我们实测过CentOS 7.9kernel-3.10.0-1160和8 Streamkernel-4.18问题集中爆发在ASM层面oracleasm init失败报错Unable to load module oracleasm手动modprobe oracleasm提示Module oracleasm not found in directory /lib/modules/3.10.0-1160.el7.x86_64即使编译安装oracleasm-supportoracleasm scandisks也无法识别云盘设备因新内核移除了/proc/partitions中旧式设备名映射逻辑CentOS 8默认使用dnf而非yum而Oracle 19c安装脚本硬编码调用yum install -y导致依赖包安装中断。提示在阿里云控制台创建ECS时必须手动选择“镜像市场” → “操作系统” → “CentOS” → “CentOS 7.6 64位”而非“公共镜像”中的通用CentOS 7。公共镜像中7.6版本缺少oracleasm模块及kmod-oracleasmRPM包后续需手动编译成功率低于60%。验证内核与模块# 两节点均执行 uname -r # 输出必须为 3.10.0-957.el7.x86_64 lsmod | grep oracleasm # 若无输出说明模块未加载需立即排查 rpm -qa | grep oracleasm # 正常应返回 kmod-oracleasm-2.0.8-4.el7.centos.x86_64 和 oracleasm-support-2.1.11-2.el7.x86_64若rpm -qa无结果不要尝试yum install oracleasm-support——阿里云ECS的yum源默认禁用extras仓库而oracleasm-support在此仓库中。正确做法是启用仓库并安装# 编辑 /etc/yum.repos.d/CentOS-Base.repo在[extras]段末尾添加 enabled1 # 清理缓存并安装 yum clean all yum makecache yum install -y oracleasm-support kmod-oracleasm2.2 网络规划三网卡模型与安全组放行的最小必要集RAC要求三类网络流量隔离Public客户端访问、Private节点间心跳与Cache Fusion、VIP故障转移。阿里云ECS单实例仅支持1个主网卡eth0必须通过辅助网卡Secondary ENI 多IP绑定实现三网卡逻辑分离。这是云环境RAC部署的核心差异点。网络类型IP规划示例绑定方式安全组放行端口TCP/UDP说明Publicnode1: 192.168.1.101node2: 192.168.1.102eth0主IP1521监听器5500EM Express必须与VPC内网互通客户端直连Privatenode1: 192.168.100.101node2: 192.168.100.102eth0:1别名IP45678CSSD心跳6200CRSD12345GNS必须关闭ARP检测否则私网通信中断VIPnode1-vip: 192.168.1.111node2-vip: 192.168.1.112eth0:2别名IP无额外端口VIP由CRS管理绑定在活动节点eth0关键操作禁用私网ARP检测# 两节点均执行永久生效 echo net.ipv4.conf.eth0.arp_ignore 1 /etc/sysctl.conf echo net.ipv4.conf.eth0.arp_announce 2 /etc/sysctl.conf sysctl -p # 验证 sysctl net.ipv4.conf.eth0.arp_ignore # 输出应为 1注意阿里云安全组必须放行私网端口默认安全组仅开放22、80、443需手动添加规则协议TCP/UDP端口范围45678/45678,6200/6200,12345/12345授权对象192.168.100.0/24私网网段方向入方向 出方向双向放行2.3 存储方案放弃“共享磁盘”转向ASM Flex DiskGroup NFS作为OCR/Voting Disk阿里云ECS不提供原生共享块存储Shared Block Storage强行用多块云盘模拟共享盘会导致ASM磁盘组频繁offline。我们验证过三种方案唯一稳定方案是ASM Flex DiskGroup NFS托管OCR/Voting Disk。方案对比❌ iSCSI Target自建ECS实例间iSCSI连接延迟高20msCRS心跳超时率30%crsctl check crs频繁报CRS-4638: Oracle High Availability Services is online但CRS-4535: Cannot communicate with Cluster Ready Services。❌ 云盘多挂载Attach to multiple instances阿里云控制台明确禁止API返回InvalidParameter。✅NFS托管OCR/Voting Disk将OCROracle Cluster Registry和Voting Disk文件存于阿里云NASNFS v4.0ASM仅管理数据文件磁盘组。NAS提供强一致性延迟5ms满足RAC要求。NFS配置步骤以NAS挂载点192.168.1.200:/share/rac为例# 两节点安装NFS客户端 yum install -y nfs-utils # 创建挂载目录 mkdir -p /u01/app/19.0.0/grid/nfs_ocr # 永久挂载/etc/fstab echo 192.168.1.200:/share/rac /u01/app/19.0.0/grid/nfs_ocr nfs rw,bg,hard,nointr,rsize1048576,wsize1048576,tcp,actimeo0,vers4.0 0 0 /etc/fstab # 挂载并验证 mount -a df -h | grep nfs_ocr # 输出应包含 /u01/app/19.0.0/grid/nfs_ocr避坑重点NFS挂载选项actimeo0禁用属性缓存和vers4.0强制NFSv4是必须项否则OCR文件锁竞争导致cluvfy comp ocr校验失败。3. Oracle 19c RAC安装静默安装核心参数与Grid Infrastructure初始化3.1 Grid Infrastructure静默安装绕过图形界面的最小参数集Oracle 19c GI安装不再依赖X11转发但runInstaller -silent对响应文件response file格式极其敏感。我们提炼出阿里云ECS环境必填的12个参数其余可留空Oracle会自动推导# 创建响应文件 /tmp/grid.rsp cat /tmp/grid.rsp EOF oracle.install.responseFileVersion3.8 oracle.install.optionCRS_CONFIG ORACLE_BASE/u01/app/grid INVENTORY_LOCATION/u01/app/oraInventory SELECTED_LANGUAGESen,zh_CN oracle.install.crs.config.autoConfigureClustertrue oracle.install.crs.config.clusterNamerac-cluster oracle.install.crs.config.gpnp.scanNamescan-rac oracle.install.crs.config.gpnp.scanPort1521 oracle.install.crs.config.clusterNodesnode1:node1-vip,node2:node2-vip oracle.install.crs.config.networkInterfaceListeth0:192.168.1.0:1,eth0:192.168.100.0:2 oracle.install.crs.config.storageOptionUSE_NFS oracle.install.crs.config.useIPMIfalse oracle.install.crs.config.nfsPath/u01/app/19.0.0/grid/nfs_ocr oracle.install.crs.config.nfsUsergrid oracle.install.crs.config.nfsGroupoinstall oracle.install.crs.config.nfsMode0755 oracle.install.crs.config.nfsOwnergrid oracle.install.crs.config.nfsGroupoinstall oracle.install.crs.config.nfsPath/u01/app/19.0.0/grid/nfs_ocr EOF参数详解oracle.install.crs.config.storageOptionUSE_NFS强制使用NFS托管OCR/Voting Disk跳过ASM磁盘发现oracle.install.crs.config.networkInterfaceList指定eth0的两个子网Public网段192.168.1.0/24标记为1Private网段192.168.100.0/24标记为2顺序错误将导致私网通信失败oracle.install.crs.config.nfsPath必须指向已挂载的NFS路径且grid用户对该路径有读写权限chown grid:oinstall /u01/app/19.0.0/grid/nfs_ocr chmod 755oracle.install.crs.config.clusterNodes节点名必须与/etc/hosts中定义完全一致小写、无域名VIP名必须存在且解析正确。执行安装# 解压GI安装包假设解压至 /stage/grid cd /stage/grid ./runInstaller -silent -ignorePrereq -waitforcompletion -responseFile /tmp/grid.rsp # 安装完成后按提示在两节点分别执行root.sh /u01/app/19.0.0/grid/root.sh逻辑说明-ignorePrereq跳过硬件检查ECS内存/swap限制严格但RAC实际运行只需16GB RAM-waitforcompletion确保脚本阻塞至完成再返回。root.sh执行时会自动配置NFS OCR路径、启动CRS服务。3.2 ASM磁盘组创建Flex DiskGroup替代传统Normal Redundancy传统RAC使用NORMAL冗余ASM磁盘组需至少3块磁盘但在ECS双节点场景下我们采用Flex DiskGroup19c引入仅需2块云盘即可实现高可用且支持在线扩容。-- 以grid用户登录ASM实例 export ORACLE_HOME/u01/app/19.0.0/grid export ORACLE_SIDASM1 # node1 sqlplus / as sysasm -- 创建Flex DiskGroupDISKGROUP_DATA CREATE DISKGROUP DISKGROUP_DATA FLEX REDUNDANCY DISK /dev/vdb, /dev/vdc ATTRIBUTE au_size4M, compatible.asm19.0, compatible.rdbms19.0; -- 验证 SELECT name, type, state, total_mb, free_mb FROM v$asm_diskgroup; -- 输出应显示 DISKGROUP_DATA, FLEX, MOUNTED, 数值正常关键参数说明FLEX REDUNDANCY允许2块磁盘组成磁盘组数据条带化镜像单盘故障不影响IODISK /dev/vdb, /dev/vdc必须使用云盘设备名非ASM别名因ECS云盘设备名稳定vdb/vdc不会因重启改变au_size4M分配单元大小设为4MB提升大表扫描性能默认1MBcompatible.asm19.0强制ASM兼容19c避免升级后功能受限。避坑重点CREATE DISKGROUP命令中不能使用/dev/oracleasm/disks/DISK1路径ECS环境下ASM直接管理原始块设备oracleasm工具仅用于OCR/Voting Disk的NFS挂载不参与数据磁盘管理。4. 避坑指南CRS启动失败、ASM磁盘丢失、OCR损坏的5个血泪现场4.1 现象crsctl start crs后crsctl check crs报CRS-4535: Cannot communicate with Cluster Ready Services原因私网通信中断。常见于安全组未放行私网端口45678/6200/12345sysctl中arp_ignore/arp_announce未生效导致私网ARP请求被丢弃/etc/hosts中节点名解析错误如node1.localvsnode1。解决检查安全组规则是否双向放行私网端口执行sysctl -p并验证sysctl net.ipv4.conf.eth0.arp_ignore输出为1运行ping -I eth0:1 192.168.100.102node1 ping node2私网IP若不通检查iptables -L -n是否拦截ECS默认关闭iptables但客户可能开启。4.2 现象crsctl stat res -t中ora.asm状态为INTERMEDIATE日志/u01/app/grid/diag/crs/.../crsd/trace/crsd.log含ORA-15025: could not open disk /dev/vdb原因云盘未正确分区或权限不足。ECS云盘挂载后默认无分区表ASM要求裸设备raw device或已分区设备如/dev/vdb1但/dev/vdb本身不可直接使用。解决# 两节点执行以/dev/vdb为例 fdisk /dev/vdb EOF n p 1 w EOF # 创建分区后赋予grid用户权限 partprobe /dev/vdb chown grid:oinstall /dev/vdb1 chmod 660 /dev/vdb1 # 验证ASM可识别 su - grid -c sqlplus / as sysasm EOF SELECT path FROM v\$asm_disk WHERE path LIKE %vdb%; EXIT EOF # 应返回 /dev/vdb14.3 现象cluvfy comp ocr校验失败报PRVF-5436 : The NTP daemon running on the system does not have a configured driftfile原因NTP服务未配置漂移文件driftfile导致节点时间不同步CRS拒绝启动。解决# 编辑 /etc/ntp.conf echo driftfile /var/lib/ntp/drift /etc/ntp.conf echo restrict default nomodify notrap nopeer noquery /etc/ntp.conf echo server ntp.aliyun.com iburst /etc/ntp.conf # 启动并同步 systemctl enable ntpd systemctl start ntpd ntpq -p # 查看同步状态4.4 现象数据库实例启动后SELECT * FROM v\$instance返回INSTANCE_NAME为orcl1但crsctl stat res -t中ora.orcl.db状态为OFFLINE原因数据库资源未注册到CRS。静默安装时未执行dbca -silent -createDatabase或响应文件中oracle.install.db.config.starterdb.typeGENERAL_PURPOSE未匹配。解决# 以oracle用户执行数据库创建node1 dbca -silent \ -createDatabase \ -templateName General_Purpose.dbc \ -gdbname orcl \ -sid orcl \ -responseFile NO_VALUE \ -characterSet AL32UTF8 \ -sysPassword Oracle123 \ -systemPassword Oracle123 \ -createAsContainerDatabase true \ -numberOfPDBs 1 \ -pdbName pdb1 \ -pdbAdminPassword Oracle123 \ -databaseType MULTIPURPOSE \ -automaticMemoryManagement false \ -totalMemory 2048 \ -storageType ASM \ -asmSysPassword Oracle123 \ -diskGroupName DISKGROUP_DATA \ -ignorePreReqs # 注册数据库到CRS srvctl add database -d orcl -o /u01/app/oracle/product/19.0.0/dbhome_1 -c RAC -a DISKGROUP_DATA srvctl start database -d orcl4.5 现象crsctl delete resource ora.DATA.dg -f后asmcmd lsdg仍显示磁盘组但SQL DROP DISKGROUP DATA INCLUDING CONTENTS报错ORA-15039: diskgroup not mounted原因CRS资源删除未触发ASM磁盘组卸载残留ASM实例持有句柄。解决# 强制卸载磁盘组两节点 su - grid -c sqlplus / as sysasm EOF SHUTDOWN IMMEDIATE; STARTUP; ALTER DISKGROUP DATA DISMOUNT; EXIT EOF # 再次删除CRS资源 crsctl delete resource ora.DATA.dg -f5. 日常维护从空间告警到节点驱逐的3个关键巡检点与一键修复脚本5.1 ASM磁盘组空间监控告别“ORA-15041: diskgroup space exhausted”ASM磁盘组空间不足是RAC最常见故障源。v$asm_diskgroup的free_mb字段不可信因ASM预留空间机制必须用v$asm_diskgroup_stat的usable_file_mb可用文件空间。巡检SQL每日定时任务-- 以grid用户执行 SELECT name, round(total_mb/1024,2) AS TOTAL_GB, round(usable_file_mb/1024,2) AS USABLE_GB, round((total_mb - usable_file_mb)/total_mb*100,1) AS USED_PCT, CASE WHEN (total_mb - usable_file_mb)/total_mb 0.85 THEN CRITICAL WHEN (total_mb - usable_file_mb)/total_mb 0.75 THEN WARNING ELSE OK END AS STATUS FROM v$asm_diskgroup_stat WHERE state MOUNTED;阈值说明USED_PCT 85%立即扩容ALTER DISKGROUP ... ADD DISKUSED_PCT 75%清理归档日志RMAN DELETE ARCHIVELOG UNTIL TIME SYSDATE-3USABLE_GB 10强制清理ALTER DISKGROUP ... REBALANCE POWER 11加速重平衡。5.2 CRS健康度快检3条命令覆盖90%故障场景无需登录每个节点一条命令获取全局状态# 在任意节点执行需grid用户 crsctl check cluster -all 21 | grep -E (SUCCESS|FAILED) crsctl stat res -t | grep -E (OFFLINE|INTERMEDIATE|UNKNOWN) crsctl query css votedisk | grep -E (ONLINE|OFFLINE)解读规则crsctl check cluster -all输出含SUCCESS即CRS服务正常crsctl stat res -t中任何资源状态非ONLINE需立即crsctl status resource res_name查详情crsctl query css votedisk中ONLINE状态数必须等于节点数双节点为2少于则OCR/Voting Disk损坏。5.3 节点驱逐Node Eviction应急处理当crsctl check crs在node2返回CRS-4638但CRS-4535节点驱逐是RAC最严重故障表现为节点被集群强制踢出。根本原因是私网心跳超时60秒。不要重启CRS先执行诊断# 在存活节点node1执行 # 1. 查看驱逐日志 tail -50 /u01/app/grid/diag/crs/node1/crs/trace/ocssd.trc | grep -i evict # 2. 检查私网延迟 ping -c 5 -I eth0:1 192.168.100.102 # node1 ping node2私网 # 3. 强制重新加入集群node2上执行 crsctl stop crs -f crsctl start crs crsctl check crs关键技巧若ping延迟50ms立即检查ECS实例规格——必须使用ecs.g7.2xlarge及以上规格网络带宽≥5Gbps低规格实例如ecs.c6.large私网延迟波动大极易触发驱逐。我的习惯每次部署完RAC我会在/u01/app/grid/crsdata/下创建health_check.sh内容就是上述3条命令邮件告警用mailx发给运维群。它救过我三次——一次是磁盘组满两次是私网延迟突增。云上RAC的稳定性不靠玄学靠把每条命令变成肌肉记忆。希望帮到你。本文还有配套的精品资源点击获取