基于华为云平台的OracleRAC一个节点无法启动

2020-08-05 00:00:00 集群 节点 工程师 日志 实例


之前的一个学生通过微信的寻求帮助:

林老师,你好!打扰了,今天遇到一个问题,我这里有一套Oracle rac 11g,今天有个节点2asm 起不来 后台有报:【RACPMON: terminating the instance due to error 481 

看到这个信息其实无法判断到底发生了什么,当时我手里有活,就让他把两个节点的数据库日志,ASM日志以及集群日志都发给我看看。日志是晚上到我手里,对于DBA来讲真的就没有真正的自由时间,这个案例虽然不是分内工作可以随便提几个意见就好了,但是对于熟人的事情,我总是难以拒绝,想想这个事他肯定也顶着领导的压力,如果容易排查就不会轻易找我了,于是我开始分析日志内容

分析:

集群日志:

LMON (ospid: 8967): terminating the instance due to error 29740

LMON:负责集群层面的节点关系,与其他实例的LMON进程定期心跳通信。当节点之间出现通信问题时,负责完成实例层面的重新配置和GES层面的实例恢复,当实例离开或加入集群,LMON负责实例层面的reconfiguration.每个数据库实例只有一个LMON进程

ASM 实例日志:

PMON (ospid: nnnn): terminating the instandue to error ce 481

从集群日志看是由于错误29740导致LMON终止数据库实例,而ASM实例则由于错误481时得PMON将其关闭。下面就需要分析这个两个错误的含义,我习惯使用oerr小工具 查看错误号的含义,在现实生产库维护中,我也多次使用感觉提示的比较准确,所以查看错误号含义时使用oerr也就成了我的习惯。

oerr ora 29740

29740, 00000, "evicted by instance number %s, group incarnation %s"

// *Cause: This instance was evicted from the group by another instance of the

//         cluster database group for one of several reasons, which may

//         include a communications error in the cluster and failure to issue

//         a heartbeat to the control file.

// *Action: Check the trace files of other active instances in the cluster

//          group for indications of errors that caused a reconfiguration.

oerr ora 481

00481, 00000, "LMON process terminated with error"

// *Cause:  The global enqueue service monitor process died

// *Action: Warm start instance

 

看来是网络通信可能有问题,下面我们通过错误提示找到一篇MOS文档

MOS参考文档

ASM on Non-First Node (Second or Others) Fails to Start: PMON (ospid: nnnn): terminating the instance due to error 481 (Doc ID 1383737.1)

 

根据提示我们分析了可能的问题,文档中提示的Case有几个

Case1: link local IP (169.254.x.x) is being used by other adapter/network

Case2: firewall exists between nodes on private network (iptables etc)

Case3: HAIP is up on some nodes but not on all

$GRID_HOME/bin/crsctl stat res ora.cluster_interconnect.haip -init

Case4: HAIP is up on all nodes but not havesome do  route info

Case5. HAIP is up on all nodes and route info is presented but HAIP is not pingable

oracle@racnode2 script]$ netstat -r

oracle@racnode2 script]$ ping 169.254.x.x

通过比对,发现竟然HAIP不通了,这个真是没有想到。这里问题就比较清楚了:

haip不通,lmon关闭数据库实例,数据库实例的lmon abortedASM实例的LMON 因为被实例1 evicted,该进程aborted, ASMPMON发现lmon aborted 关闭实例。这就是一直无法启动的原因。

后续经过排查,是华为的云工程师没有考虑到169.254.x.x网段,直接过滤掉了,再进一步追问,为了屏蔽改网段,之前是正常的,原来由于过节前做网络加固,除了安装文档中提到的RAC的相关地址,其他地址都封闭了,其实后面放行了,但是依然关闭了UDP,这个是后续的问题。

 

解决方法:对HAIP网段放行,并允许UDP通信。

后来写了个小段子,以资娱乐吧

        Oracle集群无论跑在云平台或非云,做安全加固,不要只考虑文档中的提前规划的IP,对于集群而言HAIP是它的生命线,忽略了HAIP的安全策略必将导致集群重构(某个节点被evicted,ASM 实例被terminated)

        云工程师:我负责网络加固,HAIP是啥东西

        OracleDBA:天啊,没它我们会死

        云工程师:哦,不能见死不救哦

        OracleDBA:亲人那!

        云工程师:欧了!

        OracleDBA:集群拉起来了!thku

        OracleDBA:大兄弟啊,做啥了,又挂了……

        云工程师:啊,又死了,我们都放行了啊

        OracleDBA:哦,可是我这HAIP又不通了

        云工程师:嗯?我们怎么救你?

        OracleDBA:大兄弟,UDP开了吗?

        云工程师:哦,刚全关了,不安全!!!

        OracleDBA:帮忙给个出口呗,我tma太需要了!

         

 

 

 


L

 

 



相关文章