Ceph 擦除编码池支持

问题描述

Ceph 擦除编码池为复制池提供了一种替代方案,具有可比的性能,同时为相同的有效可用容量所需的原始块设备存储空间更少。

Ceph charms 和使用 Ceph 服务的 charms 目前不支持使用擦除编码池。

提议的变更

ceph-{mon,proxy} broker 将扩展以支持创建擦除编码池。broker 中存在一些代码来支持 EC 池,但从未经过测试,因此可能需要一些更新和重构。

charmhelpers 和 charms.ceph 中都存在一些现有的支持,用于支持创建擦除编码池;但是,它在很大程度上未经测试,需要在 OpenStack Charms 中启用擦除编码的工作中进行验证和更新。 现有差距包括对 EC 覆盖的支持(对于大多数 RBD 用例是必需的)以及提供 EC 池的最小大小。

Ceph 已经支持擦除编码一段时间了,但是覆盖(RBD 用例所需)直到 Luminous 才实现,因此 Ceph 的最低版本要求是 Luminous,该版本随 Ubuntu 18.04 LTS 一起发布。

Ceph 部署必须使用 Bluestore - 基于 Filestore 的部署在没有使用缓存层的情况下无法支持 RBD 用例(这在 charmed 部署中不受支持)。

消费 charms 将更新,以包含新的配置选项来支持使用 EC 池 - 这包括以下 charms

  • glance (rbd)

  • cinder-ceph (rbd)

  • nova-compute (rbd)

  • ceph-radosgw

  • ceph-iscsi (rbd)

  • ceph-fs

擦除编码 charm 选项

选项

类型

默认值

描述

pool-type

string

replicated

用于存储的 Ceph 池类型 - 有效值是 ‘replicated’ 和 ‘erasure-coded’。

ec-profile-name

string

要为 EC 池创建的 EC 配置文件的名称。如果未定义,将根据应用程序使用的池的名称生成配置文件名称。

ec-rbd-metadata-pool

string

要创建的元数据池的名称(用于 RBD 用例)。如果未定义,将根据应用程序使用的池的名称生成元数据池名称。元数据池始终是复制的(不是擦除编码的)。

ec-profile-k

int

1

EC 数据池将使用的的数据块数量。K+M 因子不应大于可用 AZ 的数量,以实现平衡。

ec-profile-m

int

2

EC 数据池将使用的编码块数量。K+M 因子不应大于可用 AZ 的数量,以实现平衡。

ec-profile-locality

int

(lrc 插件 - l) 将编码和数据块分组为大小为 l 的集合。例如,对于 k=4 和 m=2,当 l=3 时,创建两个包含三个元素的组。每个集合可以在不读取其他集合中的块的情况下进行恢复。请注意,使用 lrc 插件会比 isa 或 jerasure 产生更多的原始存储空间,以降低恢复操作的成本。

ec-profile-crush-locality

string

(lrc 插件) 每个由 l 定义的块集合将存储在 CRUSH bucket 中的类型。例如,如果设置为 rack,则每个包含 l 个块的组将放置在不同的机架中。它用于创建 CRUSH 规则步骤,例如 ‘step choose rack’。如果未设置,则不执行此类分组。

ec-profile-durability-estimator

int

(shec 插件 - c) 每个数据块都包含在其计算范围内的奇偶校验块的数量。该数字用作耐久性估计器。例如,如果 c=2,则可以使 2 个 OSD 宕机而不会丢失数据。

ec-profile-helper-chunks

int

(clay 插件 - d) 在恢复单个块期间请求发送数据的 OSD 数量。需要选择 d,使得 k+1 <= d <= k+m-1。d 越大,节省越多。

ec-profile-scalar-mds

string

(clay 插件) 指定用作分层构建中的构建块的插件。它可以是以下之一:jerasure、isa 或 shec。

ec-profile-plugin

string

jerasure

用于此应用程序池的 EC 插件。可用的插件有:jerasure、lrc、isa、shec、clay。

ec-profile-technique

string

reed_sol_van

此应用程序池使用的 EC 配置技术 - 将根据通过 ec-profile-plugin 配置的插件进行验证。支持的技术有 ‘reed_sol_van’、‘reed_sol_r6_op’、‘cauchy_orig’、‘cauchy_good’、‘liber8tion’ 用于 jerasure,‘reed_sol_van’、‘cauchy’ 用于 isa,以及 ‘single’、‘multiple’ 用于 shec。

ec-profile-device-class

string

用于擦除配置文件的放置组的 CRUSH 映射中的设备类 - 有效值:ssd、hdd 或 nvme(或保持未设置以不使用设备类)。

RBD 用例需要一个元数据池,该元数据池始终配置为复制池,以及用于卷数据存储的基础 EC 编码池。消费应用程序配置为使用元数据池,而数据池通过 ‘ceph.conf’ 为特定应用程序配置 - 例如

rbd default data pool = glance

由于 OpenStack 服务指定到应用程序特定 ceph.conf 配置文件中的完整路径,因此默认数据池配置不需要限定到特定的客户端标识符。

reactive 和 operator framework charms 的 ceph-mon 接口实现将更新,以包含对 EC 的支持。

OpenStack 版本支持将在本规范的实施过程中进行验证。

此功能不依赖于 Juju 的特定版本。

备选方案

可以使用 ceph-mon charm 提供的操作在部署后创建 EC 池。但是,除了 fork 消费 charms 之外,目前没有办法向 Ceph 和 OpenStack 服务提供使用 EC 池的 RBD 用例所需的配置。

实现

负责人

主要负责人

  • james-page

  • gnuoy

Gerrit Topic

对于与此规范相关的所有补丁,请使用 Gerrit 主题 “ceph-erasure-coding”。

git-review -t ceph-erasure-coding

工作项

Ceph 核心 EC 启用

  • charms.ceph:审查并添加 RBD EC 池用法所需的特性。

  • charmhelpers:审查并添加 RBD EC 池用法所需的特性。

  • ceph-mon:同步 charms.ceph + charmhelpers 的更新,并更新 broker 代码库以支持任何必需的更改。

  • ceph-proxy:同步 charms.ceph + charmhelpers 的更新,并更新 broker 代码库以支持任何必需的更改。

接口

  • charm-interface-ceph-client:更新以添加对 EC 池和配置文件创建的支持。

  • ops-interface-ceph-client:更新以添加对 EC 池和配置文件创建的支持。

  • charm-interface-ceph-mds:更新以添加对 EC 池和配置文件创建的支持。

  • charm-interface-ceph-rbd-mirror:根据对 ceph rbd-mirror 中 EC 支持的支持,进行审查。

OpenStack RBD 用例

  • glance:添加所需的配置选项支持和对 ceph broker 交互的更新,以支持 EC 池。添加功能测试,以覆盖至少受支持的最早和最新版本,作为 recheck-full 预提交测试的一部分。

  • cinder-ceph:添加所需的配置选项支持和对 ceph broker 交互的更新,以支持 EC 池。添加功能测试,以覆盖至少受支持的最早和最新版本,作为 recheck-full 预提交测试的一部分。

  • nova-compute:添加所需的配置选项支持和对 ceph broker 交互的更新,以支持 EC 池。添加功能测试,以覆盖至少受支持的最早和最新版本,作为 recheck-full 预提交测试的一部分。

Ceph RBD 用例

  • ceph-iscsi:添加所需的配置选项支持和对 ceph broker 交互的更新,以支持 EC 池。添加功能测试,以覆盖至少受支持的最早和最新版本,作为 recheck-full 预提交测试的一部分。

  • ceph-rbd-mirror:验证 EC 池是否不支持 rbd-mirror,并在发布说明和 charm 部署指南中记录。

其他用例

  • ceph-radosgw:添加所需的配置选项支持和对 ceph broker 交互的更新,以支持 EC 池。添加功能测试,以覆盖至少受支持的最早和最新版本,作为 recheck-full 预提交测试的一部分。除了 .data 池之外,所有池都必须继续是复制池。

  • ceph-radosgw:验证对多站点 RADOS gateway 复制的支持。

  • ceph-fs:添加所需的配置选项支持和对 ceph broker 交互的更新,以支持 EC 池。添加功能测试,以覆盖至少受支持的最早和最新版本,作为 recheck-full 预提交测试的一部分。

仓库

不需要新的 git 仓库。

文档

charm 部署指南将更新,以详细说明使用带有 Ceph 擦除编码池的 OpenStack Charms 的方法。这将包括有关如何在 Ceph 部署中使用 EC 池构建区域的详细信息,因为要求可能与复制池完全不同。

安全性

使用此功能不会暴露额外的安全攻击面。

测试

测试 EC 池不需要特殊的硬件。

将向消费 charms 添加功能测试,以验证 OpenStack 和 Ceph 用例中 EC 池的创建和使用。

将作为本规范的一部分对 EC 池进行性能测试,以基准测试 EC 池配置与复制池配置。

依赖项

不依赖于其他规范。