找回密码
 注册
查看: 3118|回复: 0

ceph 纠删码

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2021-7-5 15:01:40 | 显示全部楼层 |阅读模式
纠删码存储池 REPORT DOCUMENTATION BUG#EDIT SOURCE$ ~; `8 A3 l" l1 v
13.1 纠删码存储池的先决条件
2 h/ ~# ]+ J1 h$ }" n! g13.2 创建示例纠删码存储池
1 m3 [7 s4 \, A+ J  f7 V13.3 纠删码配置1 V: k+ [1 G$ ^" {( p9 }8 @
13.4 含 RADOS 块设备的纠删码存储池
" A8 b$ y6 b9 T# ~1 mCeph 提供了一种在存储池中正常复制数据的替代方案,称为纠删存储池或纠删码存储池。纠删码存储池不能提供副本存储池的所有功能(例如,它们无法存储 RBD 存储池的元数据),但其所需的原始存储空间更少。一个能够存储 1 TB 数据的默认纠删码存储池需要 1.5 TB 的原始存储空间,以应对发生单个磁盘故障的情况。从这方面而言,纠删码存储池优于副本存储池,因为后者需要 2 TB 的原始存储空间才能实现相同目的。7 N) d  Q- k( {& u/ O
有关纠删码的背景信息,请参见 https://en.wikipedia.org/wiki/Erasure_code; o) D& n0 o9 j5 w' Z; ^
注意注意0 t7 O  b* }' A( \9 F
使用 FileStore 时,除非已配置缓存层,否则无法通过 RBD 接口访问纠删码存储池。请参见第 14.5 节 “纠删码存储池和缓存分层”了解更多详细信息,或使用默认 BlueStore(请参见第 1.4 节 “BlueStore”)。
/ n' ?0 T- X% V3 ~0 n$ @) g' y3 v5 w13.1 纠删码存储池的先决条件 REPORT DOCUMENTATION BUG#EDIT SOURCE, {- g" R6 ?2 {7 r0 {: c
要使用纠删码,您需要:
" T/ k, h" H% u! {- p在 CRUSH 索引中定义纠删码规则。
8 \2 R( a' M: h定义指定要使用的编码算法的纠删码配置。. d1 h2 n5 ~9 s& |# s
创建使用上述规则和配置的存储池。$ g$ j3 E  Q) o" p
请记住,一旦创建好存储池且存储池中包含数据,便无法更改配置和配置中的详细信息。
1 @% k6 P# f6 q6 S确保纠删码存储池的 CRUSH 规则对 step 使用 indep。有关详细信息,请参见第 9.3.2 节 “firstn 和 indep”。
+ i% z' @" C) A( x" j# q' B" Z13.2 创建示例纠删码存储池 REPORT DOCUMENTATION BUG#EDIT SOURCE
/ Z) g* l# T# c; x最简单的纠删码存储池相当于 RAID5,至少需要三个主机。以下过程介绍如何创建用于测试的存储池。( m5 G( ~" S1 ~" G5 a
命令 ceph osd pool create 用于创建类型为纠删的存储池。12 表示归置组的数量。使用默认参数时,该存储池能够处理一个 OSD 的故障。
- z. u7 ]. I" D1 ^ceph osd pool create ecpool 12 12 erasure, ]+ p% L: F, r( X" `  C
pool 'ecpool' created
" I" D3 W8 E, b6 l/ V: d% m/ [COPY CODE
8 ^. g; U- w! |% T字符串 ABCDEFGHI 将写入名为 NYAN 的对象。
# o4 M* c+ {0 ]; f# X4 o* i( Jecho ABCDEFGHI | rados --pool ecpool put NYAN -
% _% c3 m) i# `- ]3 E+ {COPY CODE- N/ Z7 Z* B5 q% }1 Z
为了进行测试,现在可以禁用 OSD,例如,断开其网络连接。
9 q* _, k& F3 {! F, `3 {; b% m5 J要测试该存储池是否可以处理多台设备发生故障的情况,可以使用 rados 命令来访问文件的内容。
! \) h/ s3 p; M8 U4 Mrados --pool ecpool get NYAN -' h8 W% ?9 V4 ~1 S% l8 g4 ~
ABCDEFGHI
- f9 v5 v0 K8 Z# U' E: v! u- N+ C$ w# wCOPY CODE
( I- W$ f+ C* ^' y% _) \1 K/ K13.3 纠删码配置 REPORT DOCUMENTATION BUG#EDIT SOURCE* t# q2 r" d" i
调用 ceph osd pool create 命令来创建纠删码存储池时,除非指定了其他配置,否则会使用默认的配置。配置定义数据冗余。要进行这种定义,可以设置随意命名为 k 和 m 的两个参数。k 和 m 定义要将数据片段拆分成多少个块,以及要创建多少个编码块。然后,冗余块将存储在不同的 OSD 上。( }' O& h. I: @% D* g5 _
纠删池配置所需的定义:
/ L1 P. V" Q/ y/ m$ P/ q0 q) Ichunk
& O7 `, B3 K* s  H  W' g2 s如果调用该编码函数,它会返回相同大小的块:可串联起来以重构造原始对象的数据块,以及可用于重构建丢失的块的编码块。6 F+ q; M2 z: S. Z1 V; }) P! Q
k" x3 U* r$ e7 v! C9 ?% ^
数据块的数量,即要将原始对象分割成的块数量。例如,如果 k = 2,则会将一个 10 kB 对象分割成各为 5 kB 的 k 个对象。纠删码存储池的默认 min_size 为 k + 1。不过,我们建议将 min_size 设置为 k + 2 或更大的值,以防丢失写入和数据。! r9 h. X: J% c4 y" P
m6 O& [, |' r+ ^  s
编码块的数量,即编码函数计算的额外块的数量。如果有 2 个编码块,则表示可以移出 2 个 OSD,而不会丢失数据。
, w3 R, Z* J1 Qcrush-failure-domain2 y0 \) g& x: ^
定义要将块分布到的设备。其值需要设置为某个存储桶类型。有关所有的存储桶类型,请参见第 9.2 节 “存储桶”。如果故障域为机柜,则会将块存储在不同的机柜上,以提高机柜发生故障时的恢复能力。请记住,这需要 k+m 个机柜。8 g) u# r/ I. a5 C. w
使用第 13.2 节 “创建示例纠删码存储池”中所用的默认纠删码配置时,如果单个 OSD 或主机发生故障,将不会丢失集群数据。因此,要存储 1 TB 数据,需要额外提供 0.5 TB 原始存储空间。也就是说,需要 1.5 TB 原始存储空间才能存储 1 TB 的数据(因为 k=2、m=1)。这相当于常见的 RAID 5 配置。作为对比,副本存储池需要 2 TB 原始存储空间才能存储 1 TB 数据。
7 k9 j5 Z. ?, m$ o可使用以下命令显示默认配置的设置:! E1 m2 f% x! Q1 f: N7 l  ^, q0 s( J
ceph osd erasure-code-profile get default, V; s5 o; N  W. w. ^9 N
directory=.libs4 S4 R7 l4 B7 c0 A
k=2% w  P* e5 J- @5 _  `3 M- k
m=1
7 j- v$ ~. K3 [( B2 G5 Mplugin=jerasure
4 Q6 `9 u. N; o6 H6 hcrush-failure-domain=host8 P9 o0 V  {. u! P5 V# ]
technique=reed_sol_van
7 Z) X, y4 D9 q5 Q. ~COPY CODE5 `* X' G; I$ U* N- U, Y; W
选择适当的配置非常重要,因为在创建存储池后便无法修改配置。需要创建使用不同配置的新存储池,并将之前的存储池中的所有对象移到新存储池(请参见第 11.3 节 “存储池迁移”)。
7 R( b5 z8 i7 l7 w- B0 }最重要的几个配置参数是 k、m 和 crush-failure-domain,因为它们定义存储开销和数据持久性。例如,如果在两个机柜发生故障并且存储开销达到 66% 的情况下,必须能够维系所需的体系结构,可定义以下配置。请注意,这仅适用于拥有“rack”类型的存储桶的 CRUSH 索引:
7 V9 |' [6 a( w% _# _  z$ F- C5 Cceph osd erasure-code-profile set myprofile \/ T. h% x9 h1 x! W1 ~  ^/ C
   k=3 \
  H7 t/ Z; h) b' ?' a* q, }7 k7 F+ l! ~   m=2 \$ }" I" R% [8 j
   crush-failure-domain=rack4 x6 Q) b4 q+ L( F! R
COPY CODE/ l) O2 M2 L$ V; m. f( o* z
对于此新配置,可以重复第 13.2 节 “创建示例纠删码存储池”中的示例:: S9 g. @( Y' D( O
ceph osd pool create ecpool 12 12 erasure myprofile, G; Y! E% `6 M5 }6 t4 ]0 u
echo ABCDEFGHI | rados --pool ecpool put NYAN -
2 P1 E% x+ K% H  u1 m$ Lrados --pool ecpool get NYAN -
8 x; ~  }2 q/ wABCDEFGHI; i* e' f) L! n  J4 a8 p0 D) r
COPY CODE* P1 D' d+ L0 B
NYAN 对象将分割成三个 (k=3),并将创建两个额外的块 (m=2)。m 值定义可以同时丢失多少个 OSD 而不会丢失任何数据。crush-failure-domain==rack 将创建一个 CRUSH 规则组,用于确保不会将两个块存储在同一个机柜中。
  p& ^0 H1 M$ g4 \
* u- j) }- p# D' e* r13.3.1 创建新纠删码配置 REPORT DOCUMENTATION BUG#EDIT SOURCE
' C$ ?  N- v$ i& ^以下命令可创建新纠删码配置:% S3 Z6 h' m: c# c' `! d
ceph osd erasure-code-profile set NAME \
( H/ K6 \  h( Z) X9 h) ?5 g, @ directory=DIRECTORY \
+ ^0 h5 ~- L$ L7 G plugin=PLUGIN \7 o6 i7 }- v6 C! y
stripe_unit=STRIPE_UNIT \
+ {. s/ s% M( L. z+ B: m2 K KEY=VALUE ... \
7 x1 V+ K$ Y7 y# p --force% Y& D+ E. Q6 r% f+ ^4 q
COPY CODE
% X) S( V- r8 TDIRECTORY
( Q) O$ ?. c5 j: L1 N, z; q) d6 J可选。设置从中加载纠删码插件的目录名称。默认为 /usr/lib/ceph/erasure-code。8 l+ D5 a) Z1 l% m" O' y
PLUGIN
2 L2 K# T0 a$ Y1 Q1 y可选。使用纠删码插件可计算编码块和恢复缺失的块。可用的插件有“jerasure”、“isa”、“lrc”和“shes”。默认为“jerasure”。8 T5 j$ f6 u% W' B) D
STRIPE_UNIT' \! n7 E0 q$ v7 Y8 n& ^+ H" @
可选。数据块中每个条带的数据量。例如,如果配置拥有 2 个数据块且 stripe_unit 等于 4K,则会将范围 0-4K 的数据置于块 0 中,将 4K-8K 置于块 1 中,然后再将 8K-12K 置于块 0 中。需要有多个 4K 才能实现最佳性能。默认值取自创建存储池时的 Monitor 配置选项 osd_pool_erasure_code_stripe_unit。使用此配置的存储池的“stripe_width”等于数据块的数量乘以此“stripe_unit”。
! x5 J( n$ j: k; G9 P# Y1 NKEY=VALUE
' k1 N( n$ T) H- [$ `' R7 I& O专用于选定纠删码插件的选项键/值对。
3 r, s: B4 H* u& R--force6 i* U5 R- W! d9 u2 s$ o( f
可选。覆盖名称相同的现有配置,并允许设置不按 4K 对齐的 stripe_unit。4 T3 M' G- a) N* l* l6 x+ c
13.3.2 删除纠删码配置 REPORT DOCUMENTATION BUG#EDIT SOURCE. G0 U8 Y" z7 ^4 _+ o! N) |
以下命令可按 NAME 所标识的纠删码配置删除相应配置:
& @! O) Y! m  D4 Q# u: y4 U1 T2 Tceph osd erasure-code-profile rm NAME
  `7 _( \" K* f9 vCOPY CODE
' c' V# N" P* i重要重要  Q; T( U& y2 j" ?
如果某个存储池引用了该配置,则删除将会失败。$ {; ~3 }' ]5 t1 \0 }! S
13.3.3 显示纠删码配置的详细信息 REPORT DOCUMENTATION BUG#EDIT SOURCE
# l# U$ ^" |( x4 e4 E$ A/ M3 a以下命令可按 NAME 所标识的纠删码配置显示其详细信息:/ p+ d+ d0 |  {1 Q
ceph osd erasure-code-profile get NAME4 U1 A0 q  |* `/ [
COPY CODE
& V$ l6 K2 i) h; |: B0 |13.3.4 列出纠删码配置 REPORT DOCUMENTATION BUG#EDIT SOURCE' h3 X; J5 g. g- @" M
以下命令可列出所有纠删码配置的名称:
" N* w# p: m* B) j& \6 Iceph osd erasure-code-profile ls7 U" H4 B+ G; D7 F" D
COPY CODE
7 |6 B4 w1 z+ A9 T13.4 含 RADOS 块设备的纠删码存储池 REPORT DOCUMENTATION BUG#EDIT SOURCE
/ c/ D7 A) Y0 a4 i要将 EC 池标记为 RBD 池,请对其进行相应标记:
5 @/ z3 A8 w+ v2 @0 ?ceph osd pool application enable rbd ec_pool_name
" J- D2 U2 g& z. O/ ^COPY CODE
0 y5 ^( R4 R6 O1 {' i* o4 `; RRBD 可在 EC 池中存储映像数据。但是,映像报头和元数据仍需要存储在副本存储池中。为此,假设您的存储池命名为“rbd”:
! D3 B& T+ a1 j+ Frbd create rbd/image_name --size 1T --data-pool ec_pool_name
, u# Q" o3 W. D  t. ?COPY CODE
* [* ~6 p% R2 D您可以像使用任何其他映像一样正常使用该映像,只不过所有数据都将存储在 ec_pool_name 池而非“rbd”池中。+ M8 Z! b! @% w- x+ u% w8 J
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 00:08 , Processed in 0.014575 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表