Ceph RBD - ceph

Ceph 是一个开源存储平台,它将数据存储在基于 RADOS 的存储集群中。它具有高度可扩展性,并且作为没有单点故障的分布式系统,非常可靠。

Ceph 为块存储和文件系统提供不同的组件。

Ceph RBD 是 Ceph 的块存储组件,它将数据和工作负载分布在 Ceph 集群中。它使用精简配置,这意味着可以过度分配资源。

术语

Ceph 使用术语“对象”来表示它存储的数据。负责存储和管理数据的守护进程是“Ceph OSD”。Ceph 的存储被划分为“池”,它们是用于存储对象的逻辑分区。它们也称为“数据池”、“存储池”或“OSD 池”。

Ceph 块设备也称为“RBD 镜像”,您可以创建这些 RBD 镜像的“快照”和“克隆”。

ceph 驱动程序在 Incus 中

注意

要使用 Ceph RBD 驱动程序,您必须将其指定为 ceph。这有点误导,因为它仅使用 Ceph RBD(块存储)功能,而不是完整的 Ceph 功能。对于内容类型为 filesystem 的存储卷(镜像、容器和自定义文件系统卷),ceph 驱动程序使用在其上具有文件系统的 Ceph RBD 镜像(请参阅 block.filesystem)。

或者,您可以使用 CephFS 驱动程序创建内容类型为 filesystem 的存储卷。

与其他存储驱动程序不同,此驱动程序不会设置存储系统,而是假设您已经安装了 Ceph 集群。

此驱动程序的行为也与其他驱动程序不同,因为它提供了远程存储。因此,根据内部网络,存储访问速度可能比本地存储慢一些。另一方面,使用远程存储在集群设置中具有很大的优势,因为所有集群成员都可以访问具有完全相同内容的相同存储池,而无需同步存储池。

ceph 驱动程序在 Incus 中使用 RBD 镜像来创建镜像,以及快照和克隆来创建实例和快照。

Incus 假设它可以完全控制 OSD 存储池。因此,您永远不要在 Incus OSD 存储池中维护任何不属于 Incus 的文件系统实体,因为 Incus 可能会删除它们。

由于 Ceph RBD 中的写时复制工作方式,在所有子级消失之前,无法删除父级 RBD 镜像。因此,Incus 会自动重命名任何已删除但仍被引用的对象。此类对象将保留 zombie_ 前缀,直到所有引用消失并且可以安全地删除该对象。

限制

ceph 驱动程序具有以下限制

在实例之间共享自定义卷

具有 内容类型 filesystem 的自定义存储卷通常可以在多个实例不同的集群成员之间共享。但是,由于 Ceph RBD 驱动程序通过在 RBD 镜像之上放置文件系统来“模拟”内容类型为 filesystem 的卷,因此自定义存储卷一次只能分配给一个实例。如果您需要共享内容类型为 filesystem 的自定义卷,请改用 CephFS 驱动程序。

在安装之间共享 OSD 存储池

不支持在多个 Incus 安装之间共享相同的 OSD 存储池。

使用类型为“erasure”的 OSD 池

要使用类型为“erasure”的 Ceph OSD 池,您必须预先创建 OSD 池。您还必须创建一个单独的类型为“replicated”的 OSD 池,该池将用于存储元数据。这是必需的,因为 Ceph RBD 不支持 omap。要指定哪个池是“擦除编码”,请将 ceph.osd.data_pool_name 配置选项设置为擦除编码池名称,并将 source 配置选项设置为复制池名称。

配置选项

以下配置选项可用于使用 ceph 驱动程序的存储池以及这些池中的存储卷。

存储池配置

类型

默认值

描述

ceph.cluster_name

字符串

ceph

要在其中创建新存储池的 Ceph 集群的名称

ceph.osd.data_pool_name

字符串

-

OSD 数据池的名称

ceph.osd.pg_num

字符串

32

OSD 存储池的放置组数量

ceph.osd.pool_name

字符串

池的名称

OSD 存储池的名称

ceph.rbd.clone_copy

布尔值

true

是否使用 RBD 轻量级克隆而不是完整的数据集复制

ceph.rbd.du

布尔值

true

是否使用 RBD du 获取已停止实例的磁盘使用数据

ceph.rbd.features

字符串

layering

要在卷上启用的 RBD 功能的逗号分隔列表

ceph.user.name

字符串

admin

创建存储池和卷时要使用的 Ceph 用户

source

字符串

-

要使用的现有 OSD 存储池

volatile.pool.pristine

字符串

true

池在创建时是否为空

提示

除了这些配置外,您还可以为存储卷配置设置默认值。请参阅 配置存储卷的默认值

存储卷配置

类型

条件

默认值

描述

block.filesystem

字符串

基于块的卷,内容类型为 filesystem

volume.block.filesystem 相同

存储卷的文件系统:btrfsext4xfs(如果未设置,则为 ext4

block.mount_options

字符串

基于块的卷,内容类型为 filesystem

volume.block.mount_options 相同

基于块的文件系统卷的挂载选项

security.shared

布尔值

自定义块卷

volume.security.sharedfalse 相同

启用跨多个实例共享卷

security.shifted

布尔值

自定义卷

volume.security.shiftedfalse 相同

启用 ID 偏移覆盖(允许多个隔离的实例附加)

security.unmapped

布尔值

自定义卷

volume.security.unmappedfalse 相同

禁用卷的 ID 映射

size

字符串

volume.size 相同

存储卷的大小/配额

snapshots.expiry

字符串

自定义卷

volume.snapshots.expiry 相同

控制何时删除快照(需要类似 1M 2H 3d 4w 5m 6y 的表达式)

snapshots.pattern

字符串

自定义卷

volume.snapshots.patternsnap%d 相同

表示快照名称的 Pongo2 模板字符串(用于计划的快照和未命名的快照) [1]

snapshots.schedule

字符串

自定义卷

volume.snapshots.schedule 相同

Cron 表达式(<minute> <hour> <dom> <month> <dow>),计划别名的逗号分隔列表(@hourly@daily@midnight@weekly@monthly@annually@yearly)或为空以禁用自动快照(默认值)