【故障处理】rac节点不能启动报“has a disk HB, but no network HB”的错误

1    1003    9

👉 本文共约3042个字,系统预计阅读时间或需12分钟。

今天同事说有一套rac 19c的环境,不能使用了,让我帮忙看看。

这套rac环境是搭建在华为云ECS上的,操作系统为CentOS 7.6。根据经验,rac不能启动,主要是2个方面的原因:一个是共享存储,一个网络。共享存储常见原因是盘掉了,或盘坏了,或多路径软件出问题等等,而网络问题常见原因是私网网卡坏了,或节点之间网络不通(注意:修改ssh端口或修改oracle和grid密码不会影响rac的正常运行)。

很不幸,这套环境的共享和网络都有问题,下面慢慢分析。

原因一:共享盘掉了

首先,看看2个节点的共享盘是不是一致的,查看后发现节点2少了一块盘,让客户把节点2的盘重新挂载一下,

【故障处理】rac节点不能启动报“has a disk HB, but no network HB”的错误

然后查看,共享盘已经一致了:

这里,磁盘顺序虽然不一样,但是,没有关系,用的是udev绑定的,不影响rac的运行

等rac节点正常启动后,可以看到如下内容:

原因二:安全组封了

登陆ECS,发现只有节点1在运行,而节点2没有运行集群服务。

使用命令crsctl start has启动节点2的集群服务后,通过crsctl stat res -t -init观察启动过程:

多次执行crsctl stat res -t -init看到,启动一直卡在ora.cssd服务这里,查看日志:

重复输出以上内容,里边有关键词“has a disk HB, but no network HB”,意思是有磁盘心跳,但是没有网络心跳,猜测是私网通信(网络心跳)的问题,而ohasd进程没有啥有用的信息:

节点1的日志也没有啥可用的信息。

使用ping命令ping公网和私网,都没有问题:

接下来用traceroute来查看:

发现,使用traceroute结果不通(而且公网和私网都不通),说明网络的确有问题。可见,能ping通,不一定网络就没有问题,能ping通只是说明节点之间的ICMP协议通信没有问题。

之前没碰到过这类错误,只能求助于MOS和各大搜索引擎了,下面总结一下网友碰到的原因:

  • CSSD not starting up on second Node in a 2 Node Cluster. (Doc ID 2519544.1) :原因是服务器启动了安全类的软件或中病毒了,需要将安全类的软件停止才可以。

  • 禁用HAIP:这个环境之前已经禁用过了,可以参考:https://www.xmmup.com/dbbao44oracle-racjiqunzhongdeipleixingjianjie.html

  • 交换机和网卡有问题:我把网卡删掉,重建了一次网卡(类似于拔掉网卡,再插入),依然没有解决。网卡先down再up也没有解决,可见我的系统不是网卡本身的问题。

  • 防火墙问题:该系统防火墙是关闭的。

  • 多播工作机制异常: 多播工作机制可以通过执行oracle的mcasttest.pl脚本进行检测,参考Grid Infrastructure Startup During Patching, Install or Upgrade May Fail Due to Multicasting Requirement (ID 1212703.1)。我运行脚本的时候报错,就没有检查了,感觉不是这个原因引起的。

  • 节点进程gipcd.bin存在异常:gipcd.bin进程负责管理集群中所有的私有网卡,有一定原因是由于正常节点1服务器此进程出现异常,导致节点2服务器集群HAIP一直处于starting,cssd进程无法启动。
    1) 手动终止节点1的gipcd.bin进程,kill之后发现集群会自动将此进程拉起,无需重启节点1的集群服务
    2) 重启节点2集群服务,集群状态恢复正常,问题解决,由此判断此故障是由于正常节点集群gipcd.bin进程异常造成

  • oracle bug:此问题可能是BUG 13334158、BUG13811209、BUG12720728造成,在11.2.0.3.12 G I PSU3及以上PSU修复,可参考相关文档。

  • 其他解决方案
    导致节点2启动失败的可能原因有很多,如果上述方案无法解决,可参考以下方案:
    a) 关闭正常节点1集群服务,先重启节点2集群服务再重启节点1集群服务(结果发现我的环境,节点1启动不起来,就是同时只能有1个节点启动
    b) 关闭所有集群服务,拔掉心跳线,15分钟后重新插入,再重启集群服务(可反复插拔进行尝试)
    c) 手动启动haip:crsctl start res ora.cluster_interconnect.haip -init,或禁用HAIP
    d) 重启两台服务器。

  • 节点互信问题:其实,只要安装好rac后,修改oracle和grid用户的密码或者修改sshd的默认22端口,都不会导致rac的问题,因为互信是通过密钥来通信的,尽管如此,我还是测试了一下互信,没有问题:

    这里,需要说明的一点是,如果你修改过sshd的端口为非22端口,那么应该同时修改/etc/services文件,否则直接用ssh测试肯定不通:

    问了客户,客户把密码和端口都修改过!!

  • 重新跑root.sh脚本:这是万般无奈下的解决办法(可以解决很多问题),可惜我做了一次后,也失败了,请参考:https://www.xmmup.com/oracle-raczhongxinzhixingroot-shjiaoben.html

到此,从早上10点到晚上8点,时间就这样过去了。。。。已经打算放弃了,准备卸载掉rac,重新安装,可是就是不甘心,没找到原因。。。。:

。。。。然后洗了个澡,当然,洗澡的同时脑子一直在想还有哪个方面没有考虑到,,,最后想到,是不是有人动了华为云的安全组策略了,因为这套rac之前中过病毒,可能客户修改过安全组,于是,赶紧查看安全组,发现:

【故障处理】rac节点不能启动报“has a disk HB, but no network HB”的错误

果然,用户把udp端口都没有开!!!!

于是,添加2个节点之间的所有udp端口,如下所示:

【故障处理】rac节点不能启动报“has a disk HB, but no network HB”的错误

然后,节点2立马就通了,traceroute输出结果:

再去启动节点2,发现一切正常,此时是晚上10点左右:

本人提供Oracle、MySQL、PG等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

一个安全组的问题,耗了我1天!!!

rac中的udp端口

其实,rac的节点之间通信有很多端口是通过udp端口进行通信的(例如cssd、ohasd等),也有部分是通过tcp端口通信的(例如tnslsnr),

所以,在云平台上安装rac,在安全组里,必须开启2个节点之间的所有udp和tcp端口。

找一个单机的Oracle环境:

也有部分udp端口。

未解决问题

1、ora.storage 一直处于STARTING状态,已经禁用haip了
2、典型现象:节点1关闭后,节点2的ora.storage就可以启动了。 或者,启动节点2的ora.storage后,节点1的ora.storage就不能启动了。
3、网络、共享存储都已检查
4、重跑root.sh脚本后依然没有解决

5、还原环境,没再继续弄。。。。。。

总结

1、执行“$GRID_HOME/root.sh”有一定的风险,请做好数据库备份。

    头像

    小麦苗

    学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

    您可能还喜欢...

    1 条回复

    1. 头像 小麦苗说道:

      traceroute默认使用UDP数据包探测。

    发表评论

    您的电子邮箱地址不会被公开。

    1 × 4 =

     

    嘿,我是小麦,需要帮助随时找我哦
    • 18509239930
    • 个人微信

    • 麦老师QQ聊天
    • 个人邮箱
    • 点击加入QQ群
    • 个人微店

    • 回到顶部
    返回顶部