注意
本文档适用于 Ceph 开发版本。
OSD
概念
- 消息传递者
查看 src/msg/Messenger.h
处理代表 OSD 发送和接收消息。OSD 使用两个消息传递者:
cluster_messenger - 处理与其他 OSD 的流量,监控
client_messenger - 处理客户端流量
这种划分允许 OSD 使用不同的接口配置客户端和集群流量。
- 消息分发器
查看 src/msg/Dispatcher.h
OSD 实现了 Dispatcher 接口。特别值得注意的是 ms_dispatch,它是通过客户端或集群消息传递者接收消息的入口点。由于有两个消息传递者,ms_dispatch 可能从至少两个线程被调用。在 ms_dispatch 期间始终持有 osd_lock。
- 工作队列
查看 src/common/WorkQueue.h
WorkQueue 类抽象了为异步执行排队独立任务的过程。每个 OSD 进程都包含用于不同任务的工作队列:
OpWQ: 处理操作(来自客户端)和子操作(来自其他 OSD)。在 op_tp 线程池中运行。
PeeringWQ: 处理对等任务和 PG 地图推进
CommandWQ: 处理命令(PG 查询等)
RecoveryWQ: 处理恢复任务。
SnapTrimWQ: 处理快照修剪
ScrubWQ: 处理主要清理路径
ScrubFinalizeWQ: 处理主要清理完成
RepScrubWQ: 处理副本清理路径
RemoveWQ: 异步删除旧的 PG 目录
- 线程池
查看 src/common/WorkQueue.h
有 4 个 OSD 线程池:
op_tp: 处理操作和子操作
recovery_tp: 处理恢复任务
disk_tp: 处理磁盘密集型任务
command_tp: 处理命令
- OSDMap
查看 src/osd/OSDMap.h
破碎算法有两个输入:集群的图像,其中包含关于哪些节点是上下和进出状态的信息,以及要放置的 pgid。前者由 OSDMap 封装。纪元(epoch_t) 编号的。这些地图在 OSD 内部作为 std::tr1::shared_ptr<const OSDMap> 传递。
查看 MapHandling
- PG
查看 src/osd/PG.* src/osd/PrimaryLogPG.*
rados 中的对象被哈希到PGs和PGs通过破碎算法放置到 OSD 上。PG 结构负责处理特定PG的请求,以及维护相关元数据和控制恢复。
- OSDService
查看 src/osd/OSD.cc OSDService
OSDService 作为 PG 线程和 OSD 状态之间的中介,允许 PG 使用 OSD 服务(如工作队列和消息传递者)执行操作。这仍然是一个进行中的工作。未来的清理工作将集中在将此类状态完全从 OSD 移动到 OSDService。
概述
查看 src/ceph_osd.cc
OSD 进程代表破碎层次结构中的一个叶设备。可能每台物理机器有一个 OSD 进程,或者如果用户配置每个磁盘一个 OSD 实例,则可能有一个以上的 OSD 进程。
由 Ceph 基金会带给您
Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.