起因:一个客户的实际故障,该故障非常典型,其他客户类似的环境也非常多,所以很值得梳理并记录下来。

环境:Oracle 11.2.0.4 RAC(2 nodes)+ RHEL 6.6

共享存储:EMC powerpath 做的多路径绑定

分别登陆到两个节点,查看设备名称:

[oracle@node1 ~]$ ls -l /dev/emcpower*
crw-r--r-- 1 root root 10, 56 Feb 2 09:52 /dev/emcpower
brw-rw---- 1 grid asmadmin 120, 0 Feb 2 16:56 /dev/emcpowera
brw-rw---- 1 grid asmadmin 120, 16 Feb 2 16:56 /dev/emcpowerb
brw-rw---- 1 grid asmadmin 120, 32 Feb 2 16:56 /dev/emcpowerc
brw-rw---- 1 grid asmadmin 120, 48 Feb 2 16:56 /dev/emcpowerd
brw-rw---- 1 grid asmadmin 120, 64 Feb 2 16:56 /dev/emcpowere
brw-rw---- 1 grid asmadmin 120, 80 Feb 2 16:56 /dev/emcpowerf
brw-rw---- 1 grid asmadmin 120, 96 Feb 2 16:56 /dev/emcpowerg
brw-rw---- 1 grid asmadmin 120, 112 Feb 2 16:56 /dev/emcpowerh
brw-rw---- 1 grid asmadmin 120, 128 Feb 2 09:52 /dev/emcpoweri [oracle@node2 ~]$ ls -l /dev/emcpower*
crw-rw---- 1 root root 10, 56 Jan 31 16:16 /dev/emcpower
brw-rw---- 1 grid asmadmin 120, 0 Feb 2 17:06 /dev/emcpowera
brw-rw---- 1 grid asmadmin 120, 16 Feb 2 17:07 /dev/emcpowerb
brw-rw---- 1 grid asmadmin 120, 32 Feb 2 17:07 /dev/emcpowerc
brw-rw---- 1 grid asmadmin 120, 48 Feb 2 17:06 /dev/emcpowerd
brw-rw---- 1 grid asmadmin 120, 64 Feb 2 17:06 /dev/emcpowere
brw-rw---- 1 grid asmadmin 120, 80 Feb 2 17:06 /dev/emcpowerf
brw-rw---- 1 grid asmadmin 120, 96 Feb 2 17:06 /dev/emcpowerg
brw-rw---- 1 grid asmadmin 120, 112 Feb 2 12:19 /dev/emcpowerh
brw-rw---- 1 grid asmadmin 120, 128 Feb 2 17:06 /dev/emcpoweri

我们知道,这些都是powerpath多路径聚合之后的名字。

常见误区总结

对于一个这样的生产环境,存在以下几个普遍的误区:

常见误区一:

很多初学者对此存有误解,直接参照网上普及的RAC安装教学类视频,甚至还将这样的盘udev绑定成/dev/asm-disk* 这样的盘。
这样的做法完全是画蛇添足,实际上我们只需要确认这些多路径聚合之后盘的权限是正确的即可。

常见误区二:

在Linux系统中,关于盘的权限设定,很多人不清楚实施的规范究竟是怎样,比如看到有人习惯在/etc/rc.local中设定权限,有人习惯udev绑定权限,之后还有人说哪种方法都可以,给初学者造成了很大的困扰。而实际上具体选择如何赋予权限还和Linux操作系统的具体版本有关系。

这在Linux早期版本(RHEL6.2或更早),甚至只需要在 /etc/rc.local下写入一行chown的权限修改即可,可参考早期的文章:

而在之后的RHEL版本中,这样不再可行,如果还在/etc/rc.local添加设定权限,udev还是会定时刷新权限为之前默认的。所以正确的做法是使用udev绑定权限。具体方法可参考早期文章:

常见误区三:

这也是本文要描述的真实故障:背景信息详见文章开头部分,客户需求是从ASM磁盘组中剔除一块盘/dev/emcpoweri用作它用,剔除完毕后,客户第二天在格式化磁盘/dev/emcpoweri时,误以为两边节点的/dev/emcpoeri 对应的底层设备肯定是一样的,就直接到另一个节点去格式化/dev/emcpoweri,结果实际发现二者并不一样(通过kfed read查看磁盘头也可以验证),更糟的是被损坏的DATA磁盘组还是选择的外部冗余模式,相当于硬生生的格式化了一块ASM的数据盘用作它用,且没有任何冗余备份,从而酿成悲剧。

这个案例反映出来的误区就是:在两个节点查看多路径聚合后的共享磁盘的设备名称,得到的结果完全一致,很多初学者就想当然认为两边的名称对应的底层设备也一致。

而实际上RAC节点两边存储名字对应的真实磁盘很可能是不一致的,部分环境有要求一致的需求,那是需要要求存储工程师做相应的操作才可以。

说到各个节点对盘符识别的一致性,还需要延伸一下ASM的基础知识:对于Oracle提供的ASM,其实并不需要硬性要求两边共享磁盘设备的名字完全对应。因为作为ASM磁盘后,盘头是有记录信息的,Oracle通过盘头的信息判断是否是同一块盘。这点也可以在两个节点分别使用kfed read /dev/emcpoweri aun=0 blkn=0|more来查看盘头的信息验证。

PS:早期版本(Oracle 10g RAC)之所以要求ocr和voting disk对应的磁盘名称在两边一致是因为那个时候OCR和voting disk还不能放在ASM中。对于高标准的施工,出于为了方便后期的磁盘管理工作考虑,还是建议让各个节点对盘符识别保持一致性的,比如一般Linux使用自己的multipath软件,可以根据将每个盘唯一的scsi_id取alias绑定,这样就实现了各节点的盘符识别一致性。

RAC节点两边存储名字不一致导致的故障及相关延伸的更多相关文章

  1. 『NiFi 节点本地流与集群流不一致导致集群加入失败』问题解决

    一.概述 在某些极端情况下,某些 NiFi 节点信息会由于用户强行 disconnect from cluster ,而出现 local flow 与 cluster 的 flow 不同步的问题. 此 ...

  2. distcp导致个别datanode节点数据存储严重不均衡分析

    hadoop2.4生产集群已经执行一段时间了.因为大量的hadoop1.0上面的应用不断迁移过来.刚開始事hdfs这边还没有出现多少问题.随着时间的推移,近期发现个别的datanode节点上面的磁盘空 ...

  3. rac库grid目录权限(6751)导致数据库宕机案例 此方法仅用于紧急救助

    问题: 我的rac环境不小心通过chown命令改变了/u01目录及其子目录的权限,导致rac节点2数据库宕掉,sqlplus下打开数据库报错如下: [oracle@node2 ~]$ sqlplus ...

  4. oracle 11g rac for linux add node (oracle 11g rac 节点添加)

    说明: Adding Oracle RAC to Nodes with Oracle Clusterware Installed步骤来自ORACLE 官方文档: https://docs.oracle ...

  5. Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题

    Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题 表更描述: 将mysql数据库中的worktask表添加ishaspic字段. 具体操作:(1)数据库worktask表新添是否有图片字 ...

  6. Greenplum hostname和address不一致导致配置文件无法加载

    最近又遇到了几个坑,逐一记录分析下. 1.主机名hostname和address不一致 在又一次部署压测环境交由测试组进行压测时,同事修改了pg_hba.conf文件重新加载配置文件时报错.(找不到l ...

  7. Treat wchar_t as built-in type不一致导致的链接错误

    今天用VS2013新建了一个工程,生成时出现很多怪异的链接错误,比如: error LNK2019: unresolved external symbol "__declspec(dllim ...

  8. thrift 版本不一致导致 @Override 报错

    thrift 版本不一致导致 @Override 报错 学习了:http://blog.csdn.net/antony1776/article/details/78920888 版本不一致导致的: 在 ...

  9. MySQL字符集不一致导致性能下降25%,你敢信?

    故事是这样的: 我在对MySQL进行性能测试时,发现CPU使用率接近100%,其中80%us, 16%sys,3%wa,iostat发现磁盘iops2000以下,avgqu-sz不超过3,%util最 ...

随机推荐

  1. SpringMVC运行原理

    一.SpringMVC运行原理图 ​ 二.相关接口解释 DispatcherServlet接口: Spring提供的前端控制器,所有的请求都有经过它来统一分发.在DispatcherServlet将请 ...

  2. python-虎扑爬虫

    Python作为一个高级编程语言,不知从何时起就在圈子里流行起来了.个人也是图个鲜,跟上时代步伐学习了一下."鲁迅"说过:不能学以致用,就是耍流氓.我用python对虎扑论坛作了一 ...

  3. python环境搭建--pycharm的安装及使用

    学习网址: --菜鸟教程(2.0和3.0) http://www.runoob.com/python/python-tutorial.html http://www.runoob.com/python ...

  4. java基础复习1

    jre:Java运行环境 jdk:Java开发工具(包含jre) java两大机制:JVM (java虚拟机) 垃圾回收 变量的分类: 1.按数据类型分: 1)基本数据类型:8种 整型:byte sh ...

  5. flask + Python3 实现的的API自动化测试平台---- IAPTest接口测试平台(总结感悟篇)

    前言: 在前进中去发现自己的不足,在学习中去丰富自己的能力,在放弃时想想自己最初的目的,在困难面前想想怎么踏过去.在不断成长中去磨炼自己. 正文: 时间轴 flask + Python3 实现的的AP ...

  6. bootstrap-table 表格加载中....处理

    $('#table').bootstrapTable({data:[]}); $('#table').bootstrapTable("showLoading"); ajax数据加载 ...

  7. Servlet--ServletException类,UnavailableException类

    ServletException类 定义 public class ServletException extends Exception 当 Servlet 遇到问题时抛出的一个异常. 构造函数 pu ...

  8. Java集合分析

    Java集合分析 前言 从开始接触Java的时候, 就在强调的一个重要版块, 集合. 终于能够开始对它的源码进行分析, 理解, 如果不懂得背后的思想, 那么读懂代码, 也仅仅是读懂了 if else ...

  9. c#基础(一)

    一. C#与.Net的关系 C#是一种相当新的编程语言.C#的重要性体现在以下两个方法: 1).它是专门为Microsoft的.net FrameWork一起使用而设计的 (.net FrameWor ...

  10. Sonar 数据库表关系整理一(续)

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 简介:Sonar平台是目前较为流行的静态代码扫描平台,为了便于使用以及自己二次开发,有必要对它的数据库结构进行学习 ...