如何诊断节点重启问题  <转载>

本文介绍了如何诊断Oracle RAC环境中导致节点重启的问题,包括分析由ocssd、oclsomon和oprocd进程引发的节点重启原因,以及提供诊断所需的信息来源。重点关注网络心跳、磁盘心跳和操作系统日志等关键数据。

如何诊断节点重启问题

By Allen Gao on 三月 28, 2012

本文对如何诊断RAC环境中节点重启问题进行了介绍。适用于10gR2和11gR1.

首先我们对能够导致节点重启的CRS进程进行介绍。
1.ocssd : 它的主要功能是节点监控(Node Monitoring)和组管理(Group Management),它是CRS的核心进程之一。节点监控是指监控集群中节点的健康,监控的方法是通过网络心跳(network heartbeat)和磁盘心跳(disk heartbeat)实现的,如果集群中的节点连续丢失磁盘心跳或网络心跳,该节点就会被从集群中驱逐,也就是节点重启。组管理导致的节点重启,我们称之为node kill escalation(只有在11gR1以及以上版本适用),我们会在后面的文章进行详细介绍。重启需要在指定的时间(reboot time,一般为3秒)内完成。

网络心跳:ocssd.bin进程每秒钟向集群中的各个节点通过私网发送网络心跳信息,以确认各个节点是否正常。如果某个节点连续丢失网络心跳达到阀值,misscount(默认为30秒,如果存在其他集群管理软件则为600秒),集群会通过表决盘进行投票,使丢失网络心跳的节点被主节点驱逐出集群,即节点重启。如果集群只包含2个节点,则会出现脑裂,结果是节点号小的节点存活下来,即使是节点号小的节点存在网络问题。

磁盘心跳:ocssd.bin进程每秒钟都会向所有表决盘(Voting File)注册本节点的状态信息,这个过程叫做磁盘心跳。如果某个节点连续丢失磁盘心跳达到阀值,disk timeou(一般为200秒),则该节点会自动重启以保证集群的一致性。另外,CRS只要求[N/2]+1个表决盘可用即可,其中N为表决盘数量,一般为奇数。

2.oclsomon:这个进程负责监控ocssd是否挂起,如果发现ocssd.bin存在性能问题,则重启该节点。
3.oprocd:这个进程只在Linux和Unix系统,并且第三方集群管理软件未安装的情况下才会出现。如果它发现节点挂起,则重启该节点。

注意:以上的所有进程都是由脚本init.cssd产生的。

接下来是诊断节点重启问题是经常搜集的信息。
1.操作系统日志
2.<crs主目录>/log/<节点名称>/cssd/ocssd.log
3.oprocd.log(/etc/oracle/oprocd/*.log.* 或 /var/opt/oracle/oprocd/*.log.*)
4.<crs主目录>/log/<节点名称>/cssd/oclsomon/oclsomon.log
5. Oracle OSWatcher 报告

接下来我们讨论如何诊断节点重启问题。

1.由ocssd导致的节点重启。
如果在ocssd.log中出现以下错误,则表示节点重启是由于丢失网络心跳。接下来需要查看和网络相关的信息,如操作系统日志,OSW报表(traceroute的输出),以确定网络层面(cluster interconnect)是否存在问题,并确定最终的原因。
[ CSSD]2012-03-02 23:56:18.749 [3086] >WARNING: clssnmPollingThread: node <node_name> at 50% heartbeat fatal, eviction in 14.494 seconds
[ CSSD]2012-03-02 23:56:25.749 [3086] >WARNING: clssnmPollingThread: node <node_name> at 75% heartbeat fatal, eviction in 7.494 seconds
[ CSSD]2012-03-02 23:56:32.749 [3086] >WARNING: clssnmPollingThread: node <node_name>at 90% heartbeat fatal, eviction in 0.494 seconds
[CSSD]2012-03-02 23:56:33.243 [3086] >TRACE: clssnmPollingThread: Eviction started for node <node_name>, flags 0x040d, state 3, wt4c 0
[CSSD]2012-03-02 23:56:33.243 [3086] >TRACE: clssnmDiscHelper: <node_name>, node(4) connection failed, con (1128a5530), probe(0)
[CSSD]2012-03-02 23:56:33.243 [3086] >TRACE: clssnmDiscHelper: node 4 clean up, con (1128a5530), init state 5, cur state 5
[CSSD]2012-03-02 23:56:33.243 [3600] >TRACE: clssnmDoSyncUpdate: Initiating sync 196446491
[CSSD]2012-03-02 23:56:33.243 [3600] >TRACE: clssnmDoSyncUpdate: diskTimeout set to (27000)ms

注意:如果在主节点的ocssd.log中出现以上信息的时间点要晚于节点的重启时间,则说明节点重启的原因不是丢失网络心跳。

如果ocssd.log中出现以下错误,则表示节点重启是由于丢失磁盘心跳。接下来需要查看操作系统日志,OSWatcher报告(iostat的输出),以确定i/o层面是否存在问题,并确定最终的原因。
2010-08-13 18:34:37.423: [ CSSD][150477728]clssnmvDiskOpen: Opening /dev/sdb8
2010-08-13 18:34:37.423: [ CLSF][150477728]Opened hdl:0xf4336530 for dev:/dev/sdb8:
2010-08-13 18:34:37.429: [ SKGFD][150477728]ERROR: -9(Error 27072, OS Error (Linux Error: 5: Input/output error
Additional information: 4
Additional information: 720913
Additional information: -1)
)
2010-08-13 18:34:37.429: [ CSSD][150477728](:CSSNM00060: )clssnmvReadBlocks: read failed at offset 17 of /dev/sdb8
2010-08-13 18:34:38.205: [ CSSD][4110736288](:CSSNM00058: )clssnmvDiskCheck: No I/O completions for 200880 ms for voting file /dev/sdb8)
2010-08-13 18:34:38.206: [ CSSD][4110736288](:CSSNM00018: )clssnmvDiskCheck: Aborting, 0 of 1 configured voting disks available, need 1
2010-08-13 18:34:38.206: [ CSSD][4110736288]###################################
2010-08-13 18:34:38.206: [ CSSD][4110736288]clssscExit: CSSD aborting from thread clssnmvDiskPingMonitorTh<wbr>read<br> 2010-08-13 18:34:38.206: [ CSSD][4110736288]###################################<br><br> 2. 由oclsomon导致的节点重启。<br> 如果在oclsomon.log 中出现错误,则表示节点重启是由于ocssd进程挂起,由于ocssd进程拥有实时(RT)优先级,很可能此时操作系统存在资源(如cpu)竞争,接下来需要察看操作系统日志,OSW报表(vmstat,top的输出),以确定最终的原因。<br><br> 3.由oprocd导致的节点重启。<br> 如果在oprocd日志中出现以下信息,则表明节点重启是由oprocd进程导致。<br><br> Dec 21 16:15:30.369857 | LASTGASP | AlarmHandler: timeout(2312 msec) exceeds interval(1000 msec)+margin(500 msec). Rebooting NOW.<br><br> 由于oprocd进程通过查看系统时间以确定操作系统是否挂起,正确的配置ntp(或其他时间同步软件),调整diagwait=13 可以避免节点重启,另外,如果需要大幅度修改系统时间,建议首先停止CRS,在修改完成之后再重新启动。当然,我们也不排除操作系统挂起导致oprocd重启节点,所以,也需要查看OSWatcher报告(vmstat,top的输出),以确定最终的原因。<br><br><b>本文只是对诊断节点重启问题的思路进行了介绍,在具体实际问题当中还需要灵活运用。</b></wbr>



关于更多的信息,请阅读以下的MOS 文章。
Note 265769.1 :Troubleshooting 10g and 11.1 Clusterware Reboots
Note 1050693.1 :Troubleshooting 11.2 Clusterware Node Evictions (Reboots)

&lt;h3&gt;题目背景&lt;/h3&gt;&lt;p&gt;层叠样式表(Cascading Style Sheets,简写 CSS)是一种用来为结构化文档(如 HTML 文档)添加样式(字体、间距和颜色等)的计算语言。&lt;/p&gt;&lt;p&gt;例如,对于以下的 HTML 文档:&lt;/p&gt;&lt;pre&gt;&lt;code &gt;&lt;html&gt; &nbsp; &lt;head&gt; &nbsp; &nbsp; &lt;title&gt;Sample&lt;/title&gt; &nbsp; &lt;/head&gt; &nbsp; &lt;body&gt; &nbsp; &nbsp; &lt;h1&gt;Hello&lt;/h1&gt; &nbsp; &nbsp; &lt;p id="subtitle"&gt;Greetings&lt;/div&gt; &nbsp; &nbsp; &lt;p&gt;Hello, world!&lt;/p&gt; &nbsp; &lt;/body&gt; &lt;/html&gt; &lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;span style="color: rgb(51, 51, 51); background-color: rgb(255, 255, 255);"&gt;配合以下 CSS 片段可以为其中的标题和段落设置相应的格式:&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;code &gt;h1 { font-weight: bold; } #subtitle { font-size: 12px; } &lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这段 CSS 片段为前面 HTML 文档添加了样式,使得标题“Hello”(第 6 行 &lt;span style="color: rgb(199, 37, 78); background-color: rgb(249, 242, 244);"&gt;&lt;code&gt;&lt;h1&gt;&lt;/code&gt;&lt;/span&gt; 和 &lt;span style="color: rgb(199, 37, 78); background-color: rgb(249, 242, 244);"&gt;&lt;code&gt;&lt;/h1&gt;&lt;/code&gt;&lt;/span&gt; 标签之间的内容)具有粗体,使得段落“Greetings”(第 7 行 &lt;span style="color: rgb(199, 37, 78); background-color: rgb(249, 242, 244);"&gt;&lt;code&gt;&lt;p id="subtitle"&gt;&lt;/code&gt;&lt;/span&gt; 和 &lt;span style="color: rgb(199, 37, 78); background-color: rgb(249, 242, 244);"&gt;&lt;code&gt;&lt;\p&gt;&lt;/code&gt;&lt;/span&gt; 标签之间的内容)具有 12 个像素的字体大小。 这里,CSS 片段第 1 行中出现的 h1 是一个选择器,它选中了 HTML 文档第 6 行的 h1 元素。 CSS 片段第 2 行中出现的 #subtitle 也是一个选择器,选中了 HTML 文档第 7 行 id 属性为 subtitle 的 p 元素。 注意它并没有选中 HTML 文档第 8 行不带属性的 p 元素。&lt;/p&gt;&lt;h3&gt;题目描述&lt;/h3&gt;&lt;p&gt;本题要实现一个简化版的元素选择器。 给出一个结构化文档,和若干个选择器,对每个选择器找出文档中所对应选中的元素。&lt;/p&gt;&lt;h4&gt;结构化文档&lt;/h4&gt;&lt;p&gt;结构化文档由元素组成,一个元素可以包含若干个子元素(可以没有)。 一个文档有一个根元素,在整体上形成树的结构。 以下是本题结构化文档的一个例子:&lt;/p&gt;&lt;pre&gt;&lt;code &gt;html ..head ....title ..body ....h1 ....p #subtitle ....div #main ......h2 ......p &lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;文档中每行表示一个元素,元素的标签由一个或者多个字母或数字组成。&lt;/li&gt;&lt;li&gt;元素可以附加一个 id 属性,属性值也是由一个或者多个字母或数字组成,之前有一个井号 #。如果元素有 id 属性,标签和属性之间用一个空格字符分隔。&lt;/li&gt;&lt;li&gt;标签之前的缩进表示元素之间的包含关系:一个元素 E 所在行之后连续的缩进更深的行代表的元素是元素 E 的后代元素,其中缩进恰好深一层的是元素 E 的子元素。为了便于观察,每一级缩进用两个小数点符号 .. 表示。&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;选择器&lt;/h4&gt;&lt;p&gt;本题中会出现的选择器有三种,分别为:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;标签选择器:用标签来表示。例如 p 表示选择标签为 p 的所有元素。&lt;/li&gt;&lt;li&gt;id 选择器:用 id 属性来表示。例如 #main 表示选择 id 属性为 main 的所有元素。&lt;/li&gt;&lt;li&gt;后代选择器:复合表达式,格式为 A B,其中 A 和 B 均为标签选择器或 id 选择器,中间用一个空格字符分隔,表示选择满足选择器 B 的所有元素,且满足这些元素有祖先元素满足选择器 A。例如,选择器 div p 在上面的文档中会选中最后一行的元素 p,但不会选中 id 属性为 subtitle 的那个元素 p。注意,后代选择器可以有更多的组成部分构成。&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;输入格式&lt;/h3&gt;&lt;p&gt;输入第一行是两个正整数 n 和 m,分别表示 HTML 文档的行数,和待查询的 CSS 选择器的个数,中间用一个空格字符分隔。&lt;/p&gt;&lt;p&gt;第 2 行至第 n+1 行给出 HTML 文档。&lt;/p&gt;&lt;p&gt;第 n+2 行至第 n+m+1 行每行给出一个待查询的 CSS 选择器。记第 n+1+i 行的 CSS 选择器为si​,1≤i≤m。&lt;/p&gt;&lt;p&gt;保证输入的结构化文档和待查询的选择器都是合法的。&lt;/p&gt;&lt;h3&gt;输出格式&lt;/h3&gt;&lt;p&gt;输出共 m行,每行有若干个整数。&lt;/p&gt;&lt;p&gt;第 i 行表示选择器 si 选中的结果(1≤i≤m )。 其中第一个整数 ri 表示 si 选中的元素个数。 随后 ri 个整数,分别表示选中元素在结构化文档中出现的行号(行号从 1 &nbsp;开始编号)。&lt;/p&gt;&lt;p&gt;行号按从小到大排序,相邻整数之间用一个空格字符分隔。&lt;/p&gt;&lt;h3&gt;样例解释&lt;/h3&gt;&lt;p&gt;对丁样例中查询的5个选择器:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="color: rgb(199, 37, 78); background-color: rgb(249, 242, 244);"&gt;&lt;code&gt;p&lt;/code&gt;&lt;/span&gt;选中所有的元素&lt;span style="color: rgb(199, 37, 78); background-color: rgb(249, 242, 244);"&gt;&lt;code&gt;p&lt;/code&gt;&lt;/span&gt;;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(199, 37, 78); background-color: rgb(249, 242, 244);"&gt;&lt;code&gt;#subtitle&lt;/code&gt;&lt;/span&gt; 选中第 6 行 id 属性为 subtitle 的元素 &lt;span style="color: rgb(199, 37, 78); background-color: rgb(249, 242, 244);"&gt;&lt;code&gt;p&lt;/code&gt;&lt;/span&gt;;&lt;/li&gt;&lt;li&gt;由于没有标签为 &lt;span style="color: rgb(199, 37, 78); background-color: rgb(249, 242, 244);"&gt;&lt;code&gt;h3&lt;/code&gt;&lt;/span&gt; 的元素,因此 &lt;span style="color: rgb(199, 37, 78); background-color: rgb(249, 242, 244);"&gt;&lt;code&gt;h3&lt;/code&gt;&lt;/span&gt; 没有选中任何元素;&lt;/li&gt;&lt;li&gt;第 9 行和第 11 行的 &lt;span style="color: rgb(199, 37, 78); background-color: rgb(249, 242, 244);"&gt;&lt;code&gt;p&lt;/code&gt;&lt;/span&gt; 元素都有祖先是 &lt;span style="color: rgb(199, 37, 78); background-color: rgb(249, 242, 244);"&gt;&lt;code&gt;div&lt;/code&gt;&lt;/span&gt; 元素,而第6行的 &lt;span style="color: rgb(199, 37, 78); background-color: rgb(249, 242, 244);"&gt;&lt;code&gt;p&lt;/code&gt;&lt;/span&gt; 元素没有祖先是 &lt;span style="color: rgb(199, 37, 78); background-color: rgb(249, 242, 244);"&gt;&lt;code&gt;div&lt;/code&gt;&lt;/span&gt; 元素;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(199, 37, 78); background-color: rgb(249, 242, 244);"&gt;&lt;code&gt;div div p&lt;/code&gt;&lt;/span&gt;要求选中的&lt;span style="color: rgb(199, 37, 78); background-color: rgb(249, 242, 244);"&gt;&lt;code&gt;p&lt;/code&gt;&lt;/span&gt; 元素有两级祖先都是 &lt;span style="color: rgb(199, 37, 78); background-color: rgb(249, 242, 244);"&gt;&lt;code&gt;div&lt;/code&gt;&lt;/span&gt; 元素,只有第 11 行的&lt;span style="color: rgb(199, 37, 78); background-color: rgb(249, 242, 244);"&gt;&lt;code&gt;p&lt;/code&gt;&lt;/span&gt;元素满足这个条件。&lt;/li&gt;&lt;/ol&gt;&lt;h3&gt;数据规模和约定&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;1≤n≤100&lt;/li&gt;&lt;li&gt;1≤m≤10&lt;/li&gt;&lt;li&gt;结构化文档和待查询的选择器每行长度不超过 80个字符(不包括换行符)。保证输入的结构化文档和待查询的选择器都是合法的。&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;img src="https://kaoji100.com/images/578/3-1.png" alt="" data-href="" style=""/&gt;&lt;/p&gt;&lt;h3&gt;提示&lt;/h3&gt;&lt;p&gt;多级的后代选择器在匹配时,可以采用贪心的策略:除最后一级外,前面的部分都可以尽量匹配层级小的元素。&lt;/p&gt; 用C++解决
最新发布
07-31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值