注意

本文档适用于 Ceph 的开发版本。

MDS 状态

元数据服务器 (MDS) 在 CephFS 的正常运行期间会经历几种状态。例如,某些状态表示 MDS 正在从上一个 MDS 实例的故障转移中恢复。在这里,我们将记录所有这些状态,并附带状态图以可视化转换。

状态描述

常见状态

up:active

这是 MDS 的正常运行状态。它表示 MDS 及其在文件系统中的级别可用。

up:standby

MDS 可用于接管失败的级别(另请参阅 术语)。一旦可用,监视器会自动将处于此状态的 MDS 分配给失败的级别。

up:standby_replay

MDS 正在跟踪另一个 up:active MDS 的日志。如果活动 MDS 发生故障,拥有处于重放模式的备用 MDS 是可取的,因为 MDS 正在重放实时日志并将更快地接管。备用重放 MDS 的缺点是它们不能用于接管任何其他发生故障的 MDS,只能接管它们所跟踪的 MDS。

不太常见或过渡状态

up:boot

此状态在启动期间广播给 Ceph 监视器。此状态永远不可见,因为监视器会立即将 MDS 分配给可用级别或命令 MDS 作为备用运行。此处记录此状态是为了完整性。

up:creating

MDS 正在通过构建一些按级别元数据(例如日志)并进入 MDS 集群来创建新级别(可能是级别 0)。

up:starting

MDS 正在重新启动已停止的级别。它打开相关的按级别元数据并进入 MDS 集群。

up:stopping

当级别停止时,监视器命令活动 MDS 进入 up:stopping 状态。在此状态下,MDS 不接受新的客户端连接,将所有子树迁移到文件系统中的其他级别,刷新其元数据日志,如果级别是最后一个(0),则逐出所有客户端并关闭(另请参阅 CephFS 管理命令)。

up:replay

MDS 接管失败的级别。此状态表示 MDS 正在恢复其日志和其他元数据。

up:resolve

如果 Ceph 文件系统具有多个级别(包括此级别),即它不是单个活动 MDS 集群,则 MDS 从 up:replay 进入此状态。MDS 正在解决任何未提交的 MDS 间操作。文件系统中的所有级别必须处于此状态或更晚才能取得进展,即不能有级别失败/损坏或 up:replay

up:reconnect

MDS 从 up:replayup:resolve 进入此状态。此状态旨在请求客户端重新连接。任何与此级别有会话的客户端都必须在此期间重新连接,可通过 mds_reconnect_timeout 进行配置。

up:rejoin

MDS 从 up:reconnect 进入此状态。在此状态下,MDS 正在重新加入 MDS 集群缓存。特别是,所有元数据上的 MDS 间锁都重新建立。

如果没有要重放的已知客户端请求,MDS 会直接从该状态变为 up:active

up:clientreplay

MDS 可能会从 up:rejoin 进入此状态。MDS 正在重放已回复但尚未持久(未记录到日志中)的任何客户端请求。客户端在 up:reconnect 期间重新发送这些请求,并且请求再次重放。MDS 在完成重放后进入 up:active

失败状态

down:failed

没有 MDS 实际持有此状态。相反,它应用于文件系统中的级别。例如

$ ceph fs dump
...
max_mds 1
in      0
up      {}
failed  0
...

级别 0 是失败集的一部分,正在等待备用 MDS 接管。如果此状态持续存在,则表示找不到合适的 MDS 守护程序来分配给此级别。这可能是由于备用守护程序不足,或者所有备用守护程序具有不兼容的 compat(另请参阅 升级 MDS 集群)。

down:damaged

没有 MDS 实际持有此状态。相反,它应用于文件系统中的级别。例如

$ ceph fs dump
...
max_mds 1
in      0
up      {}
failed
damaged 0
...

级别 0 已损坏(另请参阅 灾难恢复)并放入 damaged 集。作为级别 0 运行的 MDS 发现了无法自动恢复的元数据损坏。需要操作员干预。

down:stopped

没有 MDS 实际持有此状态。相反,它应用于文件系统中的级别。例如

$ ceph fs dump
...
max_mds 1
in      0
up      {}
failed
damaged
stopped 1
...

通过减少 max_mds 来停止级别(另请参阅 配置多个活动 MDS 守护程序)。

状态图

此状态图显示了 MDS/级别的可能状态转换。图例如下

颜色

  • 绿色:MDS 处于活动状态。

  • 橙色:MDS 处于尝试变为活动的过渡状态。

  • 红色:MDS 指示导致级别标记为失败的状态。

  • 紫色:MDS 和级别正在停止。

  • 黑色:MDS 指示导致级别标记为损坏的状态。

形状

  • 圆形:MDS 持有此状态。

  • 六边形:没有 MDS 持有此状态(它应用于级别)。

线条

  • 双线形状表示级别“在”。

digraph { node [shape=circle,style=unfilled,fixedsize=true,width=2.0] node [color=blue,peripheries=1]; N0 [label="up:boot"] node [color=green,peripheries=1]; S1 [label="up:standby"] N0 -> S1 [color=green,penwidth=2.0]; S2 [label="up:standby_replay"] S1 -> S2 [color=green,penwidth=2.0]; node [color=orange,peripheries=2]; N1 [label="up:creating"] S1 -> N1 [color=orange,penwidth=2.0]; N2 [label="up:starting"] S1 -> N2 [color=orange,penwidth=2.0]; N3 [label="up:replay"] S1 -> N3 [color=orange,penwidth=2.0]; S2 -> N3 [color=orange,penwidth=2.0]; N4 [label="up:resolve"] N3 -> N4 [color=orange,penwidth=2.0]; N5 [label="up:reconnect"] N3 -> N5 [color=orange,penwidth=2.0]; N4 -> N5 [color=orange,penwidth=2.0]; N6 [label="up:rejoin"] N5 -> N6 [color=orange,penwidth=2.0]; N7 [label="up:clientreplay"] N6 -> N7 [color=orange,penwidth=2.0]; node [color=green,peripheries=2]; S0 [label="up:active"] N7 -> S0 [color=green,penwidth=2.0]; N1 -> S0 [color=green,penwidth=2.0]; N2 -> S0 [color=green,penwidth=2.0]; N6 -> S0 [color=green,penwidth=2.0]; // going down but still accessible by clients node [color=purple,peripheries=2]; S3 [label="up:stopping"] S0 -> S3 [color=purple,penwidth=2.0]; // terminal (but "in") node [shape=polygon,sides=6,color=red,peripheries=2]; D0 [label="down:failed"] N2 -> D0 [color=red,penwidth=2.0]; N3 -> D0 [color=red,penwidth=2.0]; N4 -> D0 [color=red,penwidth=2.0]; N5 -> D0 [color=red,penwidth=2.0]; N6 -> D0 [color=red,penwidth=2.0]; N7 -> D0 [color=red,penwidth=2.0]; S0 -> D0 [color=red,penwidth=2.0]; S3 -> D0 [color=red,penwidth=2.0]; D0 -> N3 [color=red,penwidth=2.0]; // terminal (but not "in") node [shape=polygon,sides=6,color=black,peripheries=1]; D1 [label="down:damaged"] S2 -> D1 [color=black,penwidth=2.0]; N3 -> D1 [color=black,penwidth=2.0]; N4 -> D1 [color=black,penwidth=2.0]; N5 -> D1 [color=black,penwidth=2.0]; N6 -> D1 [color=black,penwidth=2.0]; N7 -> D1 [color=black,penwidth=2.0]; S0 -> D1 [color=black,penwidth=2.0]; S3 -> D1 [color=black,penwidth=2.0]; D1 -> D0 [color=red,penwidth=2.0] node [shape=polygon,sides=6,color=purple,peripheries=1]; D3 [label="down:stopped"] S3 -> D3 [color=purple,penwidth=2.0]; N6 -> D3 [color=purple,penwidth=2.0]; }

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入