单节点RAC无法启动

前几天同事遇到一个问题,在某RAC环境中,由于SA要打patch,所以希望RAC跑在单节点模式下,他先down掉了一台机器,在另外一台机器上,叫DBA把instance起来。

这是一个2个RAC的环境,有2台server,每个server上跑2个instance。即:
对于SIAP数据库,SIAP1在server1上;SIAP2在server2上;对于SIMP数据库,SIMP1在server1上,SIMP2在server2上。

数据库是11g的RAC,共享存储和心跳有veritas控制,RAC cluster有CRS控制。

目前server2已经down了,希望在server1上启动SIAP1和SIMP1。问题是,SIMP1已经启动,但是SIAP1却启动不了。启动时报错为:

看报错的提示,是ce2的网卡没有在跑,要求将_disable_interface_checking设置成true才能把数据库起来。

由于当时情况紧急,没来得及细细研究,只是当SA把另一台server也起来的时候,SIAP1就能启动起来了。

于是,我们不禁要问,为什么在同一台server,一个instance能起来,另一个却不能?

我们来查一下RAC的网络配置,看看ce2是什么网卡。(当前状态已正常,2个server,4个instance均工作正常)

我们看到ce2网卡配置的IP是192.168.0.1,而从hosts文件中看到,这个地址是private的地址。也就是说,SIAP1在启动的时候,去检查private地址的网卡是否up,如果up,实例才能正常启动。

类似这样的检查private网络的网卡,在ASM+10gRAC的环境中也同样存在:

在启动过程中,asm的alertlong中也可以看到会检查private网络:

也就是说,不管在10g还是11g中,不管是asm instance还是database instance,在RAC环境下,启动的时候,总是会检查private的网卡是否up,只有up的情况下,才能启动instance。

那么,为什么我们的SIMP1却能启动呢?

我们来看看SIAP1和SIMP1启动时的alertlog,看看有何不同:
SIAP1启动的alertlog:

SIMP1启动时候的alertlog:

我们看到,SIMP1启动时,是用144.135.159.111 这个IP做节点间通信的,而SIAP1启动时,是用192.168.0.1这个IP做节点间通信。

为什么在CRS中都没有配置cluster_interconnect,2个instance会走截然不同的IP。

我们知道在CRS中如果没有配置cluster_interconnect,那么private是会走public IP的,因此,SIMP1确实属于这种情况。那为何SIAP1却没有按照这种情况走?

我们想到有另外一个参数,初始化参数cluster_interconnects,当配置这个参数时,CRS中的配置就是失效,因为优先权还是初始化参数中的cluster_interconnects高。我们来检查一下2个instance的这个参数:
SIAP1:

SIMP1上:

看来这就是问题所在了,由于在SIAP1中配置了初始化参数cluster_interconnects 为固定的private地址,这个配置会忽略CRS中的设置,不再走public的地址,所以当SA down掉private的网卡,也就是ce2的时候,SIAP1就起不来了。

但是SIMP1由于没有配置cluster_interconnects,它所使用的配置是CRS中的信息,且CRS中没配cluster_interconnect,所以就走public网络了,即我们在alertlog中看到的144.135.159.111的地址。

初始化参数cluster_interconnects的配置,CRS中global public的配置,CRS中global cluster_interconnect的配置。明白了这些的关系和优先级,故障的原因也就明了了。

相关文章

5条评论

  1. 大侠,看你的文章简直太爽了, 好像是刨工解牛, 分析的很清楚,我怎样才能达到你这种程度呢 ???

  2. 很想得到 大侠的指点, 我的邮箱是 :gghuyangg@163.com 。

    Best regards!

  3. 刚好数据库报错:
    SQL> startup
    ORA-27504: IPC error creating OSD context
    ORA-27300: OS system dependent operation:check if cable failed with status: 0
    ORA-27301: OS failure message: Error 0
    ORA-27302: failure occurred at: skgxpcini1
    ORA-27303: additional information: requested interface ce0 interface not running set _disable_interface_checking = TRUE to disable this check for single instance
    cluster. Check output from ifcon

    当然,原因已经找到,是私有网络的交换机坏了。而且我数据库的参数cluster_interconnect,并没有配置具体的地址,而是空值。我启动数据库的时候,就报上述的错误,并没有
    你所说的“我们看到,SIMP1启动时,是用144.135.159.111 这个IP做节点间通信的,而SIAP1启动时,是用192.168.0.1这个IP做节点间通信。

    为什么在CRS中都没有配置cluster_interconnect,2个instance会走截然不同的IP。

    我们知道在CRS中如果没有配置cluster_interconnect,那么private是会走public IP的,因此,SIMP1确实属于这种情况。那为何SIAP1却没有按照这种情况走?

    我们想到有另外一个参数,初始化参数cluster_interconnects,当配置这个参数时,CRS中的配置就是失效,因为优先权还是初始化参数中的cluster_interconnects高”
    我想你的结论是有些问题的。
    谢谢。

  4. re www_xylove,你的crs配置了cluster_interconnect吗?oifcfg getif -global看看。我想我和你的情况是不一样的,你应该配置了crs 的cluster_interconnect,而我的没有配。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据