实践真知:一则因内存导致的集群故障

故障概述

某天晚上,我方收到行方请求协助分析某数据库两节点RAC数据库问题,问题描述如下:

该 数据库版本为11.2.0.3,该版本中ASM内存管理机制有所变化,导致ASM实例对共享内存的需求加大,由于该数据库ASM实例共享内存设置过小,导致ASM实例间歇性出现ORA-4031共享池无法分配连续内存空间。为解决该问题,行方决定调整ASM实例内存参数,而在首先修改节点2 ASM内存参数并重启节点2 grid集群过程中,发现节点1 grid集群状态异常,并且在重启节点2集群后,查看节点1 grid集群状态依然报错如下,但此时查看两节点数据库均可以正常访问,应用程序无异常。

另外,当节点2集群正常重启完成后,在节点1 grid集群状态由于ORA-4031错误,依然异常的情况下,出现节点2 vip 地址40.53.2.9同时出现在两个节点的现象如下,此时应用程序仍然无异常表现。

我方在接到服务请求后,通过全面收集相关日志信息进行分析诊断,给出如下诊断结果:

针对问题1诊断结果为:在修改节点2 ASM实例内存参数并重启节点2集群过程中,节点1 ASM实例遭遇严重的ORA-4031错误,导致节点1集群crsd进程异常终止,从而无法正常访问RAC集群配置文件voting及ocr所在的ASM磁盘组(datadg)。而在此过程中集群的crsd进程,曾多次尝试重启均由于ORA-4031问题而失败。经过分析判断后,在保证节点2存活的情况下,最终通过继续完成节点1ASM实例内存参数调整并重启节点1集群后恢复正常。

针对问题2诊断结果为:在节点2调整ASM实例内存参数并重启grid集群过程中,节点2 vip 40.53.2.9发生failover,该vip漂移至节点1,节点1正常接管节点2 vip 40.53.2.9后,由于节点1此时正遭遇严重的ORA-4031问题,导致接管后立刻再次进入failover状态,而此时节点2正处于重启过程中无法接管,导致节点2 VIP 40.53.2.9在节点1脱离集群管理,脱离集群管理后的资源不受cluster所管理,导致40.53.2.9一直出现在节点1上。而linux与windows不同,地址重复后并不会产生冲突,而是同时存在,此时应用客户端随机选取arp地址映射,学习到节点1的mac地址映射,就会使用节点1上的VIP,学习到节点2的mac地址映射,就会使用节点2上的VIP,而客户端配置了节点间的failover,所以此时就是连接了错误节点,仍然不影响应用程序正常运行。

故障分析

从节点2 alert_+ASM2.log日志中看到,12月7日 18:01:50在节点2修改ASM实例内存参数,并于18:04:33重启节点2 ASM实例。

节点2 alert_+ASM2.log日志摘录如下:

在节点2重启ASM实例过程中,节点1 alert_+ASM1.log日志中可以看到出现大量ORA-4031内存无法分配的错误:

节点1 alert_+ASM1.log日志摘录如下:

在文档概述部分我们看到:在节点2重启集群的过程中,节点1使用crsctl check crs查看集群状态,cssd进程及evmd进程处于正常的online状态,只有crs进程状态异常。

因此进一步观察节点1 crsd进程日志,可以看到在节点2重启集群的过程中,节点1由于ORA-4031错误导致导致ASM实例与存储OCR文件的ASM DATADG交互产生问题。

节点1 crsd.log日志信息摘录如下:

---此处省略大量由于ORA-4031错误导致读取OCRRAW出错的DUMP信息部分

---最终于18:04:48 CRSD异常终止

---crsd进程异常终止后尝试进行自动重启

---此处省略部分输出

---crsd尝试重启,由于无法正常打开集群重要的ocr和voting配置文件所在的磁盘组,最终crsd进程无法正常启动,此后不论是集群自动重试还是人工手动重启多次都以失败告终

以上从节点1 crsd日志看到crsd进程由于ASM实例的ORA-4031错误导致ASM实例与磁盘组之间的交互产生问题,那么我们进一步分析问题时段节点1grid集群alert_csrrac01.log同样可以看到ORA-4031错误导致crsd进程异常的现象。

节点1 grid 集群 alert_csrrac01.log日志摘录如下:

---此处记录了节点2修改ASM实例参数后,节点2人工重启grid集群

---crsd进程于18:04:48首次failed,这与节点1 crsd.log记录的首次失败时间吻合

---crsd异常终止的原因同样是由于无法正常访问OCR所在的物理存储

---此处省略部分类似输出

--节点1 crsd进程失败后,曾多次尝试重启,并最终达到尝试重启crsd进程次数

---节点1 crsd无法重启的原因依然是由于ORA-4031错误无法正常读取OCR所在物理存储,即: ASM datadg导致

最后,针对问题2,我们知道11g 集群在资源管理方面发生了很大改变,不同的资源通过不同的agent代理进行管理,而vip资源是通过orarootagent代理进行管理,进一步我们通过节点1的orarootagent_root.log可以发现如下信息:

节点1 grid 集群orarootagent_root.log日志摘录如下:

---由于节点2重启grid集群,导致节点1收到添加节点2 vip资源的信息

---此处省略部分输出

---尝试在节点1 igb0网络接口挂在节点2 vip 40.53.2.9

---节点2成功接管节点1vip 40.53.2.9

---由于此时节点1正遭遇严重的ORA-4031问题(见以上分析),导致成功接管节点2 vip后,状态立即变化为非正常的PARTIAL状态

---节点2 vip资源再次进入failover状态,而此时由于节点2在进行集群重启操作,尝试failover无法成功,而又无法被节点1正常接管,导致节点2 vip在节点1上脱离集群管理,由于最初节点1成功接管过节点2 vip,即在igb0接口成功挂在40.53.2.9地址,此时又无法进行failover,导致脱离集群管理后的的40.53.2.9地址继续挂在在igb0接口之上。

故障总结

由于本次ASM内存参数调整,首先更改并重启节点2集群,在此过程中节点1 ASM实例遭遇严重的ORA-4031错误,导致CRSD进程异常,从而引发节点1集群状态异常。

问题发生时,节点2 ASM实例内存参数已修改完成并重启成功,因此,在实例2保持存活的情况下,立即将节点1 的ASM内存参数修改并重启后,集群状态恢复正常。

附录:11.2.0.3/4 ASM 内存管理变化

ASM实例需要的共享内存与processes及diskgroup多少直接相关,而在Oracle 11.2.0.3和11.2.0.4版本中缺省的processes算法发生变化如下:

因此ASM实例需要更大的内存空间提供支持,以避免出现ORA-4031问题。

在Oracle 11.2.0.3/11.2.0.4中如果ASM实例使用的内存小于1536M,将可能导致ASM内存实例遭遇ORA-4031问题,Oracle官方推荐的ASM实例内存参数配置如下:

---the end

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2016-10-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Albert陈凯

VMWare安装Linux操作系统CentOS

上篇文章我们介绍了如何在Windows操作系统中安装VMWare软件,并创建一个虚拟机,链接地址:http://www.jianshu.com/p/6b589e...

2594
来自专栏Java架构沉思录

Zookeeper总览

ZooKeeper是一款开源的 分布式应用 的 分布式协调服务 。它包含一个简单的 原语集 ,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。Zoo...

1511
来自专栏大数据和云计算技术

MySQL NDB Cluster实战

前言 本文来自睿哲科技的张树杰同学分享MySQL NDB集群的基础知识和搭建,非常赞! 希望越来越多的同学一起来分享,帮助他人,...

4467
来自专栏Golang语言社区

gops —— Go 程序诊断分析工具

为了能更好的分析程序,需要在我们的项目中加一行 agent 诊断分析代码,用于统计分析程序问题。

1443
来自专栏快乐八哥

搭建AngualarJS开发环境

1.选择Web浏览器 Chrome和Firefox浏览器 2.选择代码编辑器 Subline Text和Visual Studio Code 3.安装Web...

1876
来自专栏Java工程师日常干货

【SpringBoot专题】监控健康状况前言监控插件:actuatorSpring Boot Admin:可视化后台管理系统总结

想一想,我们以前是如何监控一个Java应用的监控状况的?一般而言,我们会在Linux服务器上通过一些命令,比如通过jstat来统计堆内存的使用情况/垃圾回收的情...

4112
来自专栏Flutter入门到实战

开发工具总结(3)之Git及GitHub快速入门图文全面详解

版权声明:本文为博主原创文章,未经博主允许不得转载。https://www.jianshu.com/p/3f12bd3ccf2a

1003
来自专栏木子墨的前端日常

Nginx实践--安全升级

之前写了一些nginx的东西,这次继续,主要使用upstream针对proxy_pass转发做个处理 一般情况下我们在使用nginx反向代理的时候,都是如下配...

893
来自专栏帘卷西风的专栏

linux编译curl库的动态库so

转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog) 

581
来自专栏魏艾斯博客www.vpsss.net

lnmp 环境设置 301 重定向

1803

扫码关注云+社区