2025年2月2日星期日

erasure-code-profile 纠删码(Erasure Code)存储池介绍

 


在 Ceph 中,erasure-code-profile 是用于定义纠删码(Erasure Code)存储池的配置文件。纠删码是一种数据保护技术,通过将数据分割成多个片段并生成冗余片段,可以在节省存储空间的同时提供数据冗余和高可用性。

以下是对 erasure-code-profile 的详细介绍,包括其配置参数、使用方法以及示例。


1. 纠删码简介

纠删码通过将数据分割成 k 个数据片段,并生成 m 个冗余片段,总共存储 k + m 个片段。当部分片段丢失时,可以通过剩余的片段恢复原始数据。

  • 优点

    • 节省存储空间(相比副本机制)。

    • 提供数据冗余和高可用性。

  • 缺点

    • 计算开销较大,可能影响性能。

    • 需要至少 k 个片段才能恢复数据。


2. erasure-code-profile 配置参数

erasure-code-profile 的主要配置参数包括:

参数名描述
k数据片段的数量。
m冗余片段的数量。
plugin使用的纠删码插件,如 jerasureisalrc 等。
crush-failure-domain故障域(如 hostrack),用于控制数据片段的分布。
crush-device-class设备类型(如 hddssd),用于指定存储设备的类型。
technique纠删码算法(仅适用于 jerasure 插件),如 reed_sol_vancauchy
directory插件库的路径(可选)。
ruleset-failure-domain故障域(旧版本参数,建议使用 crush-failure-domain)。

3. 创建 erasure-code-profile

使用以下命令创建纠删码配置文件:

bash
复制
ceph osd erasure-code-profile set <profile-name> \
    [<parameter>=<value> ...]

示例 1:基本配置

创建一个名为 myprofile 的纠删码配置文件,k=4m=2,使用 jerasure 插件:

bash
复制
ceph osd erasure-code-profile set myprofile \
    k=4 m=2 \
    plugin=jerasure \
    crush-failure-domain=host

示例 2:指定算法

创建一个使用 cauchy 算法的纠删码配置文件:

bash
复制
ceph osd erasure-code-profile set myprofile \
    k=4 m=2 \
    plugin=jerasure \
    technique=cauchy \
    crush-failure-domain=host

4. 查看 erasure-code-profile

可以使用以下命令查看已创建的纠删码配置文件:

bash
复制
ceph osd erasure-code-profile ls

查看特定配置文件的详细信息:

bash
复制
ceph osd erasure-code-profile get <profile-name>

5. 使用 erasure-code-profile 创建存储池

创建纠删码存储池时,需要指定纠删码配置文件。

语法

bash
复制
ceph osd pool create <pool-name> <pg-num> <pgp-num> erasure <profile-name>

示例

创建一个名为 mypool 的纠删码存储池,使用 myprofile 配置文件:

bash
复制
ceph osd pool create mypool 128 128 erasure myprofile

6. 修改 erasure-code-profile

如果需要修改纠删码配置文件,可以先删除旧配置文件,然后重新创建。

删除配置文件

bash
复制
ceph osd erasure-code-profile rm <profile-name>

重新创建配置文件

按照上述步骤重新创建。


7. 纠删码插件

Ceph 支持多种纠删码插件,常见的有:

Jerasure

  • 特点:性能较好,支持多种算法。

  • 算法reed_sol_vancauchy 等。

ISA

  • 特点:基于 Intel ISA-L 库,性能优化。

  • 适用场景:适用于 Intel 硬件。

LRC(Locally Repairable Code)

  • 特点:支持本地修复,减少修复时的数据读取量。

  • 适用场景:大规模集群。


8. 示例:完整流程

步骤 1:创建纠删码配置文件

bash
复制
ceph osd erasure-code-profile set myprofile \
    k=4 m=2 \
    plugin=jerasure \
    technique=cauchy \
    crush-failure-domain=host

步骤 2:创建纠删码存储池

bash
复制
ceph osd pool create mypool 128 128 erasure myprofile

步骤 3:验证存储池

bash
复制
ceph osd pool ls detail

9. 注意事项

  • 性能影响:纠删码的计算开销较大,可能影响性能,建议在性能要求不高的场景中使用。

  • 数据恢复:确保 k 和 m 的值合理,以平衡存储空间和数据冗余。

  • 故障域:合理设置故障域,确保数据片段分布在不同的故障域中。


总结

erasure-code-profile 是 Ceph 中用于定义纠删码存储池的核心配置。通过合理配置 km、故障域和插件参数,可以在节省存储空间的同时提供数据冗余和高可用性。熟练掌握纠删码的配置和使用,是优化 Ceph 集群存储效率的关键。




















在 Ceph 中,crush rule 和 erasure-code-profile 是两个独立但相关的概念。crush rule 用于定义数据在集群中的分布方式,而 erasure-code-profile 用于定义纠删码的编码参数。要将两者结合起来使用,需要在创建纠删码存储池时指定 erasure-code-profile,并自动生成或关联一个 crush rule

以下是详细说明如何在 Ceph 中调用纠删码配置文件并关联 crush rule


1. 创建纠删码配置文件

首先,创建一个纠删码配置文件(erasure-code-profile)。这个配置文件定义了纠删码的参数,如 k(数据块数量)、m(校验块数量)、插件类型(如 jerasure)等。

示例:创建纠删码配置文件

bash
复制
ceph osd erasure-code-profile set myprofile \
    k=4 m=2 \
    plugin=jerasure \
    technique=cauchy \
    crush-failure-domain=host
  • k=4:数据块数量为 4。

  • m=2:校验块数量为 2。

  • plugin=jerasure:使用 jerasure 插件。

  • technique=cauchy:使用 cauchy 算法。

  • crush-failure-domain=host:数据块分布在不同的主机上。


2. 创建纠删码存储池

在创建纠删码存储池时,Ceph 会自动生成一个与纠删码配置文件关联的 crush rule

语法

bash
复制
ceph osd pool create <pool-name> <pg-num> <pgp-num> erasure <profile-name>

示例:创建纠删码存储池

bash
复制
ceph osd pool create mypool 128 128 erasure myprofile
  • mypool:存储池名称。

  • 128:PG(Placement Group)数量。

  • 128:PGP(Placement Group for Placement)数量。

  • erasure:指定存储池类型为纠删码。

  • myprofile:使用的纠删码配置文件。


3. 查看自动生成的 CRUSH Rule

创建纠删码存储池后,Ceph 会自动生成一个与纠删码配置文件关联的 crush rule。可以使用以下命令查看生成的规则:

查看所有 CRUSH Rule

bash
复制
ceph osd crush rule ls

查看特定 Rule 的详细信息

bash
复制
ceph osd crush rule dump <rule-name>

示例输出

json
复制
{
    "rule_id": 1,
    "rule_name": "mypool",
    "type": 3,
    "steps": [
        {
            "op": "take",
            "item": -1,
            "item_name": "default"
        },
        {
            "op": "chooseleaf",
            "num": 0,
            "type": "host"
        },
        {
            "op": "emit"
        }
    ]
}
  • rule_name:规则的名称,通常与存储池名称相同。

  • type:规则类型,3 表示纠删码规则。

  • steps:定义了数据的分布方式,如 chooseleaf 表示数据块分布在不同的故障域(如 host)中。


4. 手动创建纠删码 CRUSH Rule

如果需要手动创建纠删码 CRUSH Rule,可以使用以下命令:

语法

bash
复制
ceph osd crush rule create-erasure <rule-name> <profile-name> <root>

参数说明

  • <rule-name>:规则的名称。

  • <profile-name>:纠删码配置文件的名称。

  • <root>:CRUSH 层次结构的根节点(通常是 default)。

示例:手动创建纠删码 CRUSH Rule

bash
复制
ceph osd crush rule create-erasure myrule myprofile default

5. 修改纠删码 CRUSH Rule

如果需要修改纠删码 CRUSH Rule,通常需要先删除旧规则,然后重新创建。

删除规则

bash
复制
ceph osd crush rule rm <rule-name>

重新创建规则

按照上述步骤重新创建。


6. 使用纠删码 CRUSH Rule

创建纠删码存储池时,Ceph 会自动使用与纠删码配置文件关联的 CRUSH Rule。如果需要将现有存储池切换到纠删码规则,可以使用以下命令:

语法

bash
复制
ceph osd pool set <pool-name> crush_rule <rule-name>

示例:切换存储池的 CRUSH Rule

bash
复制
ceph osd pool set mypool crush_rule myrule

7. 总结

在 Ceph 中,纠删码存储池的创建会自动生成一个与纠删码配置文件关联的 CRUSH Rule。通过以下步骤可以实现两者的结合:

  1. 创建纠删码配置文件(erasure-code-profile)。

  2. 创建纠删码存储池,Ceph 会自动生成 CRUSH Rule。

  3. 如果需要,可以手动创建或修改 CRUSH Rule。

  4. 使用 ceph osd pool set 命令将存储池与 CRUSH Rule 关联。

通过合理配置纠删码和 CRUSH Rule,可以在 Ceph 集群中实现高效的数据分布和存储。





没有评论:

发表评论

youtube的dns屏蔽方法

  216.239.38.120 是 Google 提供的一个特殊 DNS 服务器,用于强制开启 YouTube 受限模式(Restricted Mode) 。 如果你想在家里强制 YouTube 进入受限模式,可以在 路由器的 DNS 设置 中配置以下 DNS 服务器: D...