附录 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 logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.