以下案例来自于真实案例,关键信息已经做了脱敏。
1、现场环境如下
2台服务器光纤直连1台储存,做的Oracle RAC集群,数据库版本是11.2.0.3。储存是按冗余路劲的接法,配置了multipath。
2、客户反馈故障及故障处理过程
某日早上9:00客户反馈RAC集群的SCAN地址不能访问,9:05尝试远程登录RAC集群的节点1发现登录失败,再次尝试登录RAC集群的节点2,发现可以成功登录节点2.
检查进程发现数据库和集群软件进程已经停止,尝试手工启动集群软件发现启动失败。查看节点2ocssd.log发现8:54:50日志提示:
node 1,rac1,has a disk HB, but no network HB。说明这个时候RAC集群2个节点和磁盘的心跳正常,但是节点1和节点2之间的心跳网出现故障。
查看节点2的集群软件日志alertrac2.log,发现日志提示和节点1的心跳网络连接超时(默认30秒),This node was evicted by node 1, rac1;details at (:CSSNM00005:) in /u01/grid/11.2.0//grid/log/rac2/cssd/ocssd.log 。说明这个时候RAC集群2个节点间的心跳网络连接超时,RAC集群发生脑裂,节点1把节点2剔除出了RAC集群。电话联系
现场工程师去机房查看节点1服务器的故障情况,10:28发现由于内存故障节点1服务器处于挂机状态。现场工程师拔出内存并擦拭内存金手指后把内存插回内存插槽,然后
重启节点1服务器。10:50左右发现节点1和节点2的集群软件及数据库进程都恢复正常状态,10:55检查集群和数据库状态都正常后手动关闭节点1服务器计划进行硬件故障
维修。11:00左右检查节点2的集群软件和数据库状态都正常后告知用户数据库故障恢复。15:00左右节点1服务器的硬件故障维修结束并启动节点1服务器,节点1和节点2的
集群软件和数据库状态都恢复到正常状态。
3、复盘故障的根因
开始收集并下载2个节点的操作系统日志及集群软件日志分析这次故障的根因。从节点1操作系统日志上来看,在8:54:46左右em1-em4所有网络出现PCIe link lost,device
now detached的故障,所有网卡网络全部断开。从节点1集群日志alertrac1.log上来看,8:54:50发现与节点2心跳网络通讯出现异常,8:55:20把节点2 rac2从集群剔除,
节点2集群软件被关闭。
问题1:这里有一个问题就是节点1的网络出现问题,为何集群把节点2剔除了,集群为什么不剔除节点1?
答:我们当前数据库版本为11.2.0.3版本,根据ORACLE MOS文档1951726.1描述,在11.2版本上两个节点RAC在发生脑裂时,通常是小号节点生存下来,大号节点被剔除,从12.1
版本以后改为权重模式,因此节点1发生网络故障时,集群把节点2剔除,节点1存活下来。
问题2:为什么会断网?
答:断网是由于硬件问题造成,具体需要硬件系统工程师进行分析确认。
通过查看节点2的集群日志可以发现,在9:08:26的时候,节点2尝试启动集群,ora.cssd资源启动失败,从节点2的CSSD trace中,我们可以看到在每一次尝试启动ocssd的时候,
都会遇到 no network HB的报错,并且每一次重启CSSD,都会返回 RPC failed rc 3错误。从节点1的CSSD trace中我们可以看到,虽然节点1由于硬件问题处于挂机状态,但是CSSD
并没有挂掉,集群是存活状态。从节点1的操作系统日志也可以发现,在9:00-10:32之间,节点1主机系统以及CSSD都是存活状态,在节点1主机存活以及集群存活的情况下,节点2
集群启动需要与节点1进行通讯,但是由于通讯失败,导致节点2集群无法启动,属于预期行为。为了杜绝再次发生这种类似的极端情况,建议客户再搭建1套单机ADG。