ITPub博客

首页 > Linux操作系统 > Linux操作系统 > RAC怪像:Public NIC of a node failure resulting in RAC DB "suicide"

RAC怪像:Public NIC of a node failure resulting in RAC DB "suicide"

原创 Linux操作系统 作者:sunny123cn2002 时间:2011-01-11 16:51:05 0 删除 编辑

2011.1.5 RAC FAILOVER测试
HOSTNAME:testserver1,testserver2
OS:AIX 5300-09
HA:HACMP 5.4
ORACLE:10.2.0.4
SID:form,testorcl  
INSTANCE:form1,form2;testorcl1,testorcl2
动作:拔掉测试服务器testserver1上public网卡的网线
故障现象:client无论是PLSQL还是SQLPLUS连接DB长时间没有响应,没有报错
故障排查:
1、testserver1的VIP已经漂移到testserver2上;
2、crs_stat查看状态全部为online,在testserver2上conn /as sysdba能连接DB,查询系统表正常,但show parameter无响应
3、10几分钟后crs_stat显示form. DB OFFLINE,实例testorcl2状态OFFLINE,testorcl1状态ONLINE,此时查ORA进程还在,SQLPLUS连接显示connected,但查询系统表提示oracle无效
4、又过10几分钟所有的ORA进程都没有了,CRS进程还在,crs_stat状态如下:
 [testserver2@oracle] /oracle/product/10.2/crs/log/testserver2/crsd #crs_stat -t
Name           Type           Target    State     Host       
------------------------------------------------------------
ora....m1.inst application    ONLINE    OFFLINE              
ora....m2.inst application    ONLINE    OFFLINE              
ora.form.db application    OFFLINE   OFFLINE              
ora....orcl.db application    ONLINE    ONLINE    testserver1
ora....l1.inst application    ONLINE    ONLINE    testserver1
ora....l2.inst application    ONLINE    OFFLINE              
ora....er1.gsd application    ONLINE    ONLINE    testserver1
ora....er1.ons application    ONLINE    ONLINE    testserver1
ora....er1.vip application    ONLINE    ONLINE    testserver2
ora....er2.gsd application    ONLINE    ONLINE    testserver2
ora....er2.ons application    ONLINE    ONLINE    testserver2
ora....er2.vip application    ONLINE    ONLINE    testserver2
[testserver2@oracle] /oracle/product/10.2/crs/log/testserver2/crsd #ps -ef|grep ora
  oracle 352368 409616   0 12:21:24  pts/0  0:00 grep ora
  oracle 364742 331980   0 11:21:15      -  0:01 /oracle/product/10.2/crs/bin/evmd.bin
  oracle 372772 254158   0 11:21:17      -  0:00 /bin/sh -c cd /oracle/product/10.2/crs/log/testserver2/cssd/oclsomon; ulimit -c unlimited; /oracle/product/10.2/crs/bin/oclsomon  || exit $?
    root 385230 315606   0 11:21:16      -  0:40 /oracle/product/10.2/crs/bin/crsd.bin reboot
  oracle 409616 356556   0 09:17:28  pts/0  0:00 -ksh
  oracle 438498 499898   0 09:26:00  pts/1  0:00 -ksh
  oracle 462914      1   0 11:33:54  pts/0  0:00 /oracle/product/10.2/db_1/bin/tnslsnr LISTENER -inherit
  oracle 630954 667830   0 11:22:29      -  0:00 /oracle/product/10.2/crs/opmn/bin/ons -d
  oracle 639002 852206   0 11:21:19      -  0:06 /oracle/product/10.2/crs/bin/ocssd.bin
  oracle 667830      1   0 11:22:29      -  0:00 /oracle/product/10.2/crs/opmn/bin/ons -d
  oracle 741422 409616   1 12:21:24  pts/0  0:00 ps -ef
  oracle 770180      1   0 11:22:38      -  0:03 /oracle/product/10.2/crs/jdk/jre/bin/java -DPROGRAM=gsd -classpath /oracle/product/10.2/crs/jlib/netcfg.jar:/oracle/product/10.2/crs/jdk/jre/lib/rt.jar:/oracle/product/10.2/crs/jlib/srvm.jar:/oracle/product/10.2/crs/jlib/srvmhas.jar:/oracle/product/10.2/crs/jlib/ldapjclnt10.jar oracle.ops.mgmt.daemon.OPSMDaemon /oracle/product/10.2/crs
  oracle 774152 770180   1                  0:00
  oracle 807092 372772   0 11:21:17      -  0:00 /oracle/product/10.2/crs/bin/oclsomon.bin
  oracle 811008 364742   0 11:21:27      -  0:00 /oracle/product/10.2/crs/bin/evmlogger.bin -o /oracle/product/10.2/crs/evm/log/evmlogger.info -l /oracle/product/10.2/crs/evm/log/evmlogger.log
  oracle 852206 368872   0 11:21:19      -  0:00 /bin/sh -c ulimit -c unlimited; cd /oracle/product/10.2/crs/log/testserver2/cssd; /oracle/product/10.2/crs/bin/ocssd  || exit $?
5、把node1的public网线插上,ora进程在,crs进程在,但看alert告警日志显示DB已经shutdown,用SQLPLUS登录连接显示空线程,也就是说此时两个节点的DB都已经down了;
6、把node2的public网线拔掉则一切正常,VIP正常漂移,instance2被正常驱逐,instance1状态仍然为open,crs状态仍然online,客户端连接正常FAILOVER。此问题已发metalink,等待解决。

         原因已找到!主要原因是未配置cluster_interconnects参数或未在OCR中记录cluster_interconnect值导致!metalink给的解释是该参数主要记录了每个节点的心跳IP和网卡的对应信息,cluster根据该参数值选择网卡传送心跳包信息,一般该参数在安装时执行root.sh后会记录进去。而在我的测试环境中由于该参数值为空,所以cluster识别不到在hosts中心跳IP对应的网卡,故选择public网卡发送心跳包。而当node1的public网线被拔时,由于长时间"IPC Send timeout",node之间无法进行有效信息交互,例如LMON,LMS,LCK等进程失去通信(这些信息可以在trace file中找到),cluster发生split-brain,开始驱逐节点实例,metalink又说10G RAC里一般先驱逐instance号大的那个,故instance2被驱逐,node2的告警日志出现ORA-29740的报错。之后cluster进行集群重组,重组时node1的LMON进程发现依然无法与其他节点正常通信,并试图再次通过脑裂驱逐节点的方式来完成重组,但此时只剩唯一一个节点了,显然重组无法按照预期来完成,因此经过多次尝试和长时间的等待都没有结果的情况下,LMON只好报ORA-29702的错误,然后实例被关闭(alert中记录有"Instance terminated by LMON"或LMON的tracefile中可以证明),当CRS再来重启实例时则直接被LMON终止,到此node1的DB DOWN。
        而当拔掉node2的public网线时,刚好驱逐的是实例2,故node1重组能有效完成,实例能继续正常运行。
   metalink提供的解决办法如下:
   === ODM Proposed Solution ===
   1. set the database parameter cluster_interconnects manually
   e.g: SQL>alter system set cluster_interconnects='' scope=spfile sid='';
  
   2. use the command 'oifcfg setif' command to set public and private network for the cluster.
   e.g: # oifcfg setif /:
   #$ORA_CRS_HOME/bin/oifcfg setif –global eth0/10.2.166.0:public
   #$ORA_CRS_HOME/bin/oifcfg setif –global eth1/192.168.1.0:cluster_interconnect

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/702413/viewspace-683623/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-11-01

  • 博文量
    6
  • 访问量
    9005