1. 问题现象

出现以下情况时,Oracle Clusterware 会驱逐群集中的节点

  1. 节点未通过网络心跳进行 ping 操作

  2. 节点未 ping 表决磁盘

  3. 节点被挂起/忙碌,因此无法执行任何一个之前的任务


在大多数情况下,当节点被驱逐时,会有信息写入日志,用于分析节点驱逐的原因。但是,在某些情况下可能缺少这一步,本文介绍的步骤适合以下这些情况:在11gR2 (11.2.0.1) 之前的 Clusterware 版本中,没有足够的信息或没有信息可用于分析节点驱逐的原因。
从 11.2.0.1 开始,客户无需设置 diagwait,因为Oracle已经更改了体系结构。

2. 产生原因

节点被驱逐以及节点因 CPU(或 CPU 不足)而变得异常繁忙时,可能会造成操作系统没有时间将日志/跟踪信息刷新到文件系统中。

一种有用的方法是设置 diagwait 属性,以延迟节点重新启动,给操作系统足够的时间写入跟踪信息。设置 diagwait后,Clusterware 将在重新启动之前再等待 10 秒 (Diagwait - reboottime),以便在不增加数据损坏的可能前提下,安全的搜集诊断数据。

在修正操作系统调度问题后,可以按照下面的步骤取消 diagwait的设置。

可在 Windows 上设置 Diagwait,但它不会如同在 Unix-Linux 平台上那样改变行为。

Diagwait 属性在 10.2.0.3 被推出,已经包含 10.2.0.4 & 11.1.0.6 以及更高的版本中。 大多数平台的 10.1.0.5 版本也已经包含。 这意味着可以在 10.1.0.5 (及更高), 10.2.0.3 (及更高) 和 11.1.0.6 (及更高) 版本中设置 diagwait。

如果 crsctl set/get css diagwait 命令返回 “unrecognized parameter diagwait specified” ,这说明Clusterware 版本不能实施 diagwait。需要在设置diagwait前打上对应的 patchset。

3. 解决方法

更改 diagwait 时关闭所有节点上的 clusterware 软件。

3.1 以root用户的身份执行

#crsctl stop crs
#<CRS_HOME>/bin/oprocd stop

3.2 执行以下命令,确保关闭所有节点上的集群软件

#ps -ef |egrep "crsd.bin|ocssd.bin|evmd.bin|oprocd"

这步应该不会返回任何进程。如果在集群运行时继续执行下一步骤,可能会损坏 OCR。在关闭群集所有节点上的clusterware 软件前,不要继续操作。

3.3 将“diagwait”参数的值改为 13 秒(其中一个节点)

#crsctl set css diagwait 13 -force

3.4 检查是否已成功设置 diagwait

parameter diagwait is not defined”。
#crsctl get css diagwait

说明:该命令应返回 13。如果未设置 diagwait,将返回消息 Configuration

3.5 重新启动CRS

#crsctl start crs

3.6 验证Clusterware 是否正常运行

#crsctl check crs

3.7 取消设置/删除 diagwait

在修正操作系统调度问题前,不应取消diagwait设置,因为这样可能会导致出现节点驱逐的情况。
Diagwait 会将节点驱逐(和重新配置)延迟 diagwait (13) 秒。如果需要移除 diagwait,则应按照上述步骤操作,其中步骤 3.3
需用以下命令替代

#crsctl unset css diagwait -force

(注意:在取消设置 diagwait 时,必须使用 -force 选项,因为执行取消设置操作时crs已经关闭)

参考文档:

NOTE:726833.1 - Linux: Hangcheck-Timer Module Requirements for Oracle 9i, 10g, and 11gR1 RAC
使用 Diagwait 作为诊断工具,获取用于诊断 Oracle Clusterware 节点驱逐的更多信息 (Doc ID 1525761.1)
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐