什么是EMC存储 Clarrion存储的cache dirty或者cache lost(CACD)?

news2024/12/28 21:07:08

CACD是Cant assign, Cache Dirty的缩写,DELL EMC的专业术语。

在开始之前,先介绍下cache dirty的概念,朴素的语言就是有了脏数据,脏数据当然就是不能使用的数据了。为什么数据会脏呢?先从存储的基本概念聊起来。

为了加快主机的IO响应速度,所有的企业级存储都有read cache和write cache的概念,write cache就是内存中分出一部分空间,所有的写操作,其实都是写到了写cache中,而不是直接写到了后端的磁盘中,当然如果write cache被disable了,数据就直接落盘了,但这样性能会很差。cache中的数据按照一定的算法定期批量写入磁盘中。这就是说,如果存储系统在正常工作中,就总是有从主机写入的说数据保存在cache内存中。如果一旦这部分数据出问题了,也就是说从主机端来看他已经把数据写入到了存储,但是实际真正存储物理数据的磁盘并没有写入这些数据,而这些数据是在cache中由于各种原因被破坏了。这就导致物理磁盘上的数据一致性出现问题。这些cache中的数据也就称之为dirty脏数据了,由于这些数据写入到后端的存储磁盘中,数据完整性不对,存储也不容许这些数据写入。

如果出现了dirty cache,会有什么后果呢? 最直接的后果就是客户的业务数据一致性没有了,数据不完整了,如果继续要使用这些数据,就必须做完整性检查,也就是我们常说的fsck了。其实,从存储的定义来看,就是已经丢数据了,发生了data lost,只不过是丢失的数据量的多少而已。

我们回到本文的主题,EMC的Clariion存储系统,就是CX,VNX和Unity这个系列的存储,如果发生了dirty cache事件,存储的表现是什么?下面的讨论重点用VNX来举例,CX和Unity的类似,但是处理方法是不同的。根据dirty的数据在存储中的分布,如果客户存储上有几个不同的pool,则发生dirty的pool中的LUN和POOL都会offline,当然业务也就挂了。如下图所示:

有些LUN是offline,而有些lun是ready的,就是这个原因。

与这些LUN对应的POOL也是offline的状态。如果出现cache dirty,业务肯定是挂了,就是所谓的DU了,data unavailable了。

下面是重点了,敲黑板了。为什么会导致cache dirty,怎么避免这种情况的发生?最常见的是下面几种情况:

  • 客户关机误操作。

经常遇到cache dirty的case是在过节后的上班第一天,为什么这样了,有些客户由于要过节,把存储关了,然后等上班以后,第一件事情就是开机,开机后说业务连不上了。这种情况,不看日志,猜测极大的概率就是cache dirty了。还有就是机房搬迁,搬迁前都是OK的,但是搬迁到新机房,开机就不行了。这种情况十有八九也是cache dirty了。

为什么关机操作容易造成cache dirty呢?我们来看看VNX的电源连线方法,下图是VNX5300的电源连线图。

PDU的直接连接到了SPS就是电池,然后从电池的OUT出来到了控制器的电源输入。

由于早期的VNX图形界面上没有一个关机按钮,关机就只能直接拔电了。然后悲催的是现场搬迁的技术人员属于无知无畏的工程师。既然叫直接拔电,那就拔了,直接把上图中的ABCD四条线同时拔掉,这就悲催了。内存中的数据由于没有了sps的支撑,数据直接丢失。正确的关机拔电顺序应该是先拔掉A和C,这时候SPS还继续给两个控制器提供电源保护,系统启动vault,内存中的数据写入后端存储或者vault区。

  • SPS或者BBU电池故障,没有引起重视。

还有一类就是对于SPS的工作原理不知,总是认为这个固件故障了没有关系,不影响系统正常运行,所以即使有一个SPS电池坏了,不更换,反正还有一个SPS是正常的,而且也没有导致业务出现问题。

有些情况下,如果一个SPS出现明显故障,另外一个SPS也有告警,但还没有故障,即使按照正常的顺序开关机,也会导致cache lost,丢失数据。

  • 处理SP故障时的误操作

这种情况也是很常见,本来客户坏了一个控制器,然后服务商就去给客户维修。更换的过程中,遇到 一些麻烦,新更换的控制器无法正常启动。这种情况应该是检查为什么不能正常启动,但很多工程师没有这个能力去检查,就采用了3R大法(Reseat插拔,Reboot重启和Reinstall重装),对整个机器做重启,由于VNX控制器的重启一般需要10-15分钟,甚至更长时间。现场工程师看到挺长时间还没有起来,认为有问题,就再重启依次,其实是在重启过程中,这样来回折腾几次,基本上cache dirty的概率就很高了。到最后,整个系统都挂了。看日志,cache lost都是发生在几次重启之间。

还有一种情况就是更换控制器中某个部件,常见的是内存条和IO module,base module等,这些FRU部件是需要将控制器shutdown下来再更换的,我们比较简单的工程师,就直接把控制器从正常加电运行的状态下拽了下来,然后更换故障备件,然后再插入重启。以前遇到过类似的,给他指出问题,还振振有词的说,我每次都这样操作也没有出过事情。好吧,你NB。正常的工作流程应该是先暂时关闭write cache,然后再使用naviseccli命令来shutdown这个SP,最后完成更换。如果命令不会用,最起码的要disable了write cache再做操作。

怎么判断存储是遇到了cache dirty 而不是其他故障导致的pool和LUN的offline?对于Unity和VNXe就是两个控制器都到了service mode。

最简单的就是查看sp的event log,看到有类似de "Can't Assign - Cache dirty "就是100%的有cache dirty了。在spcollect日志中是下面的样子:

A       06/27/23 15:41:37 Bus1 Enc2 Dsk9        90a Can't Assign - Cache Dirty [ALU 4007]    0    770052   fa70045

A       06/27/23 15:41:38 Bus1 Enc2 Dsk9        90a Can't Assign - Cache Dirty [ALU 4007]    0    770052   fa70045

A       06/27/23 15:41:38 Bus1 Enc2 Dsk9        90a Can't Assign - Cache Dirty [ALU 4007]    0    770052   fa70045

A       06/27/23 15:41:38 Bus1 Enc2 Dsk9        90a Can't Assign - Cache Dirty [ALU 4007]    0    770052   fa70045

A       06/27/23 15:41:38 Bus1 Enc2 Dsk9        90a Can't Assign - Cache Dirty [ALU 4007]    0    770052   fa70045

A       06/27/23 15:41:38 Bus1 Enc2 Dsk9        90a Can't Assign - Cache Dirty [ALU 4007]    0    770052   fa70045

A       06/27/23 15:41:39 Bus1 Enc2 Dsk9        90a Can't Assign - Cache Dirty [ALU 4007]    0    770052   fa70045

A       06/27/23 15:41:39 Bus1 Enc2 Dsk9        90a Can't Assign - Cache Dirty [ALU 4007]    0    770052   fa70045

A       06/27/23 15:41:39 Bus1 Enc2 Dsk9        90a Can't Assign - Cache Dirty [ALU 4007]    0    770052   fa70045

A       06/27/23 15:41:39 Bus1 Enc2 Dsk9        90a Can't Assign - Cache Dirty [ALU 4007]    0    770052   fa70045

[ 9896 lines deleted ]

B       06/27/23 22:30:38 Bus1 Enc2 Dsk5        90a Can't Assign - Cache Dirty [ALU 3905]    0    6f00b9   f410041

B       06/27/23 22:30:38 Bus1 Enc3 Dsk3        90a Can't Assign - Cache Dirty [ALU 3924]    0    7000a6   f54004e

B       06/27/23 22:30:43 Bus1 Enc2 Dsk5        90a Can't Assign - Cache Dirty [ALU 3905]    0    6f00b9   f410041

B       06/27/23 22:30:43 Bus1 Enc3 Dsk3        90a Can't Assign - Cache Dirty [ALU 3924]    0    7000a6   f54004e

最后一个问题就是怎么处理?这个问题比较难回答,具体可以add wechat at StorageExpert来讨论。EMC的Clarrion系统分了很多不同的产品,版本号也很多,从最早的CX的R29,30到VNX1代的R31,R32,然后到VNX2代的R33,以及VNXe和Unity。OS版本不同,客户cache lost的场景不同,处理方法也是不同的。我们给一些客户擦过屁股就是有些工程师知道了一种clear cache的方法,认为所有的情况都是这样处理,最严重的是把fast cache给彻底清除了。这样啥数据也捞不回来了,总会只能宣布无法恢复数据,客户数据全部丢失。

最后再敲依次黑板,遇到涉及和数据有关的严重问题,如果没有明确的日志支撑下的方案,千万不要各种没有任何根据的尝试,这样只能让事情与来越糟糕,柳暗花明的情况是少之又少。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/709515.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PoseiSwap 将向 Zepoch 节点持有者发放新一轮空投,生态启动在即

目前,随着各类 Layer2 空投不断内卷,越来越多的用户疲于参与其中(参与交互也很有可能难以获得空投资格)。Nautilus Chain 作为目前模块化 Layer3 架构链,在初期就明确了空投计划,即所有上线的应用都将会拿出…

各类农作物分布遥感监测数据大全

最近收集整理了大量的农作物分布的遥感监测数据,废话不多说,分享给大家,后面会持续更新!! 数据查看地址: https://www.dilitanxianjia.com/%e9%81%a5%e6%84%9f%e8%a7%a3%e8%af%91%e5%90%8e%e6%88%90%e6%9…

LeetCode 0002. 两数相加

【LetMeFly】2.两数相加 力扣题目链接:https://leetcode.cn/problems/add-two-numbers/ 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff…

2016年全国硕士研究生入学统一考试管理类专业学位联考逻辑试题——纯享题目版

🏠个人主页:fo安方的博客✨ 💂个人简历:大家好,我是fo安方,考取过HCIE Cloud Computing、CCIE Security、CISP、RHCE、CCNP RS、PEST 3等证书。🐳 💕兴趣爱好:b站天天刷&…

华为OD机试真题 Java 实现【开心消消乐】【2023 B卷 100分】

目录 一、题目描述二、输入描述三、输出描述四、Java算法源码五、效果展示1、输入2、输出3、说明 一、题目描述 给定一个N行M列的二维矩阵,矩阵中每个位置的数字取值为0或1。矩阵示例如: 1 1 0 0 0 0 0 1 0 0 1 1 1 1 1 1 现需要将矩阵中所有的1进行反…

maven高级开发

分模块设计 例如 如果需要用到其他的模块,直接导入模块坐标就可以了 分模块开发,需建立的模块,选择maven模型 分模块设计需要先针对模块功能进行设计,再进行编码。 继承与聚合 继承:描述的是两个工程间的关系&…

UE4/5通过插件,用GeneratedDynamicMeshActor编辑静态网格到content中

目录 制作 直接复制下面代码到蓝图中粘贴即可: 效果1【用了第一个函数】: 效果2【用了第二个函数】: 制作 首先我们要打开插件: 然后继承GeneratedDynamicMeshActor进行创建: 我们制作一个函数,这个函数将…

Draw.io | 一款强大且支持在线编辑和导出的流程图绘制神器

目录 💌 写在前面 🖥️ 软件介绍 🖥️ 使用方式 1. Draw.io 的核心设计元素 1.1 绘图区 1.2 快速开始 2. Draw.io 的基本操作 2.1 移动、多选、复制与删除 2.2 创建链接 2.3 图形替换与旋转 3. 使用 Draw.io 绘制简单流程图 3.1 基本…

ChatGPT Plugins内幕、源码及案例实战(三)

ChatGPT Plugins内幕、源码及案例实战(三) ChatGPT Plugins内幕、源码及案例实战 6.4 ChatGPT Retrieval Plugin全流程内幕解析 以ChatGPT检索插件为例,我们讲解一下它整个的流程,让大家有一个比较明确、清晰的统一认知:  数据存储:设立的前提是你有文档,会有一些文…

大学教材征订管理系统数据库设计

摘 要 随着计算机及Internet迅速的发展,越来越多的行业实现了管理的信息化和自动化,教育行业也不例外。但在很多高校中,教材征订作为学校教学工作中很重要的一个环节还没完全实现信息化管理。因此本系统针对高校教材征订管理过程中人工管理存在的困难&a…

(02)Cartographer源码无死角解析-(67) 2D后端优化→FastCorrelativeScanMatcher2D -分支定界算法(BranchAndBound)1

讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解(02)Cartographer源码无死角解析-链接如下: (02)Cartographer源码无死角解析- (00)目录_最新无死角讲解:https://blog.csdn.net/weixin_43013761/article/details/127350885 文…

Java——包(package)

一、Java中的包(package) 在Java中,包(package)是一种用于组织类和接口的命名空间的机制。它用于将相关的类和接口组织在一起,以便更好地管理和维护代码。 其实就是一个个文件夹 二、包(package)的作用 防止类和接口命名冲突&…

时间序列分解 | Matlab变分模态分解(VMD)的信号分解

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 时间序列分解 | Matlab变分模态分解(VMD)的信号分解 部分源码 %--------------------

尚硅谷Docker2022版学习笔记(基础篇 下)

目录 五、本地镜像发布到阿里云 5.1、本地镜像发布到阿里云流程 5.2、镜像的生成方法 基于当前容器创建一个新的镜像(第一种方法) DockerFile(第二种方法) 5.3、将本地镜像推送到阿里云 本地镜像素材原型 创建仓库镜像 选…

hive row_number()对单列进行去重

学到一个高级用法 row_number() select * ,row_number() over (partition by c_id order by s_score) from score; https://www.jb51.net/article/254952.htm

【Kafka】第一章

【Kafka】第一章 1.课程内容 1.课程内容 >课程学习

Python———PyCharm下载和安装

(一)开发环境介绍 开发环境,英文是 IDE ( Integrated Development Environment 集成开发环境)。 不要纠结于使用哪个开发环境。开发环境本质上就是对Python 解释器python.exe 的封装,核心都一样。可以说&…

web前端求职面试题参考精选(合集)

web前端求职面试题之选择题 1. CSS样式表根据所在网页的位置,可分为?(B ) A.行内样式表、内嵌样式表、混合样式表 B.行内样式表、内嵌样式表、外部样式表 C.外部样式表、内嵌样式表、导入样式表 D.外部样式表、混合样式表、导入样式表 2. 对于标签&#xff0…

IDEA使用技巧之——自动导入包,自动优化未使用的import

1 进入设置 2 进入编辑器 3 选择自动导入,中的方框内容 4 最后点击应用,点击确定即可了。 END