本帖最后由 木二 于 2022-11-10 11:08 编辑
一 问题背景 1.1 背景描述 当桌面云巡检、一键检测或者客户反馈出现卡慢盘的时候,对于高版本会采用自动隔离硬盘,目前5.4.10R1暂不具备自动隔离卡慢盘,需要进行卡慢原因,通常为坏道引起,以及立刻更换硬盘。
1.2 故障处理思路 通常基于业务稳定考虑,完整的更换硬盘为:
定位卡慢盘信息,如服务器信息、硬盘位置、硬盘盘符; 若为缓存盘,则建议执行回刷操作,可大幅度降低后续数据同步时间,若为数据盘则无需回刷;
二 换盘操作 2.1 原始信息 桌面云巡检、一键检测或者客户反馈后,通过控制台查看相关卡慢服务器及盘位,整理信息如下。 该盘位通常为逻辑盘位,可能存在和物理实际盘序不一致情况。 设备型号:VDS-R-7550 设备信息:172.16.12.185 磁盘类型:SSD 固态 逻辑盘位:4号 坏盘序号:PHYG114102VB960CGN
2.2 定位逻辑盘符 进一步查看卡慢盘更多信息。 - Sangfor:VMP/host-0894eff025c5 /sf # ssh 172.16.12.185
- Sangfor:VMP/host-0894eff86a41 /sf # smartctl -a /dev/sdX #检测某磁盘情况
- Sangfor:VMP/host-0894eff86a41 /sf # smartctl -l error /dev/sdX #检测某磁盘error信息
- Sangfor:VMP/host-0894eff86a41 /sf # cat /sf/log/today/kernel.log | grep error | grep sdX #查看记录的内核错误信息
复制代码提示:以上命令和相互结合使用,确认相关错误信息。
通常可以使用如下命令对该服务器所有磁盘,通过for巡检检查一次。 - Sangfor:VMP/host-0894eff86a41 /sf # for sd in $(ls /dev/sd[a-z]); do echo ---$sd---; smartctl -A $sd | egrep "Current_Pending_Sector|UDMA_CRC_Error_Count|Reallocated_Sector_Ct"; done
- ---/dev/sda---
- 5 Reallocated_Sector_Ct 0x0032 100 100 000 Old_age Always - 0
- 197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 0
- 199 UDMA_CRC_Error_Count 0x003e 100 100 000 Old_age Always - 0
- ---/dev/sdb---
- 5 Reallocated_Sector_Ct 0x0033 100 100 010 Pre-fail Always - 0
- 197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 0
- 199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0
- ---/dev/sdc---
- 5 Reallocated_Sector_Ct 0x0033 100 100 010 Pre-fail Always - 0
- 197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 0
- 199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0
- ---/dev/sdd---
- 5 Reallocated_Sector_Ct 0x0033 100 100 010 Pre-fail Always - 0
- 197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 0
- 199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0
- ---/dev/sde---
- 5 Reallocated_Sector_Ct 0x0033 100 100 010 Pre-fail Always - 0
- 197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 0
- 199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0
- ---/dev/sdf---
- 5 Reallocated_Sector_Ct 0x0033 100 100 010 Pre-fail Always - 0
- 197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 0
- 199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0
- ---/dev/sdg---
- 5 Reallocated_Sector_Ct 0x0033 100 100 010 Pre-fail Always - 0
- 197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 0
- 199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0
- ---/dev/sdh---
- 5 Reallocated_Sector_Ct 0x0032 100 100 000 Old_age Always - 4
- 197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 0
- 199 UDMA_CRC_Error_Count 0x003e 100 100 000 Old_age Always - 0
- ---/dev/sdi---
复制代码提示:如上所示,磁盘 /dev/sdh 存在异常扇区。
进一步确认相关磁盘信息,如磁盘序列号,磁盘大小。 - Sangfor:VMP/host-0894eff86a41 /sf # smartctl -i /dev/sdh | egrep "Device Model|Serial Number|User Capacity"
- Device Model: INTEL SSDSC2KG960G8
- Serial Number: PHYG114102VB960CGN
- User Capacity: 960,197,124,096 bytes [960 GB]
复制代码
信息整理: 设备型号:VDS-R-7550 设备信息:172.16.12.185 磁盘类型:SSD 固态 逻辑盘符:sdh 逻辑盘位:4号 坏盘序号:PHYG114102VB960CGN
2.3 定位物理盘符 实际环境中,可能存在逻辑盘符和物理位置不对应的关系,因此需要结合给相关硬盘点灯的操作,确认物理盘位。
2.3.1 确认raid卡类型 采用raid卡后,需要通过raid卡管理命令查看具体的硬盘详细信息。 后台进入VMP集群,执行相关命令确认raid卡类型。 - Sangfor:VMP/host-0894eff86a41 /sf # raidstat #命令一
- controller_model: AVAGO MegaRAID SAS 9361-16i
- controller_status: ok
- raid_number: 1
- raid_level: 1
- raid_status: ok
- physical_dev_num: 10
- device_1: ok
- device_2: ok
- device_3: ok
- device_4: ok
- device_5: ok
- device_6: ok
- device_7: ok
- device_8: ok
- device_9: ok
- device_10: ok
复制代码
提示:通常raid卡类型有多种,其中SAS2008,3008为SAS卡;SAS3008IMR,3108,3416,9361,9460等为Mega RAID卡;PM8222,PM8204为PMC RAID卡。
2.3.2 raid卡命令点灯 不同的raid命令有所区别,采用将服务器对应卡慢盘的前板灯点亮的方式确认物理盘符位置。 不同raid卡类型点灯方式有所区别,可参考:电灯大全 。 Mega RAID卡点灯命令: - MegaCli64 -PdLocate -start -physdrv[E:S] -a0
复制代码命令释义: E:Enclosure Device ID; S:Slot Number; a0:为第一张RAID卡,a1为第二张RAID卡,只有一张卡则为a0,可lspci |grep SAS或者lspci |grep raid查看几张卡。 查看Enclosure Device ID和Slot Number
- Sangfor:VMP/host-0894eff86a41 /sf # cd /sf/bin/raidtools/bin/
- Sangfor:VMP/host-0894eff86a41 /sf/bin/raidtools/bin # ./MegaCli64 -PDList -aAll -NoLog | grep -Ei "Enclosure Device ID|Slot Number|Device Id|WWN|Raw Size|Firmware state|Inquiry Data" | grep -B6 PHYG114102VB960CGN
- Enclosure Device ID: 252
- Slot Number: 4
- Device Id: 25
- WWN: 55cd2e41534131b7
- Raw Size: 894.252 GB [0x6fc81ab0 Sectors]
- Firmware state: JBOD
- Inquiry Data: PHYG114102VB960CGN INTEL SSDSC2KG960G8 XCV10132
复制代码通过服务器前板闪灯确认物理位置,确认后关闭点灯。 - Sangfor:VMP/host-0894eff86a41 /sf/bin/raidtools/bin # ./MegaCli64 -PdLocate -start -physdrv[252:4] -a0
- ./MegaCli64 -PdLocate -start -physdrv[252:4] -a0 #点亮
- ./MegaCli64 -PdLocate -stop -physdrv[252:4] -a0 #关闭
复制代码
信息整理: 设备型号:VDS-R-7550 设备信息:172.16.12.185 磁盘类型:SSD 固态 逻辑盘符:sdh 逻辑盘位:4号 物理盘位:0号 坏盘序号:PHYG114102VB960CGN
2.3 副本一致性检查 后端检查副本一致性,确认副本一致性正常后再执行下一步。
2.3.1 确认版本 不同版本检查副本一致性命令有所差别,可先确认 vs 或者 vmp 版本。 - Sangfor:VMP/host-0894eff86a41 /sf # cat /sf/vs/version
- 2.8.1_R7
- Sangfor:VMP/host-0894eff86a41 /sf # cat /sf/version
- 5.4.10R1
复制代码
2.3.2 检查副本一致性 VS 2.8之前版本或者 HCI 5.8.6 之前版本: - vs_cluster_cmd.sh e '/sf/vs/bin/vs_localhost_checkok.js check_all; echo $?'
复制代码VS 2.8版本: - vs_cluster_cmd.sh x '/sf/vs/bin/vs_localhost_checkok.js check_all; echo $?'
复制代码VS 30.版本或者 HCI 5.8.6 版本及之后: - for b in $(gluster v i | grep host- | awk -F: '{print $1}' | grep -Eo '[0-9]+'); do vs_rpc_tool --cmd check --brickno "$b"; done
复制代码说明: 所有加入VS中的主机都返回0表示正常,若出现非 0 的情况,可参考 检查虚拟存储副本状态 进行处理。
2.4 缓存回刷 在需要更换的服务器上上传回刷脚本 vst_flush_cache_replace_cache_disk.sh ,如上传至 /root 目录。 功能:替换缓存盘时回刷缓存数据,避免数据同步。
注意: 1:该主机存在运行的虚拟机也可以直接使用,处于性能考虑,建议把虚拟机迁移其他主机上去,在回刷数据的时候,会有性能方面的影响; 2:如果有多台主机需要替换缓存盘回刷,先处理完一台后,检查数据完整性没有问题,再继续另外一台; 3:该脚本不能用于踢出缓存盘的场景。
脚本流程:关闭对应主机缓存,回刷缓存,等待替换完成,打开对应主机缓存。
适用版本: VS2.6 VS2.8 VS3.0 VS3.3(HCI或者VDI、EDS环境缓存回刷场景)
使用方法: 1:无需加任何参数直接执行此脚本,过程会输出脚本动作和结果; 2:中途会等待更换硬盘,更换完输入OKOK后会自动将脚本代码还原; 3:如中途异常退出脚本,再次执行即可。 - Sangfor:VMP/host-0894eff86a41 /sf # cd /root
- Sangfor:VMP/host-0894eff86a41 ~ # chmod u+x vst_flush_cache_replace_cache_disk.sh
- Sangfor:VMP/host-0894eff86a41 ~ # ./vst_flush_cache_replace_cache_disk.sh
复制代码
回刷过程可通过另一个终端执行提示的命令查看相关回刷进度: - Sangfor:VMP/host-0894eff86a41 /sf # /sf/vs/bin/vs_tier_cli.py -c dump |grep -E "dirty_block_cnt|clean_block_cnt".py -c dump |grep -E dirty_block_cnt|clean_block_cnt
复制代码提示:等待相关block变为0,即会自动继续执行回刷任务。若为数据盘,则不需要数据回刷。
2.5 物理拔盘 将对应的服务器、对应的物理盘符拔出,并结合如下信息确认无误。 设备型号:VDS-R-7550 设备信息:172.16.12.185 磁盘类型:SSD 固态 逻辑盘符:sdh 逻辑盘位:4号 物理盘位:0号 坏盘序号:PHYG114102VB960CGN
2.6 物理插盘 将新盘插回,并在 VMP 控制台完成替换。
2.7 继续回刷 VMP 控制台更换完成后继续执行回刷脚本,输入 OKOK 即可。 2.8 检查副本一致性 参考 2.3 步骤再次检查副本一致性。
2.9 一键检测 VMP 控制台执行一键检测,确保集群健康。 |