GaussDB(DWS)-硬件-慢盘定位实践

举报
寒衣 发表于 2024/03/10 18:16:51 2024/03/10
【摘要】 慢盘,简单理解就硬盘IO访问速率慢,导致硬盘慢盘例如硬盘坏道、磁头异常等硬件问题原因,因此慢盘检测可一定程度反映硬盘的健康状态;若硬盘出现慢盘亚健康状态,会导致业务性能下降,阻塞业务的处理能力,严重时可能会导致服务不可用。因此本文介绍了部分定位手段,便于慢盘故障的定位。

一、什么是慢盘

分布式系统在长期运行过程中,由于体质或频繁读写的原因,部分硬盘会出现延时变大、读写变慢的情况。当某个磁盘出现性能故障或IO负载过高等情况导致延迟变大时,用户几乎所有业务都会受到严重影响。“慢盘现象”会导致整个集群性能下降,严重时甚至会导致数据丢失、服务不可用等问题。

慢盘现象与古老的木桶效应如出一辙:木桶效应指的是木桶最多能盛的水,不是由最高的那块木板所决定,而是由最短的那块木板所决定。与此类似,分布式存储的性能不是由最快的磁盘决定,而是由最慢的磁盘所决定。

二、慢盘的现象

对于DWS来说,慢盘最突出的表现为业务执行慢,等待视图存在大量等IO的的等待状态

相关SQL:

SELECT wait_status,wait_event,count(*) as cnt FROM pgxc_thread_wait_status WHERE wait_status not in('wait cmd', 'synchronize quit', 'wait stream task') GROUP BY 1,2 ORDER BY 3 DESC limit 100;

此时查看磁盘IO情况发现,存在%util飚高至100%,但读写数据量不高乃至几乎没有,await与svctm占用较高的情况,可能存在慢盘。

iostat -xm 2

无现场定位手段:

cd /var/log/sa
sar -f sa{日期} -d -p -s {开始时间} -e {结束时间}

相关参数说明:

  #每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并
  rrqm/s

  #每秒对该设备的写请求被合并次数
 wrqm/s

 # 每秒完成的读次数
  r/s

 # 每秒完成的写次数
  w/s

 #每秒读数据量(MB为单位)
  rMB/s
  
 #每秒写数据量(MB为单位)
  wMB/s
  
 #平均每次IO操作的数据量(扇区数为单位)
  avgrq-sz
  
 #平均等待处理的IO请求队列长度
  avgqu-sz

 #平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)
  await
  
 #平均每次IO请求的处理时间(毫秒为单位)
  svctm
  
 #采用周期内用于IO操作的时间比率,即IO队列非空的时间比率
  %util

PS:rrqm/s这个指标很高,大概率就是业务里面有全表扫描了

三、工具下载及安装

参考链接:下载和安装StorCLI工具

四、慢盘确认

执行storcli64需要root权限

4.1 检查CC与PR

CC是consistency check,一致性校验。一致性校验是磁盘阵列控制器的一种高级维护功能。它可以预先检查阵列上的数据,以保证它们的一致性,即数据是正确的、没有被破坏。对于有奇偶校验值的阵列(RAID-5),一致性校验通过数据的奇偶校验,并且和存校验值的盘上的校验值进行比较,确定并纠正数据的一致性。对于镜像盘,一致性校验比较RAID-1上2块硬盘的数据是否完全一致。不一致的需要进行同步处理。对于剩余空间的磁盘介质consistency check一样会进行读校验。

PR(Patrol Read/巡读)RAID卡通过定期的校验指令对硬盘检测以保护数据的手段,具体工作机理是,在RAID卡空闲并且无其他background tasks的时候开始(避免影响raid卡正常工作),并且随时可以被上层或者raid卡中断,raid卡发生PR的时候,会下发verify指令给硬盘,由硬盘执行verify指令,如果遇到bad blockraid卡会根据raid算法进行复。(就是根据raid组的校验算法,单盘RAID0无冗余,无法进行raid层面的修复)。

可通过以下命令确认是否处于以上两种状态

storcli64 show #获取ctl_id

storcli64 /c{ctl_id} show cc #检查CC
storcli64 /c{ctl_id} show pr #检查PR

说明CC与PR已经打开,如果Current State不为Stopped,说明CC或PR正在执行中,影响IO,确认为CC或PR影响导致产生类似慢盘的现象,阻塞业务。

可通过如下命令关闭:

storcli64 /c{ctl_id} set cc = off
storcli64 /c{ctl_id} set pr = off

再次检查,确认Mode都为Disabled确认关闭。

4.2 硬盘级故障标准

检查当前VID

storcli64 /c{ctl_id} show all

根据VID查看各raid组下每个硬盘的DID和raid组所属的盘符

storcli64 /c{ctl_id}/v{VID} show all | grep 'OS Drive Name'
storcli64 /c{ctl_id}/v{VID} show all

查看raid组所需盘符

查看每个物理盘对应的DID

获取smart信息

#SAS盘:
smartctl -a -d megaraid,{DID} /dev/sd* | grep 'Elements in grown defect list'
smartctl -a -d megaraid,{DID} /dev/sd* | grep 'Error counter log' -A 6

#SATA盘:
smartctl -a -d sat+megaraid,{DID} /dev/sd*  | grep 'Elements in grown defect list'
smartctl -a -d sat+megaraid,{DID} /dev/sd*  | grep 'Error counter log' -A 6

Elements in grown defect list:GLIST-成长缺陷列表,随着用户使用硬盘,硬盘检测到某些区域可能存在缺陷(坏扇区),自动重新映射到出厂时预留的空间,记录到GLIST中,由于G列表带来的是重映射,而非跳过,也就意味着硬盘首先寻找到坏的区域然后再映射到安全区域,这样就会造成硬盘存取速度的减慢。

UnCorrected Error(read+write+verify)项 :UNC(UnCorrected Error),无法修复的错误扇区数,指硬盘内部出现了无法被纠错的扇区数,当UNC过多时,硬盘可能发生局部失效。

一般认为Glist+UNC > 300,该硬盘可识别为慢盘,检查DID对应Slt,即为硬盘槽位,需及时更换对应槽位硬盘。

4.3 RAID卡标准

查看raid卡下每个物理盘对应的EID、SID

storcli64 /c{ctl_id} show all

对应物理盘的error信息

storcli64 /c{ctl_id}/e{EID}/s{SID} show all | grep 'Error Count'

Media Error 介质错误:表示raid卡记录到硬盘侧的error数量
Other Error
其它错误:表示raid卡记录到的其它error数量
这两项参数可以反映硬盘的健康状态

RAID卡信息满足:盘Media Error+Other Error>200时,可判断为慢盘,需要换掉SID槽位的硬盘。

五、参考文档

华为服务器 RAID控制卡 用户指南

Linux 性能监控 Sar (Sysstat) 示例

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。