注意

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

OSDState

digraph osd { node [shape = doublecircle]; "start" "end"; node [shape = circle]; start -> preboot; waiting_for_healthy [label = "waiting\nfor\nhealthy"]; waiting_for_healthy -> waiting_for_healthy [label = "tick"]; waiting_for_healthy -> preboot [label = "i am healthy!"]; preboot -> booting [label = "send(MOSDBoot)"]; booting -> active [label = "recv(osdmap<up>)"]; active -> prestop [label = "stop()"]; active -> preboot [label = "recv(osdmap<down>)"]; active -> end [label = "kill(SIGINT)"]; active -> waiting_for_healthy [label = "i am unhealthy!"] prestop -> end [label = "recv(osdmap<down>)"]; }

waiting_for_healthy(等待健康)

如果 OSD 守护程序能够连接到其心跳对等节点,并且其自身内部心跳未失败,则被视为健康。否则,它会将自己置于 waiting_for_healthy 状态,并定期检查自己的可达性和内部心跳。

preboot(预启动)

OSD 向已连接的 monitor 发送 MOSDBoot 消息,通知集群它已准备好提供服务,以便 quorum 可以在 osdmap 中将其标记为 up

booting(正在启动)

在被标记为 up 之前,OSD 必须保持其 booting 状态。

active

收到将 OSD 标记为 up 的 osdmap 后,它会转换为 active 状态。此后,它有权执行其业务。但是 OSD 服务可能会因各种原因而完全停止或挂起。例如,OSD 服务可以由管理员手动停止,或者在 osdmap 中标记为 stop。或者如果它的任何 IP 地址与 osdmap 中配置的对应 IP 地址不匹配,如果它认为自己是健康的,它会转换为 preboot

prestop(预停止)

OSD 在请求 stop 时无条件转换为 prestop。但在告别之前,它会尝试通过发送 MOSDMarkMeDown 来获取 monitor 的确认,并等待更新的 osdmap 或另一条 MOSDMarkMeDown 消息的响应。

由 Ceph 基金会为您呈现

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