在 ceph 中列出对象的工作原理

How listing objects in ceph works

我知道 ceph 中的对象位置是使用对象的哈希值从集群映射中计算出来的。另一方面,我们有这样的命令来列出对象:

rados -p POOL_NAME ls

这个命令是如何工作的?对象名称是否存储在某处?如果是,是否都在监控数据库中?当我们 运行 这个命令时 ceph 会发生什么?

监视器将 pool -> PG 映射保存在他们的数据库中,当您 运行 rados -p POOL_NAME ls 时,它会要求监视器获取与该池关联的 PG。每个 PG 都有一个 up/acting 集合,用于保留该 PG 的 运行ning OSD。之后它会要求主 OSD 上的 PG 在其中 return 个对象。 您可以在源代码中找到更多信息:https://github.com/ceph/ceph/blob/master/src/tools/rados/rados.cc#L2399