附录 A. Ceph 文件系统的健康状况消息
集群健康检查
Ceph 监控守护进程生成健康消息,以响应元数据服务器(MDS)的某些状态。以下是健康信息及其解释列表:
- MDS 排名 <ranks> 失败
- 目前没有将一个或多个 MDS 等级分配给任何 MDS 守护进程。在合适的替代守护进程启动后,存储集群才会恢复。
- MDS 排名 <ranks> 已损坏
- 一个或多个 MDS 级别对其存储元数据造成严重损坏,在修复元数据之前,无法重新开始。
- MDS 集群被降级
-
当前没有启动和运行 MDS 等级,客户端可能会暂停元数据 I/O,直到此情况解决为止。这包括等级失败或损坏,包括 MDS 上运行但未处于
活动
状态的等级,例如,排名在重播
状态。 - MDS <names> 滞后
-
MDS 守护进程应当会以
mds_beacon_interval
选项指定的间隔向 monitor 发送 beacon 消息,默认为 4 秒。如果 MDS 守护进程无法在它们mds_beacon_grace
选项指定的时间内发送消息,则默认为 15 秒。Ceph 监控器将 MDS 守护进程标记为滞后
,并自动将其替换为待机守护进程(如果有可用)。
守护进程报告的健康检查
MDS 守护进程可以识别各种不需要的条件,并在 ceph status
命令的输出中返回它们。这些条件具有人类可读的消息,也具有唯一代码,从 MDS_HEALTH
开始,显示在 JSON 输出中。下面列出了守护进程消息、它们的代码和说明。
- "Behind on trimming…"
Code: MDS_HEALTH_TRIM
CephFS 维护一个划分为日志段的元数据日志。日志的长度(按分段数)由
mds_log_max_segments
设置控制。当片段数超过该设置时,MDS 开始写回元数据,以便可以删除 (trim) 最旧的片段。如果这个过程太慢,或者软件错误正在防止修剪,则会出现这个健康信息。出现此消息的阈值是将网段数量为mds_log_max_segments
的两倍。注意如果遇到修剪警告,则建议增加
mds_log_max_segments
。但是,确保在集群运行状况恢复时将此配置重新重置为默认值,并且不再看到 trim 警告。建议将mds_log_max_segments
设置为 256,以允许 MDS 使用修剪来捕获。- "Client <name> failing to respond to capability release"
Code: MDS_HEALTH_CLIENT_LATE_RELEASE, MDS_HEALTH_CLIENT_LATE_RELEASE_MANY
CephFS 客户端由 MDS 发布。这些能力像锁定一样工作。有时,例如当另一个客户端需要访问权限时,MDS 会请求客户端释放其功能。如果客户端不响应,它可能无法立即这样做,或者根本无法这样做。如果客户端需要的时间超过其
mds_revoke_cap_timeout
选项(默认为 60 秒)所指定的时间,将显示此消息。- "Client <name> failing to respond to cache pressure"
Code: MDS_HEALTH_CLIENT_RECALL, MDS_HEALTH_CLIENT_RECALL_MANY
客户端维护元数据缓存。客户端缓存中的项目(如索引节点)也固定在 MDS 缓存中。当 MDS 需要缩小其缓存以保持在自己的缓存大小限制内时,MDS 会将消息发送到客户端,以缩小其缓存。如果客户端不响应,它可以阻止 MDS 正确保持其缓存大小,并且 MDS 最终可能会耗尽内存并意外终止。如果客户端需要的时间超过其
mds_recall_state_timeout
选项(默认为 60 秒)所指定的时间,将显示此消息。详情请参阅元数据服务器缓存大小限制部分。- "Client name failing to advance its oldest client/flush tid"
Code: MDS_HEALTH_CLIENT_OLDEST_TID, MDS_HEALTH_CLIENT_OLDEST_TID_MANY
用于客户端和 MDS 服务器之间通信的 CephFS 协议使用名为 oldest tid 的字段来通知 MDS 完全完成哪些客户端请求,以便 MDS 可以忘记它们。如果一个不响应的客户端未能推进此字段,可能会阻止 MDS 正确清理客户端请求使用的资源。如果客户端的请求数超过
max_completed_requests
选项(默认为 100000)指定的数量(默认为 100000),则会出现在 MDS 侧完成但还没有在客户端 最旧的 tid 值中考虑的请求数。- "Metadata damage detected"
Code: MDS_HEALTH_DAMAGE
从元数据池中读取时会出现元数据损坏或缺失的问题。此消息表示损坏已完全隔离,使 MDS 能够继续运行,尽管客户端访问损坏的子树会返回 I/O 错误。使用
damage ls
管理 socket 命令查看损坏的详细信息。一旦遇到损坏,就会发出此消息。- "MDS in read-only mode"
Code: MDS_HEALTH_READ_ONLY
MDS 已进入只读模式,并将
EROFS
错误代码返回尝试修改任何元数据的客户端操作。MDS 进入只读模式:- 如果在写入元数据池时遇到写入错误。
-
如果管理员强制 MDS 使用
force_readonly
管理 socket 命令进入只读模式。
- "<N> slow requests are blocked"
Code: MDS_HEALTH_SLOW_REQUEST
一个或多个客户端请求尚未立即完成,这表示 MDS 运行缓慢或遇到漏洞。使用
ops
管理 socket 命令列出出色的元数据操作。如果任何客户端请求的时间超过其mds_op_complaint_time
选项(默认为 30 秒)指定的值,则会出现此消息。- "Too many inodes in cache"
- Code: MDS_HEALTH_CACHE_OVERSIZED
MDS 无法修剪其缓存,以遵守管理员设置的限制。如果 MDS 缓存太大,守护进程可能会耗尽可用内存并意外终止。默认情况下,如果 MDS 缓存大小大于其限制的 50%,则会出现此消息。
其它资源
- 详情请参阅 Red Hat Ceph Storage 文件系统指南中的 元数据服务器缓存大小限制 部分。