概述
在生产环境中,经常需要对ceph集群进行一些调优,维护,设备替换等操作,为了简化和方便操作,陆续写过一些简单的小脚本工具,现整理出来。
共同PG检测工具
使用场景
在一个双副本环境中,已经有部分osd离线(down and in)的状态,此时集群部分pg处于单副本状态,此时有另外一些osd设备(硬盘原因,机器原因)需要替换或者离线,预估受影响的pg;或者想查询出某些osd共同承载了哪些pg。
脚本
在脚本所在目录要查询的osd编号写入warnosdlist中,执行脚本,返回对应的pg编号。
root@mon0:/opt/pgtools# cat warnosdlist
10
15
29
40
66
78
root@mon0:/opt/pgtools# cat check_warnosd_pg
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import re,os
osd=[]
os.system("""ceph pg dump|grep 2019|grep "]" > pgmap""")
with open ('warnosdlist') as f:
for i in f:
osd.append(i.strip())
with open ('pgmap') as pg:
for p in pg:
info=p.strip()
p1="\d+,\d+"
pa=re.compile(p1)
oid=pa.findall(info)[0]
q="\d+"
qa=re.compile(q)
s=qa.findall(oid)
if s[0] in osd and s[1] in osd:
print p
硬盘温度/告警级别查询
原理
本质是利用smartctl工具检测硬盘相关的几个参数,直接将命令粘贴到交互界面执行即可。
温度异常检测
root@mon0:~# cat hotdisk.sh
#!/bin/bash
lsblk | awk '/disk/{print "/dev/"$1}' | while read dev; do echo -n "$dev : "; smartctl -A $dev | grep Tem|grep 190;echo "";done
告警级别
root@mon0:~# cat hddcheck.sh
#!/bin/bash
lsblk | awk '/disk/{print "/dev/"$1}' | while read dev; do echo -n "$dev : "; smartctl -A $dev | awk '/^ *(5|187|188|197|198)/{if($NF > 0) count++} END {if(count>=4) print "err"; else if(count>=3) print "warning"; else if(count>0) print "some wrong"; else print "ok"}'; done
smartctl相关参数
网上有更详细的说明信息,感兴趣的可以看一下。根据相关的资料和实际经验,将5,187,188,197,198作为关键检测项,其余的作为参考,作为硬盘的损坏程度。
属性ID | 属性名称 | 属性含义 |
---|---|---|
1 | Raw Read Error Rate | 底层数据读取错误率 |
2 | Throughput Performance | 磁盘读写通量性能 |
3 | Spin Up Time | 主轴起旋时间 |
4 | Start/Stop Count | 启停次数 |
5 | Reallocated_Sector_Ct | 重映射扇区数 |
10 | Spin_Retry_Count | 主轴起旋重试次数 |
11 | Calibration_Retry_Count | 磁盘校准重试次数 |
12 | Power_Cycle_Count | 磁盘通电次数 |
187 | Reported Uncorrectable Errors | 无法校正的错误 |
188 | Command Timeout | 命令超时 |
194 | Temperature_Celsius | 温度 |
197 | Current Pending Sector Count | 当前待映射扇区计数 |
198 | Offline Uncorrectable Sector Count | 脱机无法校正的扇区计数 |
199 | UDMA_CRC_Error_Count | 奇偶校验错误率 |
200 | Write_Error_Rate | 写错误率 |
241 | Total_LBAs_Written | 磁盘自出厂总共写入的的数据,单位是LBAS=512Byte |
242 | Total_LBAs_Read | 磁盘自出厂总共读取的数据,单位是LBAS=512Byte |
(未完)