【发布时间】:2022-01-11 10:26:02
【问题描述】:
我们的团队目前正在决定是否对 cephfs 目录实施快照,从而试图了解快照对集群造成的影响和性能问题。
我们主要关心的是“当数据写入快照下的文件时,集群会受到怎样的影响?”。我们能够发现 Ceph 使用 Copy-on-write 机制来克隆快照,所以我的问题是,例如,如果我在快照下有一个 1GB 的文件,并且我将另外 10MB 的数据附加到文件中,那么新写入会复制多少数据?
我的理解是,由于 Ceph 将文件条带化为多个对象,因此只有包含最后一个 stripe_unit 的对象(假设它没有完全填充)将被复制并将新数据添加到其中,然后 Ceph 以某种方式设法包含当我请求当前版本文件时新对象,当我从快照中请求文件时将包含旧对象。复制的数据 = O(10MB),我的意思是按照数据写入的顺序,以及一些元数据更改。
或者由于 Ceph 现在使用 Bluestore 作为存储层,它是否有更好的优化(与上述情况相比),比如在编辑与最后一个 stripe_unit 对应的对象时,ceph 只会将新数据写入磁盘和编辑对象的元数据以包含新数据的位置,并维护基于快照的元数据版本,以便为我们提供以前时间点的文件内容。复制/写入的数据 = 10MB 和更多元数据更改(与上述情况相比)。
或者是 Ceph 将复制整个文件并编辑文件的新副本的情况,即复制的数据为 1GB + 10MB。我假设情况并非如此,因为它显然不是大文件的最佳选择。
PS:非常感谢任何有关测量快照对集群的影响的资源以及任何解释 Ceph 快照内部结构的资源。我在互联网上进行了广泛的搜索,但找不到任何相关数据。尝试阅读代码,但你们可能会猜到它是怎么回事。
【问题讨论】:
标签: snapshot ceph cephfs cephadm librbd