首先要明确一个核心观点:CRS-4535 的真正问题并非 crsd 进程崩溃,而是它根本未能成功启动——根本原因是底层依赖链断裂。因此,不要一上来就盲目运行 crsctl start crs,这样做大概率无效,甚至可能导致集群状态进一步恶化。正确的处理思路是:先确认私网连通性、OCR/Voting Disk 可访问性以及 ASM 实例是否就绪,然后针对具体原因进行修复。

检查私网心跳连通性与配置一致性
OCR 和 CSSD 的正常运行高度依赖私网通信,数据包丢失、高延迟、MTU 不匹配或防火墙阻断,都会导致 cssd.bin 无法正常启动,进而阻止 crsd.bin 完成注册流程。因此,私网是排查的第一道关卡。
- 使用
ping -I执行双向测试,要求延迟 ≤5ms——不要用默认路由的ping结果来替代。 - 检查
ifconfig中私网接口的mtu值,所有节点必须完全一致,推荐统一设置为1500,避免因分片导致通信异常。 - 临时关闭防火墙:RHEL5/6 使用
service iptables stop,RHEL7+ 使用systemctl stop firewalld。不要忽视防火墙的影响,很多奇怪的问题都由此引发。 - 不要忘记
/etc/hosts文件:每个节点的 public、private 和 SCAN 名称必须正确定义,不能出现重复或解析冲突,否则 CSSD 会无法找到正确的通信目标。
验证 OCR 和 Voting Disk 的可达性与权限
在 crsd 启动之前,它必须能够读写 OCR 和 Voting Disk。路径不可达、权限配置错误、ASM 磁盘组未 mount 等任何一项都会触发 CRS-4535。
- 先执行
ocrcheck -config查看 OCR 配置路径,再用crsctl query css votedisk确认投票盘状态是否为ONLINE。这两步是最基本的健康检查。 - 切换到
grid用户,执行asmcmd lsdg,重点检查 OCR 所在磁盘组的state是否为MOUNTED、offline_disks是否为0、usable_file_mb是否大于 0。这三个条件缺一不可。 - 检查设备权限:运行
ls -l /dev/mapper/ocr*,应看到属主为grid:asmadmin。若不一致,需要同步 udev 规则并重新加载。 - 另外,不要忽略
ocrconfig -showbackup——如果备份路径不可写(例如 NFS 挂载点异常),也可能阻塞启动流程。这种边界情况经常被忽略。
确认 ASM 实例和 ora.crsd 资源状态
即使 OCR 磁盘组已经 mount,ASM 实例本身也可能尚未启动,或者 ora.crsd 资源卡在 INTERMEDIATE 或 OFFLINE 状态——此时手动拉起并无意义。
- 使用
ps -ef | grep asm_pmon确认 ASM 实例进程是否存在。若没有,尝试执行srvctl start asm -n启动。 - 运行
crsctl stat res ora.crsd -init,如果状态不是ONLINE,不要急于执行start。先去查看日志:$ORACLE_HOME/log/。/crsd/crsd.log - 日志中常见的线索:
ORA-15077表示 ASM 实例不可达,CLSF-00100通常指向 OCR 设备路径访问失败。 - 如果
crsd.log显示反复尝试连接 ASM 但超时,优先使用asmcmd尝试列出 OCR 目录,不要仅凭磁盘组状态就下结论。
避免 11.2.0.1 版本特有的启动卡死问题
Oracle 11.2.0.1 GI 存在一个已知 bug:首次 crsctl start crs 可能卡住不动,实际上是 ohasd 在等待一个命名管道就绪,需要人工干预才能继续。
- 在 root 用户下执行
./crsctl start crs之后,立即另开一个终端,运行:/bin/dd if=/var/tmp/.oracle/npohasd of=/dev/null bs=1024 count=1。 - 这个命令会阻塞几秒,完成后原终端通常立刻显示
CRS-4123成功信息。 - 注意:此操作仅适用于 11.2.0.1;升级到 11.2.0.4+ 可彻底避免该问题。
- 但务必牢记:这个补救措施不能跳过前三步诊断——如果私网不通或 OCR 不可达,dd 命令也无法挽救。
最后说一个最容易导致误判的情况:当 CRS-4535 报错时,crsctl check crs 往往显示 CRS-4529(CSSD online)和 CRS-4533(EVM online)都正常,于是很多人以为“只有 crsd 有问题”。但实际上,这恰恰说明 CSSD 已经退守为单节点模式,不再尝试集群协调——根源一定出在跨节点通信或共享存储层面,而不是 crsd 自身二进制文件损坏。不要在错误的方向上浪费时间。
