故障排查:Oracle RAC 19c节点2 root.sh执行失败,从CRS-1705投票文件缺失到权限错误的完整诊断
1. 问题现象与初步分析
最近在VMware虚拟化环境(Linux 7.6)中部署Oracle RAC 19c时,遇到了一个典型问题:节点2的root.sh脚本执行失败,导致集群启动失败。具体报错信息包括CRS-1705(投票文件缺失)、CRS-2883、CRS-4406及PRVG-2032/PRVH-0116(文件权限/属主错误)等一系列复合错误。
从日志中可以看到,root.sh脚本在执行到第17步"StartCluster"时开始报错。关键错误信息是CRS-1705,提示"Found 0 configured voting files but 1 voting files are required",即系统找不到配置的投票文件,但集群需要至少1个投票文件才能正常运行。这个错误直接导致了后续的集群启动失败。
2. 深入分析投票文件问题
2.1 投票文件的作用
投票文件(Voting Files)是Oracle RAC集群中的关键组件,主要用于:
- 集群成员资格判定
- 脑裂(Split Brain)防护
- 故障检测和恢复
在19c版本中,Oracle推荐将投票文件放在ASM磁盘组中。每个投票文件通常需要至少1GB的空间,且Oracle建议配置奇数个投票文件(通常为3个)以实现高可用。
2.2 为什么节点2找不到投票文件
根据错误日志和实际排查,我们发现节点2找不到投票文件的原因可能有:
- ASM磁盘组在节点2上未被正确识别
- 共享存储配置存在问题
- 节点间的配置不同步
- 权限问题导致无法访问投票文件
通过检查两个节点的ASM磁盘状态,我们发现节点1可以正常识别所有ASM磁盘,而节点2缺少部分磁盘的识别。这解释了为什么投票文件在节点1可用而在节点2不可用。
3. 文件权限与属主问题分析
除了投票文件问题,错误日志中还显示了几个关键的文件权限和属主问题:
3.1 /etc/oracleafd.conf文件问题
PRVG-2032 : Group of file "/etc/oracleafd.conf" did not match the expected value on node "rac2". [Expected = "oinstall(54321)" ; Found = "asmadmin(54329)"]这个错误表明/etc/oracleafd.conf文件的组属性不正确。Oracle期望这个文件的组为oinstall(54321),但实际发现是asmadmin(54329)。
3.2 cmdllroot.sh文件问题
PRVH-0116 : Path "/u01/app/19.3.0/grid/crs/install/cmdllroot.sh" with permissions "rw-r--r--" does not have execute permissions for the owner, file's group, and others on node "rac2". PRVG-2031 : Owner of file "/u01/app/19.3.0/grid/crs/install/cmdllroot.sh" did not match the expected value on node "rac2". [Expected = "grid(54322)" ; Found = "root(0)"] PRVG-2032 : Group of file "/u01/app/19.3.0/grid/crs/install/cmdllroot.sh" did not match the expected value on node "rac2". [Expected = "oinstall(54321)" ; Found = "root(0)"]这里有三个问题:
- 文件缺少执行权限(只有读权限)
- 文件属主应该是grid用户,但实际是root
- 文件组应该是oinstall,但实际是root
4. 系统性解决方案
4.1 解决共享存储识别问题
- 在节点2上执行以下命令重新扫描ASM磁盘:
# 以root用户执行 oracleasm scandisks oracleasm listdisks- 检查所有共享磁盘在两个节点上是否都能被识别:
# 在两个节点上都执行 ls -l /dev/oracleasm/disks/- 如果发现有节点2上多出来的无效ASM磁盘(如原始内容中提到的ASMDISK_OCR),可以删除:
oracleasm deletedisk -v ASMDISK_OCR4.2 修正文件权限和属主
- 修正/etc/oracleafd.conf文件的组属性:
chown :oinstall /etc/oracleafd.conf- 修正cmdllroot.sh文件的权限和属主:
chmod 755 /u01/app/19.3.0/grid/crs/install/cmdllroot.sh chown grid:oinstall /u01/app/19.3.0/grid/crs/install/cmdllroot.sh4.3 重新配置共享磁盘(VMware环境特有问题)
在某些VMware环境中,特别是使用Workstation Pro时,可能会遇到共享磁盘配置问题。可以尝试以下步骤:
- 在root.sh失败后,不要关闭安装界面
- 进入节点2的虚拟机设置,移除所有共享磁盘
- 重新添加共享磁盘(不需要重启操作系统)
- 在节点2上重新执行root.sh
5. 验证与后续步骤
完成上述修复后,应该验证集群状态:
- 检查集群资源状态:
crsctl status res -t- 检查投票文件状态:
crsctl query css votedisk- 检查ASM磁盘组状态:
asmcmd lsdg如果一切正常,应该能看到集群资源都处于ONLINE状态,投票文件被正确识别,ASM磁盘组可访问。
6. 经验总结与预防措施
在实际部署Oracle RAC时,以下几点可以帮助避免类似问题:
- 共享存储验证:在安装前确保所有节点都能正确识别所有共享磁盘
- 权限一致性检查:使用cluvfy工具预先检查权限和配置一致性
- 安装顺序:确保先完成节点1的安装,再添加节点2
- 环境准备:严格按照Oracle文档准备操作系统环境和参数
- 日志监控:安装过程中实时监控日志文件,及时发现并解决问题
我在多个RAC部署项目中遇到过类似问题,发现VMware环境下的共享磁盘配置特别容易出问题。建议在虚拟化环境中部署RAC时,特别注意存储配置的稳定性和一致性。
