• 问题描述

在某专有云3.6.1版本的客户现场安装Oracle rac安装的过程当中,在节点组播正常测试通过的情况下,依旧发生节点驱逐的情况发生;

由于云上采用共享存储以及havip产品的使用的情况下,对于Oracle的11.2.0.2版本以后需要确认使用priv网络ip设置cluster_interconnect来替代169心跳网络特性;

但是按照云上Oracle rac商业输出方案进行常规的配置安装以后,以后依然发生节点驱逐的情况发生;

报错截图如下:

图为在二节点执行root.sh脚本的时候报错节点通信失败,报错退出;

presto 单节点 单节点rac安装_数据库


从报错看是cssd进程没有启动导致;

检查ocssd.log日志如下超时信息:

presto 单节点 单节点rac安装_运维_02


网络节点通信超时,节点退出;root.sh脚本执行失败,grid集群安装失败;

  • 问题排查

由于对于专有云网络侧的不了解或者未知问题的了解,故而按照常规思路考虑对于节点驱逐的情况,一般是由于组播未通信或者cluster_interconnect参数未设置导致;

但是经过测试组播通信无误,并使用mcasttest测试以后结果显示也是组播没有通信出现问题;

presto 单节点 单节点rac安装_组播_03


对于42424端口的multicast是successded;

然后alter system set cluster_interconnect参数也是设置了priv的两个ip地址;

并进行多次测试以后问题依旧;

由于对于priv通信支持的是udp的包体通信,且经查询mos以及咨询原厂同学确认;

Network Protocols and Real Application Clusters (文档 ID 278132.1)

这个mos里边提到去掉Oracle typically recommends Infiniband (RDS)以外,Linux操作系统支持的udp协议;

心跳是udp通讯,必须用支持tcp的交换机;

presto 单节点 单节点rac安装_组播_04


presto 单节点 单节点rac安装_运维_05


因此怀疑是否是对于私网网络的MTU的包体通信过程中超过了MTU的大小导致的问题,故而进行了关闭UFO参数的操作来确认该问题;

经过关闭UFO,然后进行测试如下:

Eth0和eth1都需要关闭

ethtool -K eth1 ufo off

presto 单节点 单节点rac安装_操作系统_06


presto 单节点 单节点rac安装_操作系统_07


然后再次执行安装grid集群,二节点执行root.sh成功;

presto 单节点 单节点rac安装_数据库_08


两节点的ocssd.log日志输出正常如下,有私网通信包体的发送;

presto 单节点 单节点rac安装_操作系统_09

  • 问题解决

因此临时解决的方式就是对于关闭UFO,设置/etc/rc.local开机自启动;

presto 单节点 单节点rac安装_presto 单节点_10

  • 根本原因

对于根本原因经过最后确认如下:
专有云环境libvswitch版本存在bug,单元udp大包,报文>mtu,可能会checksum算错的情况。目前已知的影响是oracle rac的部署,先临时通过关闭ufo的方式解决,但存在后期运维风险。最终的解决方案是升级libvswith版本,理论上是对整体集群不影响。