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

ceph 纠删码

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2021-7-5 15:01:40 | 显示全部楼层 |阅读模式
纠删码存储池 REPORT DOCUMENTATION BUG#EDIT SOURCE4 c& Q" L, P% n) C' I
13.1 纠删码存储池的先决条件
+ o2 O4 O# X4 O* I0 H6 d9 I13.2 创建示例纠删码存储池
4 |2 W  O  e: H* I13.3 纠删码配置" v+ t7 f& [9 F# Z
13.4 含 RADOS 块设备的纠删码存储池1 `6 b7 @: s; k1 e- L
Ceph 提供了一种在存储池中正常复制数据的替代方案,称为纠删存储池或纠删码存储池。纠删码存储池不能提供副本存储池的所有功能(例如,它们无法存储 RBD 存储池的元数据),但其所需的原始存储空间更少。一个能够存储 1 TB 数据的默认纠删码存储池需要 1.5 TB 的原始存储空间,以应对发生单个磁盘故障的情况。从这方面而言,纠删码存储池优于副本存储池,因为后者需要 2 TB 的原始存储空间才能实现相同目的。
: z& P( r( }, G0 y, L有关纠删码的背景信息,请参见 https://en.wikipedia.org/wiki/Erasure_code
' e' p% T2 S* q, {6 _$ I: G6 F注意注意2 u" T1 T3 N6 n5 M6 J9 D
使用 FileStore 时,除非已配置缓存层,否则无法通过 RBD 接口访问纠删码存储池。请参见第 14.5 节 “纠删码存储池和缓存分层”了解更多详细信息,或使用默认 BlueStore(请参见第 1.4 节 “BlueStore”)。
# e* w( W/ @) ^1 g$ b8 R13.1 纠删码存储池的先决条件 REPORT DOCUMENTATION BUG#EDIT SOURCE
( ^' }4 W, A3 `3 ]0 `4 t: K. E, {要使用纠删码,您需要:1 g, U. d+ Z0 \# H
在 CRUSH 索引中定义纠删码规则。
7 C7 g: q+ p) ^9 W9 R! b' P+ e+ G定义指定要使用的编码算法的纠删码配置。  n8 C" U: f6 k5 o/ r8 l
创建使用上述规则和配置的存储池。
+ u5 J# H! c+ J8 b1 O3 m请记住,一旦创建好存储池且存储池中包含数据,便无法更改配置和配置中的详细信息。
0 `% X; m5 z  x/ b* J6 V确保纠删码存储池的 CRUSH 规则对 step 使用 indep。有关详细信息,请参见第 9.3.2 节 “firstn 和 indep”。
* s- E" j4 m" k9 y5 Z13.2 创建示例纠删码存储池 REPORT DOCUMENTATION BUG#EDIT SOURCE
6 p( H3 o7 b- J9 m% v+ w8 W( q* p最简单的纠删码存储池相当于 RAID5,至少需要三个主机。以下过程介绍如何创建用于测试的存储池。
6 D4 @0 w0 H9 f3 z& m命令 ceph osd pool create 用于创建类型为纠删的存储池。12 表示归置组的数量。使用默认参数时,该存储池能够处理一个 OSD 的故障。+ F4 H5 z& [1 x# a- b2 |! \/ M- z
ceph osd pool create ecpool 12 12 erasure
9 ^/ ]2 W4 l- [; dpool 'ecpool' created
# T9 ?& z$ {- h; g; E( iCOPY CODE- I& ^* ^& b  @6 D0 a7 p) V
字符串 ABCDEFGHI 将写入名为 NYAN 的对象。
$ s( a  U9 x" ~' @* hecho ABCDEFGHI | rados --pool ecpool put NYAN -
# J" E2 l: l& Q" n1 G) e* WCOPY CODE
! J* W& i  o, ~0 j为了进行测试,现在可以禁用 OSD,例如,断开其网络连接。* h" S* L+ F. L# t/ G) V
要测试该存储池是否可以处理多台设备发生故障的情况,可以使用 rados 命令来访问文件的内容。$ V# l+ @4 E. J4 H3 n. A
rados --pool ecpool get NYAN -- ]2 t3 E' W( R( ]  V! T
ABCDEFGHI4 q9 J$ l' J' h9 p6 M: w
COPY CODE
) B: L7 B( J5 D+ B* {13.3 纠删码配置 REPORT DOCUMENTATION BUG#EDIT SOURCE. S& c. W9 k: \" `! G* ~* {, |
调用 ceph osd pool create 命令来创建纠删码存储池时,除非指定了其他配置,否则会使用默认的配置。配置定义数据冗余。要进行这种定义,可以设置随意命名为 k 和 m 的两个参数。k 和 m 定义要将数据片段拆分成多少个块,以及要创建多少个编码块。然后,冗余块将存储在不同的 OSD 上。/ U5 Q7 J+ [9 ]: m" y/ b
纠删池配置所需的定义:) d0 ^1 O5 D3 f& ?/ z/ c* s
chunk0 d# |& B0 _- F4 B) ?4 K
如果调用该编码函数,它会返回相同大小的块:可串联起来以重构造原始对象的数据块,以及可用于重构建丢失的块的编码块。" J. F2 u$ s, v; N
k/ [3 J( ]) s( ?4 s
数据块的数量,即要将原始对象分割成的块数量。例如,如果 k = 2,则会将一个 10 kB 对象分割成各为 5 kB 的 k 个对象。纠删码存储池的默认 min_size 为 k + 1。不过,我们建议将 min_size 设置为 k + 2 或更大的值,以防丢失写入和数据。7 V/ r0 Z7 |' J' @
m" g* b) l- V( c* x4 R0 N! v
编码块的数量,即编码函数计算的额外块的数量。如果有 2 个编码块,则表示可以移出 2 个 OSD,而不会丢失数据。5 C8 `  X0 e; |
crush-failure-domain0 C: D# ^8 m: {* H
定义要将块分布到的设备。其值需要设置为某个存储桶类型。有关所有的存储桶类型,请参见第 9.2 节 “存储桶”。如果故障域为机柜,则会将块存储在不同的机柜上,以提高机柜发生故障时的恢复能力。请记住,这需要 k+m 个机柜。
1 x. s) P% ]  I. `* R0 J3 d使用第 13.2 节 “创建示例纠删码存储池”中所用的默认纠删码配置时,如果单个 OSD 或主机发生故障,将不会丢失集群数据。因此,要存储 1 TB 数据,需要额外提供 0.5 TB 原始存储空间。也就是说,需要 1.5 TB 原始存储空间才能存储 1 TB 的数据(因为 k=2、m=1)。这相当于常见的 RAID 5 配置。作为对比,副本存储池需要 2 TB 原始存储空间才能存储 1 TB 数据。! m( O" x1 [4 P& h9 I) p
可使用以下命令显示默认配置的设置:$ V# s; v1 K1 E6 i) f: O. p3 P9 H
ceph osd erasure-code-profile get default3 r! ~6 [0 w% n. ]! [  p- C
directory=.libs
/ \$ N, K1 K; q' x0 [k=29 y! l, v! s' S
m=1
0 e' r* F, F3 g6 w9 y/ U* Q9 jplugin=jerasure
! d5 g* p3 H# x  d3 Bcrush-failure-domain=host
3 K8 v( X( c" R; ]" B2 Htechnique=reed_sol_van, s7 I* L# @+ m
COPY CODE
8 X' y% p) j: O7 h  n7 I选择适当的配置非常重要,因为在创建存储池后便无法修改配置。需要创建使用不同配置的新存储池,并将之前的存储池中的所有对象移到新存储池(请参见第 11.3 节 “存储池迁移”)。
  [/ W- N# ^3 s/ n最重要的几个配置参数是 k、m 和 crush-failure-domain,因为它们定义存储开销和数据持久性。例如,如果在两个机柜发生故障并且存储开销达到 66% 的情况下,必须能够维系所需的体系结构,可定义以下配置。请注意,这仅适用于拥有“rack”类型的存储桶的 CRUSH 索引:
5 K2 ?& T* K5 m6 ]7 s% S) Lceph osd erasure-code-profile set myprofile \
  w4 i( k* f7 \( d# Z) O+ i   k=3 \8 _7 p- ]( U* ~6 Y) Q/ w9 P
   m=2 \" @! ~1 m9 ?; S. ?
   crush-failure-domain=rack
% u3 \1 c3 D% V4 BCOPY CODE0 b1 K! u3 O/ I1 s1 b8 F1 T
对于此新配置,可以重复第 13.2 节 “创建示例纠删码存储池”中的示例:
* G( G. N. ]5 S8 Yceph osd pool create ecpool 12 12 erasure myprofile
3 w, V/ z( Q# B7 [echo ABCDEFGHI | rados --pool ecpool put NYAN -; ^+ @/ t) J7 \( @$ p
rados --pool ecpool get NYAN -  n6 K* Y5 x( ^
ABCDEFGHI
+ s) l% a$ l$ W" O7 {  PCOPY CODE" b/ h+ z, f# @: }: I" X
NYAN 对象将分割成三个 (k=3),并将创建两个额外的块 (m=2)。m 值定义可以同时丢失多少个 OSD 而不会丢失任何数据。crush-failure-domain==rack 将创建一个 CRUSH 规则组,用于确保不会将两个块存储在同一个机柜中。
: H# k- p/ n" C% O0 Z, ^4 f% N
& m5 L2 M+ C% a  {$ ?6 Y9 e, j$ R13.3.1 创建新纠删码配置 REPORT DOCUMENTATION BUG#EDIT SOURCE
! S# _1 `0 ?# }) t以下命令可创建新纠删码配置:, K1 V7 v$ ?6 l+ u8 n
ceph osd erasure-code-profile set NAME \
& |) `) `( w6 t8 L directory=DIRECTORY \' B# @" H, l# t7 ^, Y
plugin=PLUGIN \
$ v' r# I' n& R. Z stripe_unit=STRIPE_UNIT \+ f1 ?) x, X$ A. h! u3 Q
KEY=VALUE ... \2 F7 w* z: N4 Q. c, ]+ ~
--force
" g, d- K- h) k' @" _8 CCOPY CODE
' z- s3 K7 L- j/ P+ BDIRECTORY
8 X+ t! {  ~/ C$ A" p8 D  x可选。设置从中加载纠删码插件的目录名称。默认为 /usr/lib/ceph/erasure-code。$ q0 g/ w  E6 f' J  f! m& v
PLUGIN
! o9 H% Y; ~3 m( J" \7 H# d可选。使用纠删码插件可计算编码块和恢复缺失的块。可用的插件有“jerasure”、“isa”、“lrc”和“shes”。默认为“jerasure”。
% G+ w) _5 q5 M- e- ]STRIPE_UNIT3 \/ _5 Z- p" e; O6 P$ s; x7 J
可选。数据块中每个条带的数据量。例如,如果配置拥有 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”。
. M1 k: w+ y+ I5 c$ dKEY=VALUE
% k( X% J8 L" k2 G* N" Z专用于选定纠删码插件的选项键/值对。
- S9 B9 W* e- M/ j$ u# u" P2 K--force% q  U9 i% U" C9 d: s4 n
可选。覆盖名称相同的现有配置,并允许设置不按 4K 对齐的 stripe_unit。
1 [9 S' `" A( _; V7 _4 o13.3.2 删除纠删码配置 REPORT DOCUMENTATION BUG#EDIT SOURCE
+ q0 n4 j6 e1 x6 z, M/ g) a以下命令可按 NAME 所标识的纠删码配置删除相应配置:
) w' L9 V9 r9 S& Q  U7 Zceph osd erasure-code-profile rm NAME
1 s; H1 c. a% Y4 Q9 J  K+ P& A. GCOPY CODE5 m. P; p/ L" U$ G6 @, g+ D
重要重要
$ G& f! E. j# Z. o8 d如果某个存储池引用了该配置,则删除将会失败。
+ S& W8 S) r7 F& ^. b7 P# V- b13.3.3 显示纠删码配置的详细信息 REPORT DOCUMENTATION BUG#EDIT SOURCE
/ X# P) U- p! S; ^* H: v6 N! ~以下命令可按 NAME 所标识的纠删码配置显示其详细信息:" N8 L" ]( X% B6 S. n2 A# S3 \
ceph osd erasure-code-profile get NAME
3 e) y8 R* h( d+ C- K$ V9 l3 nCOPY CODE
* L5 R: Y  `0 h  H3 r% J! M0 ~13.3.4 列出纠删码配置 REPORT DOCUMENTATION BUG#EDIT SOURCE- @7 p5 ^; T- z) K1 u( t4 a: q
以下命令可列出所有纠删码配置的名称:
* [0 ~6 w$ ^/ g% [/ v# t& |ceph osd erasure-code-profile ls7 s  G, D& H* ~- m  S& Z; ~( E
COPY CODE  O7 m! k$ K% h& n' p4 T/ {
13.4 含 RADOS 块设备的纠删码存储池 REPORT DOCUMENTATION BUG#EDIT SOURCE
# x5 k/ q6 @% w要将 EC 池标记为 RBD 池,请对其进行相应标记:
( V, S" t! Z3 m1 ~* C! K5 R* Q! U' Y6 kceph osd pool application enable rbd ec_pool_name  v! E# z3 }3 |* d
COPY CODE
9 g$ {* b: M+ B% k0 VRBD 可在 EC 池中存储映像数据。但是,映像报头和元数据仍需要存储在副本存储池中。为此,假设您的存储池命名为“rbd”:" q* L3 |! v- V3 m& g4 y. V
rbd create rbd/image_name --size 1T --data-pool ec_pool_name
7 Y5 k" W, M; b/ P% w5 M% c: HCOPY CODE
; g6 W" d  Z8 Z6 o3 Q. d& x您可以像使用任何其他映像一样正常使用该映像,只不过所有数据都将存储在 ec_pool_name 池而非“rbd”池中。
* Z) L9 L& \: |& X) P% {  v5 {
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 02:03 , Processed in 0.017560 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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