纠删码配置

纠删码由配置定义,在创建纠删码存储池及其相关的 CRUSH 规则时用到。

创建 Ceph 集群时初始化的、名为 default 的纠删码配置可提供与两副本相同的冗余水平,却能节省 25% 的磁盘空间。在此配置中 k=2m=1 ,其含义为数据分布于 3 个 OSD ( k+m==3 )且允许一个失效。

为了在不增加原始存储空间需求的前提下提升冗余性,你可以新建配置。例如,一个 k=10m=4 的配置可容忍 4 个 OSD 失效,它会把一对象分布到 14 个( k+m=14 ) OSD 上。此对象先被分割为 10 块(若对象为 10MB ,那每块就是 1MB )、并计算出 4 个用于恢复的编码块(各编码块尺寸等于数据块,即 1MB );这样,原始空间仅多占用 10% 就可容忍 4 个 OSD 同时失效、且不丢失数据。

osd erasure-code-profile set

要新建纠删码配置:

ceph osd erasure-code-profile set {name} \
     [{directory=directory}] \
     [{plugin=plugin}] \
     [{stripe_unit=stripe_unit}] \
     [{key=value} ...] \
     [--force]

其中:

{directory=directory}

描述

设置纠删码插件的路径,需是目录

类型

String

是否必需

No.

默认值

/usr/lib/ceph/erasure-code

{plugin=plugin}

描述

指定纠删码插件来计算编码块、及恢复丢失块。详见可用插件列表

类型

String

是否必需

No.

默认值

jerasure

{stripe_unit=stripe_unit}

描述

每一个条带中、一个数据块的数据量。例如,在一个配置中,数据块为 2 且 stripe_unit=4K ,数据进来时会把 0-4K 放入块 0 , 4K-8K 放入块 1 ;然后 8K-12K 又是块 0 。为实现最佳性能,这里应该设置成 4K 的倍数。默认值是在存储池创建时从监视器配置选项 osd_pool_erasure_code_stripe_unit 获取的。一个使用着这个配置的存储池,其 stripe_width 值(条带宽度)就是数据块的数量乘以这里的 stripe_unit 值。

类型

String

是否必需

No.

{key=value}

描述

纠删码插件所定义的键/值对含义。

类型

String

是否必需

No.

--force

描述

覆盖同名配置,还能设置没有按 4K 对齐的 stripe_unit 。

类型

String

是否必需

No.

osd erasure-code-profile rm

要删除纠删码配置:

ceph osd erasure-code-profile rm {name}

若此配置还被某个存储池使用着,则删除会失败。

osd erasure-code-profile get

要查看一纠删码配置:

ceph osd erasure-code-profile get {name}

osd erasure-code-profile ls

列出所有纠删码配置:

ceph osd erasure-code-profile ls