实战指南:设备追踪、健康监控与故障预测)
存储分布式文件系统对象存储后端高可用【免费下载链接】cephCeph is a distributed object, block, and file storage platform项目地址https://gitcode.com/gh_mirrors/ce/ceph点击查看免费下载导读Ceph 是分布式对象、块与文件存储平台其可靠性高度依赖底层物理存储设备HDD/SSD的健康状况。本文围绕 doc/rados/operations/devices.rst 系统讲解 Ceph 的设备管理能力如何追踪哪些守护进程使用哪些磁盘、如何点亮故障盘指示灯以便现场更换、如何通过 SMART 指标监控设备健康、如何预测设备故障并自动触发数据迁移以及与之配套的健康告警机制。读完本文你将掌握ceph device系列命令的完整用法、devicehealth与diskprediction_local两个 mgr 模块的核心配置参数并能结合源码理解这些能力在集群内部的真实工作方式。设备管理概述Ceph 如何应对硬件故障设备管理Device Management是 Ceph 处理硬件故障的基础能力。Ceph 会追踪硬件存储设备HDD、SSD记录每个设备被哪些守护进程daemon使用并持续收集这些设备的健康指标。基于这些信息Ceph 可以提供两类能力预测硬件故障根据历史健康指标推断磁盘的剩余寿命与预期故障时间自动响应硬件故障在设备预期即将失效时自动将相关 OSD 标记为out把数据迁移到健康设备上。从实现角度看设备追踪由ceph-mgr的devicehealth模块源码位于 src/pybind/mgr/devicehealth/module.py驱动它通过读取 OSD 上报的设备元数据如device_ids建立设备 ↔ 守护进程的映射关系并将采集到的 SMART 原始数据持久化存储。可以推断ceph device ls、ceph device info等命令的输出即来源于这一模块维护的设备清单devices与 OSDMap/OSD 元数据。设备追踪与查询列出集群中的设备查看当前集群中正在使用的存储设备清单ceph device ls输出会包含每个设备的devid、所在主机、关联的守护进程以及启用故障预测后设备寿命预期life expectancy字段。按守护进程或主机过滤当需要排查某个 OSD 或某台主机上的磁盘时可以使用如下过滤形式ceph device ls-by-daemon daemon ceph device ls-by-host host其中daemon形如osd.0、mon.node1host是集群中的主机名short name。查询单台设备的详细信息查看某个具体设备的位置信息location以及它被哪些守护进程消费daemonsceph device info deviddevid是设备标识例如SanDisk_X400_M.2_2280_512GB_162924424784可通过ceph device ls获取。device info返回的信息还包括设备的路径如/dev/sda、SMART 状态摘要与寿命预期区间等是定位故障盘的第一手资料。识别物理设备闪烁硬盘 LED 指示灯更换故障磁盘时最怕在几十块盘的机柜中拔错盘。Ceph 提供了一条命令可以在硬件机箱enclosure上点亮磁盘的 LED 指示灯ceph device light on|off devid [ident|fault] [--force]devid设备标识先用ceph device ls获取[ident|fault]选择闪烁哪种灯默认为ident识别灯fault为故障灯--force强制执行绕过某些校验。前置条件与限制该命令仅在启用了编排器orchestrator模块时可用当前支持 Cephadm 或 Rook 两种编排器。检查当前启用的编排器ceph orch status另外文档明确指出闪烁指示灯可能不生效。是否有效取决于内核版本、SESSCSI Enclosure Services固件以及 HBA主机总线适配器的配置。也就是说lsmcli需要能够通过 SES 协议与背板通信否则命令虽执行但灯不会亮。自定义闪烁命令Jinja2 模板Ceph 默认调用lsmcli命令来控制 LED你可以通过ceph config-key自定义其模板ceph config-key set mgr/cephadm/blink_device_light_cmd template ceph config-key set mgr/cephadm/host/blink_device_light_cmd lsmcli local-disk-{{ ident_fault }}-led-{{on if on else off}} --path {{ path or dev }}第二条命令的形式支持按主机host粒度覆盖适合不同厂商背板命令不一致的场景。默认模板定义在 src/pybind/mgr/cephadm/templates/blink_device_light_cmd.j2其内容正是lsmcli local-disk-{{ ident_fault }}-led-{{on if on else off}} --path {{ path or dev }}模板支持以下参数参数类型含义on布尔值点亮true或熄灭falseident_fault字符串取值为ident或fault对应识别灯与故障灯dev字符串设备 ID例如SanDisk_X400_M.2_2280_512GB_162924424784path字符串设备路径例如/dev/sda从 src/pybind/mgr/cephadm/module.py 的实现看blink_device_light会先渲染对应主机host的模板再通过cephadm shell -- cmd_args在目标主机上执行渲染后的命令若执行失败会抛出OrchestratorError。仓库测试 src/pybind/mgr/cephadm/tests/test_cephadm.py 覆盖了默认模板、自定义全局模板以及按主机自定义模板三种场景验证了该配置键的解析逻辑。启用健康监控收集 SMART 指标Ceph 通过smartctl工具采集设备的健康指标。以 SATA 盘为例SMART 标准提供了一系列内部指标累计通电小时数、上下电次数、不可恢复读错误次数等SAS 与 NVMe 盘通过略有差异的标准暴露类似指标。NVMe 盘还会附加厂商私有数据例如写入放大、磨损信息。开启或关闭健康监控ceph device monitoring on ceph device monitoring off对应的模块选项是mgr/devicehealth/enable_monitoring默认true。关闭监控时模块会同时清空已设置的健康检查self.set_health_checks({})避免残留的告警卡住ceph -s状态。底层采集原理smartctl 与特权助手SMART 数据的获取并非由 mgr 直接执行而是由 OSD 守护进程完成。从 src/common/blkdev.cc 可以看到OSD 通过一个特权助手/usr/libexec/ceph/block-device-health执行smartctl -x --jsono dev-x输出全部 SMART 信息--jsono输出 JSON 格式。该助手是 sudoers.d/ceph-smartctl 中唯一授予ceph用户的 sudo 命令用于校验设备路径后执行固定的 smartctl 命令行从而避免任意命令注入。此外对于识别为 NVMe 的盘还会调用nvme命令获取厂商附加的 SMART 日志见block_device_run_vendor_nvme。devicehealth模块通过send_command向 OSD/MON 发送smart前缀的命令do_query_daemon_health_metrics拿到原始 JSON 后再解析关键字段。例如磨损等级wear level的提取逻辑位于 src/pybind/mgr/devicehealth/module.pySATA SSD从ata_device_statistics的第 7 页page number 7、偏移 8 处读取百分比并除以 100NVMe SSD读取nvme_smart_health_information_log.percentage_used并除以 100。指标采集Scraping与存储自动采集周期启用监控后设备指标会按固定周期自动采集scrape。默认每 24 小时采集一次可用以下命令调整ceph config set mgr mgr/devicehealth/scrape_frequency seconds在源码中scrape_frequency的默认值为86400秒即 24 小时。后台线程会按sleep_interval默认 600 秒周期性唤醒将上次采集时间对齐到采集周期到期后执行scrape_all()并顺带触发一次predict_all_devices()见 module.py。手动采集需要立即采集时可以手动触发# 手动采集所有设备 ceph device scrape-health-metrics # 采集单台设备 ceph device scrape-health-metrics device-id # 采集单个守护进程管辖的设备 ceph device scrape-daemon-health-metrics who其中who是osd.id或mon.name形式的守护进程名。从scrape_all()的实现看采集会遍历 OSDMap 中的所有 OSD 与 MonMap 中的所有 MON逐一请求其 SMART 数据并去重后入库。查询已存储的指标ceph device get-health-metrics devid [sample-timestamp]可选参数sample-timestamp用于取特定时间点的采样数据省略时返回全部历史采样。底层实现中指标保存在模块的数据库中Device与DeviceHealthMetrics两张表raw_smart字段保存原始 JSON并支持两个相关配置项配置项默认值说明mgr/devicehealth/pool_namedevice_health_metrics存放设备健康指标的池名mgr/devicehealth/retention_period86400 * 180180 天指标保留时长过期数据会被清理故障预测评估设备寿命预期Ceph 能够基于采集到的健康指标预测磁盘寿命与故障时间。预测模式通过以下配置指定ceph config set global device_failure_prediction_mode mode支持两种模式none关闭设备故障预测默认行为下若未启用任何预测模块即此模式local使用ceph-mgr守护进程内置的预训练预测模型。local模式对应 src/pybind/mgr/diskprediction_local/module.py 中的diskprediction_local模块。该模块的配置项包括配置项默认值说明predict_interval86400秒后台预测的运行周期sleep_interval600秒主循环唤醒间隔predictor_modelprophetstor使用的预训练模型名称预测流程为diskprediction_local通过remote(devicehealth, show_device_metrics, ...)拉取设备历史 SMART 数据累积到至少 6 个采样点后将数据输入预训练模型Predictor.create(self.predictor_model)模型文件位于models/目录下计算剩余寿命。由于预测是在后台周期进行的寿命预期值可能需要相当长的时间才会填充——这是正常的。查看所有设备的寿命预期ceph device ls查看单台设备的元数据与寿命区间ceph device info devid手动触发与外部数据导入显式强制预测某台设备的寿命ceph device predict-life-expectancy devid如果集群外已有可靠的故障信息来源例如厂商诊断工具也可以直接告知 Ceph 某台设备的寿命预期ceph device set-life-expectancy devid from [to]寿命预期以时间区间表示from为预期失效的最早时间to为最晚时间可省略表示区间终点未知。区间的设计是为了表达预测的不确定性——预测越不可靠区间越宽。健康告警DEVICE_HEALTH 系列当设备寿命预期进入危险区间时devicehealth模块会触发健康告警。核心阈值配置为ceph config set mgr mgr/devicehealth/warn_threshold seconds若设备预计在warn_threshold秒内失效则产生DEVICE_HEALTH告警。源码中该选项默认值为86400 * 14 * 6秒即 84 天。手动触发生成告警的检查ceph device check-health从check_health()的实现module.py看它会遍历所有带life_expectancy_max的设备结合 OSDMap 判断其 OSD 是否仍在in状态并最终调用set_health_checks()发布告警。与设备健康相关的告警在 doc/rados/operations/health-checks.rst 中有完整定义共三种健康检查含义应对方式DEVICE_HEALTH一个或多个 OSD 设备预计即将失效阈值由mgr/devicehealth/warn_threshold决定将 OSD 标记为out使数据迁出随后下架硬件若启用self_heal此步骤通常自动完成DEVICE_HEALTH_IN_USE设备已预计失效并被标记out但仍参与一个或多个 PG数据尚未迁完或集群接近满、CRUSH 结构无合适替代 OSD可关闭mgr/devicehealth/self_heal、调整mgr/devicehealth/mark_out_threshold或解决阻碍数据迁移的条件DEVICE_HEALTH_TOOMANY预计失效设备过多若全部自动标记out将跌破集群的mon_osd_min_in_ratio比例该比例用于防止级联out尽快扩容新 OSD 或分批替换故障盘也可临时调整mon_osd_min_in_ratio或mark_out_threshold压制告警但会提高数据不可恢复丢失的风险需要留意DEVICE_HEALTH仅针对当前仍标记为in的 OSD若设备已损坏但 OSD 仍up恢复可能处于降级状态必要时可考虑强制停止相关 OSD 守护进程以加速恢复——但这必须极其谨慎注意故障域约束避免破坏数据可用性。自动迁移self_heal 预迁移mgr/devicehealth/self_heal选项默认启用会自动把预计即将失效的设备上的数据迁走。启用后模块会把相关 OSD 标记为out从而触发数据自动迁移。触发条件由mgr/devicehealth/mark_out_threshold控制ceph config set mgr mgr/devicehealth/mark_out_threshold seconds若设备预计在mark_out_threshold秒内失效就会被自动标记out。源码中该选项默认值为86400 * 14 * 2秒即 28 天。从实现细节看mark_out_etc()module.py不只是执行osd out还会将相关 OSD 的primary-affinity权重设为0.0降低它们继续作为主副本承载写入的概率加速数据迁移收尾。防止级联失败mon_osd_min_up_ratio文档特别强调mon_osd_min_up_ratio配置项可以防止自愈过程级联成整体故障如果self_heal标记out的 OSD 数量过多导致in比例跌破阈值集群会立即停止批量标记并抛出DEVICE_HEALTH_TOOMANY健康检查与之配套的还有mon_osd_min_in_ratio同样是防止过多 OSD 被自动标记out的保护比例。此时应尽快向集群补充新 OSD 以防数据丢失或分批替换故障盘。配置参数速查表以下汇总设备管理相关核心配置默认值取自 devicehealth/module.py 与 diskprediction_local/module.py 源码配置项默认值说明mgr/devicehealth/enable_monitoringtrue是否监控设备健康指标ceph device monitoring on/off切换mgr/devicehealth/scrape_frequency86400秒24h自动采集设备指标的周期mgr/devicehealth/sleep_interval600秒后台主循环唤醒间隔mgr/devicehealth/pool_namedevice_health_metrics设备健康指标存储池mgr/devicehealth/retention_period180天指标保留时长mgr/devicehealth/warn_threshold84天预期失效时间小于该值则触发DEVICE_HEALTH告警mgr/devicehealth/mark_out_threshold28天预期失效时间小于该值则自动标记 OSDoutmgr/devicehealth/self_healtrue是否自动迁移即将失效设备上的数据device_failure_prediction_modenone故障预测模式none/localdiskprediction_local/predict_interval86400秒本地预测模型运行周期diskprediction_local/predictor_modelprophetstor本地预测所用预训练模型mon_osd_min_up_ratio/mon_osd_min_in_ratio集群默认防止self_heal批量标记out导致级联故障的保护比例小结Ceph 的设备管理能力覆盖了硬件生命周期的完整闭环ceph device ls/info建立设备与守护进程的对应关系device light借助编排器与lsmcli点亮故障盘 LED帮助现场精准换盘devicehealth模块通过smartctl定期采集 SMART 指标并持久化diskprediction_local用预训练模型预测寿命预期warn_threshold与self_heal则在磁盘彻底损坏前自动发出告警、迁移数据把硬件故障对集群可用性的冲击降到最低。结合 devicehealth 模块源码、cephadm 实现 与 health-checks 文档 深入阅读可以更完整地理解这些能力在集群内部的协作方式。赞分享存储分布式文件系统对象存储后端高可用【免费下载链接】cephCeph is a distributed object, block, and file storage platform项目地址https://gitcode.com/gh_mirrors/ce/ceph点击查看免费下载相关推荐Dialog输入对话框完全指南密码验证与文本限制的5种实现Dialog输入对话框完全指南密码验证与文本限制的5种实现 空祖家的对话框工具Kongzue Dialog是一款功能强大的Android对话框库提如何高效使用FastEmbed专业向量嵌入实践指南如何高效使用FastEmbed专业向量嵌入实践指南 FastEmbed作为一款轻量级、快速的Python向量嵌入库专为生成高质量嵌入向量而设计。它支持多种先Ceph 集群运维实战指南启动、健康监控、数据放置与故障排查Ceph 集群运维实战指南启动、健康监控、数据放置与故障排查 Ceph 是分布式对象、块和文件存储平台其集群运维工作分布在四个层次以 systemd 启停存储分布式文件系统对象存储后端高可用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考