|
|
在 OpenStack 中使用 Ceph 纠删码(Erasure Coding, EC)池,通常涉及到以下几个步骤:
]! e6 p0 m# W6 _! e1. 配置 Ceph 集群以支持纠删码首先,确保你的 Ceph 集群已经配置并支持纠删码。这通常涉及到以下几个步骤:
" r6 n+ s9 j2 R, N& va. 创建纠删码池在 Ceph 中,你可以创建一个使用纠删码的池。例如,使用 jerasure 和 reed_sol_van 算法创建一个纠删码池:
" d0 {" w& o; O) d$ u( e9 s" {1 {" x+ v2 F* e5 I. j
; b7 O- p' a1 g) ~% c9 c
* t k5 d0 s3 s, U$ {) X
/ z3 m. L. c! ~1 t d' T1 w$ N+ M9 p% N" b6 M7 x8 p1 P
: c' ?/ j+ w/ Q, I& t
* _) |$ ^4 I9 m$ c# ~1 J+ B
) \/ B5 M2 T) i$ W& b
ceph osd pool create ec_pool 128 128 erasure code_profile ec_profile
6 |, O3 Z8 y+ H& r' U# p. i: P$ Cceph osd erasure-code-profile set ec_profile jerasure yel error_domain=1 k=6 m=2 ruleset-failure-domain=host crush-root=default
4 l' W! G; U$ z7 {1 H
% o( W1 J- c8 e, m$ b, @7 \9 V. q" V0 g+ {% _1 W
这里,k=6 表示数据块数量,m=2 表示校验块数量,error_domain=1 表示每个主机最多有一个故障域。
5 R0 r, k7 q1 Wb. 验证池配置确认池已正确配置为纠删码:
% L: |) L- V9 ^1 h! I" ^* D% N- b0 D0 T+ O. ^! W/ g) {
9 o. A" g0 g& C& s1 e
) D6 g. ^% K) O
% ?1 m; \% ^7 C/ B& j4 ?$ p3 R2 l$ D7 a
; f/ C# x+ O+ t/ F& l+ Q/ S
; ? p9 H) e! |( N9 jceph osd pool get ec_pool erasure_code_profile 7 _. @, f2 }! a7 F
2 w$ i4 j$ K- h& v% t1 t( i1 k) V5 O+ Z7 k* ?- o( F
2. 在 OpenStack 中配置 Ceph 和使用纠删码池在 OpenStack 中使用 Ceph 纠删码池,你需要在 Cinder 和 Nova 中配置 Ceph 以使用这个新的池。% J; I- D' J' W$ a4 a# E% n& J
a. 修改 Cinder 配置文件编辑 Cinder 的配置文件(通常是 /etc/cinder/cinder.conf),并添加或修改以下设置:
( N# g- p" f' y9 x' x) ]. C# D& Z4 y
' i. a4 s2 N3 q5 u9 |
; B. K; F" q; h3 k- r" }) L
" `. F7 @; ?7 D4 X' `9 C8 Y% }( Q. D! y7 g5 K- y% n
3 m7 I0 Q; {9 s4 L3 X- u+ w3 `
% F7 _' c1 p. B
% M. ^( {& E) |8 L) Z7 V3 t* o0 X% x% ] s' h% Y1 ^
5 n) d2 `, Q4 g/ I: X9 }2 [7 y2 X, {! _$ C6 z0 M: C
[cinder]* s- p8 e. }0 d) ]
volume_driver = cinder.volume.drivers.rbd.RBDDriver6 e X0 R1 [8 u l6 L9 u. L" Z
rbd_pool = ec_pool& N( t7 f( U' x: ]3 c* a
rbd_user = cinder-user$ e2 i% v) I% N4 T/ M
rbd_secret_uuid = <secret-uuid> Y) h9 P3 W$ s( c! @' h& `
P3 H. ]% _# }
! D: h* Q% f3 |1 ^9 ~1 C确保 rbd_secret_uuid 是你的 Ceph 认证密钥的 UUID。你可以使用以下命令生成 UUID 长字符串:. ?* \9 b+ w9 o
+ A6 _# M- ~' |9 u: T `1 a
( n; ?5 i# X+ g- ?1 V5 M( D3 A9 p C9 b
s& J, P( b( G) _! W u
$ j) x5 L i: x# s
- |4 f6 \8 h# R8 N/ g' j P- ~6 p- B6 e
uuidgen
# b' z% M8 B9 N5 Q
! [: E7 g% `# R
' }" ~- F% y8 C, O ~0 i6 P$ z1 c, ]
, p* i, e s& I: i; r2 ]9 l: i& Bb. 配置 Ceph 认证密钥生成 Ceph 认证密钥并将其添加到 Cinder 和 Nova 的配置中:
3 j2 P* _. U1 R$ P, Y' \( p4 Z% J3 K' }5 u3 T
* }* w' e, d0 N
% N6 v( Z: r4 b8 B' |0 d" z: j! X2 W% x# s0 q
; S8 I: k! W8 Z' k* u& o/ i/ A; X* M$ c. p: A, `1 n& C
0 e2 B, k0 p# M* |0 Xceph auth get-key client.cinder-user | base64% m4 I# t8 H1 G2 m, h, {1 s, i
7 m" A9 a9 p* n# `
4 [+ D4 _6 a# H* ~- ~' ]: w( j将输出添加到 Cinder 和 Nova 的配置文件中:. S7 D5 f3 ?% C: e* @" B2 t* n
6 L2 c- ]- \: `5 b* \2 A
$ l% e& G+ k2 Q5 d$ v# @
& J3 B" A. g) _0 e% v/ Q* t( y" R9 @( H3 B$ D7 J
, ?7 }. Z0 M9 h5 E M2 o
3 p1 x9 O: h/ F0 M+ v3 @+ ~
- J$ N7 E6 s/ A# Q4 p6 v
- S0 ]2 F5 V! v" X
' x8 o2 n3 E7 i3 ]: }3 E2 j2 J) m/ a* c1 r# w7 N% L
[DEFAULT] j' b$ g/ G& u! @8 Z* g0 N; A
rbd_secret_uuid = <secret-uuid> ###from uuidgen
3 ?2 t2 L0 j! r' X0 arbd_user = cinder-user) d+ x5 ~- j1 y, J! `( n0 z J6 e% f
rbd_ceph_conf = /etc/ceph/ceph.conf
. U5 t* L/ T; w, T' B, `. f" R0 @' o8 i6 M. _
3 _: Z1 _ t$ [# r2 ?6 ]. Tc. 重启 Cinder 服务以应用更改
; y( ~1 b3 F$ S' {# x) Z" w0 B# D
1 v# ]: `+ @; v8 W; {8 `
2 I3 Z, N$ L% q# s
4 i( V1 R* j. h/ ]' C! B; O8 O( I3 T
3 l2 V) j) L0 w4 R& T6 k! G: Z- Q* _) @ H; s j/ h# Y
. }' M6 U/ w9 c9 J# psystemctl restart openstack-cinder-api.service openstack-cinder-volume.service openstack-cinder-scheduler.service
4 J2 r# K( O1 ?& A' A7 T, I; c: m: t0 [
$ j- q3 `7 g- l7 B" h
3. 验证配置确认 Cinder 可以正常使用纠删码池:# s1 u5 U8 B: \: {# I; ^, j, u
$ ]: h" {. k; |. y0 M8 w4 e/ U0 J* t- ^% k i7 u3 n3 }( F
, R. } k* E, O) {# h
. Q. K) A, M5 b% p0 |( r4 F! Q
& I: @7 A9 m4 ]) t* _$ r1 e6 X5 J
9 n# a# N& R7 M; B5 o
& s# G; K+ ]6 Y* E5 Eopenstack volume create --image <image-id> --size 10 <volume-name>* f; O |0 U/ u! C/ C
$ W1 E, l- Z5 v' B! C& V* D. B3 H, m3 h$ h. c3 Q9 h
检查卷是否正确创建在 EC 池中:4 T; W5 m8 b' \6 x1 R
+ a7 ]2 j0 J/ f0 j; r
' u4 x. y2 e' [4 h5 o1 y* S2 x% W
( i# w) u9 W/ z6 J& \4 O: U) A6 W$ j
, v i D% |/ V6 a" {
$ h* p! u$ u9 @/ {1 ^2 h# ^
6 j; T! D2 n3 w$ ?% Q) x7 i# |- [rbd ls -p ec_pool --id cinder-user --keyfile=/etc/ceph/ceph.client.cinder-user.keyring | grep <volume-name>
- V, P$ ]8 |9 x" ]- {
, W) a: g6 B. R/ T7 o; B& f$ [" Q+ ?. K/ @, h" H
4. 在 Nova 中使用 Ceph 块存储(可选)如果需要在 Nova 中使用 Ceph 块存储,确保 Nova 的配置也指向正确的 Ceph 用户和密钥。这通常涉及到编辑 /etc/nova/nova.conf 并添加类似的 RBD 设置。0 S# _0 n! H7 T- ]- b; d v9 J
5. 重启相关服务(如果需要)根据需要重启 Nova 服务:( ?" |. L% [0 E
& W* k7 d, G& b$ R0 B/ a7 |) S" z$ Z' O" B
, _' ~7 b! M& O& [# [$ @+ [ Z9 \' J8 Q
2 J8 Q% U; |& n A
7 o8 Y% e* g; |0 T& m7 N/ q
0 j# s/ O" h2 c7 csystemctl restart openstack-nova-compute openstack-nova-api openstack-nova-scheduler openstack-nova-conductor! j# b4 ?3 p: F9 \
) h6 N% ?7 h) _( L7 M
' i M) `! I8 n+ n: y通过以上步骤,你应该能够在 OpenStack 中成功配置和使用 Ceph 的纠删码池: F6 D9 q) p4 S& F, o3 J A8 E
8 Q4 p( |, n- N1 X" r
配置完成。% W, x$ M7 B$ D1 l" y
% q8 @5 N/ Y: [( z; y
|
|