- 前言
- 读者对象
- 如何阅读本书
- 勘误和支持
- 致谢
- 第 1 篇 高性能网站构建
- 第 1 章 深入理解 DNS 原理与部署 BIND
- 第 2 章 全面解析 CDN 技术与实战
- 第 3 章 负载均衡和高可用技术
- 第 4 章 配置及调优 LVS
- 第 5 章 使用 HAProxy 实现 4 层和 7 层代理
- 第 6 章 实践 Nginx 的反向代理和负载均衡
- 第 7 章 部署商业负载均衡设备 NetScaler
- 第 8 章 配置高性能网站
- 第 9 章 优化 MySQL 数据库
- 第 2 篇 服务器安全和监控
- 第 10 章 构建企业级虚拟专用网络
- 第 11 章 实施 Linux 系统安全策略与入侵检测
- 第 12 章 实践 Zabbix 自定义模板技术
- 第 13 章 服务器硬件监控
- 第 3 篇 网络分析技术
- 第 14 章 使用 tcpdump 与 Wireshark 解决疑难问题
- 第 15 章 分析与解决运营商劫持问题
- 第 16 章 深度实践 iptables
- 第 4 篇 运维自动化和游戏运维
- 第 17 章 使用 Kickstart 完成批量系统安装
- 第 18 章 利用 Perl 编程实施高效运维
- 第 19 章 精通 Ansible 实现运维自动化
- 第 20 章 掌握端游运维的技术要点
- 第 21 章 精通手游运维的架构体系
最佳实践 70:SSD 定制监控
SSD 优势与内部结构
SSD(Solid State Drives)固态硬盘,相比于传统的机械硬盘,它具有非常出色的性能,且故障率、功耗也远低于机械硬盘。
相比于传统的机械硬盘,SSD 硬盘没有磁盘、磁头、磁头臂、马达、永磁铁等,这些烦琐的机械部件,取而代之的是芯片,SSD 包含三块主要的芯片,分别是内存芯片、主控芯片、缓存芯片。
- 内存芯片:它由 NAND Flash(一种非易失性闪存)组成,NAND Flash 的制作工艺直接决定 SSD 硬盘的性能、寿命以及价格。
- 主控芯片:它其实是一颗 CPU,它的运算能力由制造工艺、核数数量、频率来决定。主控芯片的运算能力,很大程度上决定了 SSD 的性能。
- 缓存芯片:它并不是所有 SSD 硬盘都包含的,一般相对高端的 SSD 型号才有,它的功能与 CPU 缓存、RAID 卡缓存作用相似,都是为了提高性能而配置的。
针对 NAND Flash 这部分,因为它对 SSD 硬盘的性能、寿命和价格有直接影响,本节适当展开一下,希望对读者朋友选购 SSD 硬盘的时候有所帮助。
SSD 选型
目前闪存的类型主要有 3 种,SLC(Single-Level Cell)、MLC(Multi-Level Cell)和 TLC(Triple-Level Cell)。
SLC 又名单层式存储单元,它的最大优势是寿命长,原理上 SLC 架构是 0 和 1 两个充电值,所以每个 Cell 只能存放 1bit 数据,架构最简单,任何一个 Cell 故障,对整体性能几乎没有影响,同时 SLC 也是最省电的。但是,SLC 的价格也是最高的,产品定位属于 SSD 硬盘中的高端系列,一般只在企业级中使用。
MLC 又名多层式存储,原理上它通过不同的电压在一个单元中记录两组信息(00、01、10、11),这样它能存储 2bit 的数据,相比 SLC,理论上存储容量可以大一倍,由于电压变化频繁,MLC 的寿命没有 SLC 长。但是它有一个比价大的优势,价格比 SLC 低很多,在平衡了容量、性能、寿命等参数之后,MLC 还是深得企业欢迎的。
TLC 是 MLC 的延伸,它可以在一个 Cell 上存储 3bit 数据,所以价格上比 MLC 更便宜,但是由于它的电压变换更频繁,寿命也是最短的。不过随着制造工艺的发展,TLC 的使用寿命也在提升,通常来说,如果个人使用的话,MLC 是非常好的选择,性价比最高。某些非核心的企业应用也可以选择使用 TLC。
随着 SSD 的使用越来越多,针对 SSD 硬盘的监控,也需要同步跟上,本节就来重点介绍 SSD 定制监控。
SSD 应用场景及定制监控
SSD 硬盘的服务器上的应用场景主要分两类。
第一,直接使用,不通过 RAID 卡,这种场景实际中比较少,因为一般情况下在购买服务器时都配置了硬件的 RAID 卡。
第二,通过 RAID 卡,这种场景操作上和普通 SAS 或者 SATA 盘一样,先做 RAID10,或者 RAID6 再使用,这种场景比较多。
在 Linux 系统中,有一个 smartmontools 工具包,其中包含两个程序(smartctl 和 smartd),通过获取 SMART(Self-Monitoring Analysis and Reporting Technology System,自检分析日志系统)信息来监控服务器上存储设备的状态。smartctl 是命令形式的检测,可以通过脚本直接调用,smartd 是一个守护程序,可以直接把服务器存储设备的状态信息输出到系统的 log 中。
场景一:在实际的应用的比较少,一般服务器都会配置 RAID 卡,在家用 PC 中,基本上都是场景一的形式用的 SSD,将硬盘直接连接在主板的接口上,使用如下命令可以查看 SSD 硬盘的详细信息。
smartctl -a /dev/sda
注意
只有不透过 RAID 卡连接的 SSD,使用以上命令,可以获取详细的硬盘信息。
在常用的场景二中,SSD 硬盘,先连接到 RAID 卡上,然后通过 RAID 卡创建逻辑磁盘,此时在系统里面看到的 sda、sdb 都是逻辑盘,如果要查看实际的硬盘信息,需要再通过 RAID 卡的管理工具来实现。目前主流的 RAID 卡,包括 Hewlett-Packard Company Smart Array 和 LSI Logic/Symbios Logic MegaRAID SAS 两大类。这两个 RAID 卡,厂商都提供了对应的命令行工具,工具在上一节中有介绍过,分别是 hpacucli 或者 hpssacli 和 MegaCli,通过 git clone 可以获取安装程序。
git clone https://github.com/nameyjj/SSDMonitor.git
SSD 硬盘将数据存储在闪存颗粒上,闪存颗粒是有擦写次数限制的,目前主要还是受限于制造工艺。SSD 硬盘的使用寿命,可以用以下公式来计算,如图 13-1 所示。
图 13-1 SSD 寿命计算公式
P/E 次数:指 SSD 闪存的 P/E(编程/擦除)循环,不同的闪存类型差别很大,比如目前 SLC 可以达到 5 万到 10 万次循环,MLC 在 3000 到 5000 次左右,TLC 最少,只有 1000 次左右循环。
实际写入:这个值指写入文件大小*写放大率。写放大率是 SSD 硬盘上实际写文件的大小与写入文件的大小的一个比例,简单举个例子,有一个 1GB 的文件需要写入 SSD 盘,那么 SSD 盘在得到这个请求之后,会先看当前没被写过的闪存块够不够,如果够,那么直接写入闪存块就结束了,这种情况下,SSD 盘实际写到闪存上的数据也是 1GB,写放大率就是 1,这种情况只在一块新的 SSD 从未被写满过的情况下才会发生,大部分情况是,SSD 盘得到这个写入请求,查看当前闪存块,发现没有全新的块可以直接写,需要将老的块先做清理,之后才能写入,清理操作包括擦除和迁移数据两种,这种都会增加 SSD 盘的实际写入数据量,简单地说,要写入 1GB 数据,SSD 盘上实际可能有 1.3GB 的数据写操作,0.3GB 写操作是由擦除和迁移产生的,此处的写放大率就是 1.3GB/1GB=1.3,这个系数与主控芯片有关系。
一块 600GB 的 MLC 的 SSD,P/E 次数为 3000 次,
每天实际写入 100GB 的情况下,寿命为 600*3000/(100*365)=49 年,
每天实际写入 600GB 的情况下,寿命为 8.3 年,
每天实际写入 1200GB 的情况下,寿命为 4.1 年。
每天写入 600GB 相当于每天把这块 SSD 都写一遍,大部分应用都不会有这么大写入量的,所以大部分情况下,使用寿命要大于 8.3 年。
大家可能会有这么一个疑问,SSD 硬盘使用寿命如果到了会怎么样?
在 SSD 硬盘的设备信息里面都会有一项关于使用寿命的记录,使用百分比表示,当这个值变成 0%的时候,那么问题就出现了,SSD 盘将变成只读(Readonly)状态,对于大部分应用来说,都会出问题。所以一般情况下,发现 SSD 硬盘的使用寿命小于 10%时,就应该开始准备更换硬盘,或者迁移业务了。
介绍了上面这些 SSD 硬盘使用寿命的内容之后,接下来,就具体地告诉大家,如何监控 SSD 硬盘使用寿命。笔者已经针对 Hewlett-Packard Company Smart Array 和 LSI Logic/Symbios Logic MegaRAID SAS RAID 卡编写了两个脚本,可以直接获取 SSD 硬盘的寿命,通过如下地址可以下载,名为 SsdUsageRemainingCheckHP.sh 和 SsdUsageRemainingCheckMegaRAID.sh。
git clone https://github.com/nameyjj/SSDMonitor.git
说明一下脚本的实现逻辑和原理。
获取 Hewlett-Packard Company Smart Array RAID 卡中 SSD 硬盘剩余使用寿命百分比脚本的步骤如下。
步骤 1 检查系统中是否安装 hpssacli 或者 hpacucli 命令行工具。
步骤 2 获取硬盘物理地址信息。
#/usr/sbin/hpssacli controller all show detail config |grep physicaldrive|awk '{print $2}'|sort|uniq 1I:1:1 1I:1:2 2I:1:16 2I:1:17 2I:1:18 2I:1:19
步骤 3 判断物理硬盘是否是 SSD 硬盘,得到 1 表示该硬盘是 SSD 硬盘。
#hpssacli ctrl slot=0 pd 2I:1:16 show detail|grep -i "Solid State SATA"|wc -l 1
步骤 4 筛选 SSD 硬盘寿命关键字,获取 SSD 硬盘使用寿命百分比数据。
#hpssacli ctrl slot=0 pd 2I:1:16 show detail|grep -i "Usage remaining" Usage remaining: 99.70%
直接执行 SsdUsageRemainingCheckHP.sh 得到如下输出,physicaldrive 是指物理的槽位,Usage remaining 就是 SSD 硬盘的使用寿命剩余百分比。
[root@localhost ~]# ./SsdUsageRemainingCheckHP.sh physicaldrive 2I:1:16 Usage remaining: 99.70% physicaldrive 2I:1:17 Usage remaining: 99.70% physicaldrive 2I:1:18 Usage remaining: 99.70% physicaldrive 2I:1:19 Usage remaining: 99.70%
获取 LSI Logic/Symbios Logic MegaRAID SAS RAID 卡中 SSD 硬盘剩余使用寿命百分比脚本的步骤如下。
步骤 1 检查系统中是否安装 Megacli64 和 smartctl 命令行工具。
步骤 2 获取硬盘槽位、硬盘类型、设备 ID 信息。
步骤 3 判断硬盘是否为 SSD 硬盘。
步骤 4 筛选 SSD 硬盘剩余寿命百分比关键字,098 表示剩余 98%的寿命。
[root@localhost ~]#smartctl -a -d sat+megaraid,16 /dev/sda|grep "Media_Wearout_Indicator"|awk '{print $5}' //16 是 Device ID 098
直接执行脚本 SsdUsageRemainingCheckMegaRAID.sh,得到如下信息,包括 SSD 硬盘槽位和剩余寿命百分比。
[root@localhost ~]# ./SsdUsageRemainingCheckMegaRAID.sh Slot Number: 6 usage_remaining: 098% Slot Number: 7 usage_remaining: 098%
通过脚本得到 SSD 硬盘剩余使用寿命百分比之后,可以利用它的输出接口,结合 Zabbix 或者直接通过脚本实现,当值小于 10%时告警。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论