|
|
探索 kernel RBD map 失败的问题。# U- d1 e1 O( {+ p ~8 B
场景
0 l- _3 l7 x7 b$ U6 g/ c搭完 rbd mirror后,想通过client往image里写一些数据,所以在client端map rbd设备,结果失败了。0 ~7 ^" O! X `
rbd mirror的image 需要两个属性:exclusive-lock, journaling
2 ^: M. {; H, Y3 d原因
. C; y8 [7 O7 C6 i4 ^2 }6 o查看rbd image info# i8 S) I* y' B4 d/ G
0 U$ L! ?( N7 q# rbd info rbd/image-1
$ _. ^* @: W. f4 Crbd image 'image-1':
, G" ]% H$ V+ ~) C6 g size 1024 MB in 256 objects- Y5 y+ Q# Y' T! q2 S
order 22 (4096 kB objects)
) I' q* V% D% B6 C block_name_prefix: rbd_data.108b238e1f29
7 v- e1 t7 [& S8 O format: 2
0 s$ @4 i3 Z. T" o, D* E$ y+ } features: exclusive-lock, journaling0 ?, j8 L# Y0 ^1 `
flags:6 y5 I1 k8 O+ i& {$ V6 p [
journal: 108b238e1f29
# J$ v( C( R) w$ i2 l) S mirroring state: enabled- @) \, \5 x+ o
mirroring global id: c603d9dc-6f8d-49e0-ab68-5944d348e527
U7 D* @$ L* c mirroring primary: true
- W N) H0 g8 u; h5 a/ N6 f输出
9 g8 G; q3 x" H' ?1 ^0 g% h& ]0 V C- i" A
# rbd map rbd/image-1/ O6 ?6 P( ^! X* z, z, b; ^
rbd: sysfs write failed
4 p; ]" C9 p3 Q4 g1 n W8 N& gRBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable".
' g! P4 L% C4 O6 t2 _In some cases useful info is found in syslog - try "dmesg | tail" or so.
" w% X$ c# e, J' l1 M& Frbd: map failed: (6) No such device or address
, m8 |. h! k% R0 O然后dmesg看一下& t6 ]* L; \1 {5 c
9 m/ u& d$ b, k* V+ v- r# dmesg | tail: Q; _& q/ O9 E4 l, V4 t
[ 64.808315] rbd: loaded (major 251); _: C }# h+ d) h2 N5 A
[ 64.818369] libceph: mon2 172.20.2.160:6789 session established, _" Q z% U7 t% f& F
[ 64.819187] libceph: client14167 fsid 4c7ec5af-cbd3-40fd-8c96-0615c77660d44 R) x% ?9 H8 H* v# R2 y0 a
[ 64.836328] rbd: image image-1: image uses unsupported features: 0x40
: L) v( p |/ N# l H0 X; R[ 443.658569] libceph: mon1 172.20.2.161:6789 session established" O) n v8 I+ T" U9 m
[ 443.659143] libceph: client4313 fsid 4c7ec5af-cbd3-40fd-8c96-0615c77660d4$ S: r3 R& W, C- K3 G! f2 }% ^
[ 443.683178] rbd: rbd0: capacity 10737418240 features 0x18 Q/ b( G4 s0 ^- |5 r% R6 ~3 m
[ 978.502132] rbd: image image-1: image uses unsupported features: 0x40
6 v/ C0 U- q9 G1 v& D6 H$ V9 b: v错误原因
5 [; h z9 {! Y5 ?2 Vimage uses unsupported features: 0x40
/ t) J/ J" B3 d) V* o( x不支持特性 0x40 = 64,也就是不支持特性 journaling
& [8 d: U5 \! y+ h0 k关于内核支持的特性分析) z% ]- W* H+ z" k, X
查看内核版本
9 s" } g- s/ V2 H- |+ O2 N8 |' {1 B+ D
# uname -r2 Y, ~; |+ S% {; J8 u' n
3.10.0-327.el7.x86_64: z/ e c( P8 h) a, V* m6 ^
根据查阅资料和实践,发现:; m' Y n; b9 E8 F& D: _
CentOS的3.10内核仅支持其中的layering 和 exclusive-lock,其他feature概不支持! G- s! s: Q( D; s+ `
内核4.6仍然只支持:layering、exclusive-lock和 striping 属性
6 d6 i* X- Q$ \1 J1 @7 ?+ y. T [) W% c3 N
# rbd info rbd/test-map
; {1 A& ~7 B$ M. X- brbd image 'test-map':" X3 p+ v1 Q3 F* U4 h7 r G" J! q
size 512 MB in 128 objects
; z* f' F- ^0 {0 L: A( Q order 22 (4096 kB objects)
; t, w, |& V! H6 C7 j block_name_prefix: rbd_data.10ca238e1f29; M$ Z8 e, o8 H
format: 2
6 @3 g8 e K/ y, v# ?- K. c% R features: layering, exclusive-lock
1 U& i' I7 Q0 w: z6 m flags:* [# I& w. |+ K1 m, O
map6 C7 U( y( V/ T& Z/ U/ g
5 L" u1 Y* N* t5 h w9 \
# rbd map rbd/test-map* I3 l. G% V/ N) F1 T4 l( Q
/dev/rbd1
) d% c! h; ]$ \; T此时可以map成功。- @, f2 T* j5 T& y* P8 d3 W
RBD特性解析7 P' A( Q$ g0 i! E( I1 U8 V3 d. n
特性一览表
3 ]7 P2 D+ I7 Y" ^1 |$ y* RRBD支持的特性,及具体BIT值的计算如下' ?- j; C7 Q, s# N9 t+ P! h( O: q
属性 功能 BIT码# f- W* @$ a0 Z( q0 B3 L1 i
layering 支持分层 14 v, ]- f* E6 A1 F. o
striping 支持条带化 v2 2
- H5 t: I4 f, y2 d8 kexclusive-lock 支持独占锁 4* Q( ^$ F. J# e2 w. O" v, y8 n
object-map 支持对象映射(依赖 exclusive-lock ) 87 U. a' {, c) _; n6 D# r7 k; V
fast-diff 快速计算差异(依赖 object-map ) 16
+ f2 C! a- V2 v- b, J; rdeep-flatten 支持快照扁平化操作 32
+ L3 R z/ o n$ Qjournaling 支持记录 IO 操作(依赖独占锁) 64
' R' x1 [; b; b& F9 x2 Q- vceph kraken版本默认属性值3 \; \8 r# Q, m+ n# x
6 m" W, K( {/ v7 w3 A) ^+ S# ceph --show-config|grep rbd|grep features
+ B8 y/ M- Q7 Trbd_default_features = 61
; `% M* u- t8 @/ p4 x' W9 x为啥是61?我们创建一个默认配置的rbd看看
$ O; g6 M& b3 x8 }; N/ H
4 r, @" i- a- b; a6 t# rbd create test-feature --size 64
. K- [) z' Q( @+ ^! o* x$ ?# rbd info rbd/test-feature$ B, ] ]0 u, {0 u! |! {1 q- m/ F4 P
rbd image 'test-feature':2 O' N6 d8 _& Y, P. r) w
size 65536 kB in 16 objects
. D* }9 \* [" D# I0 ], D3 K order 22 (4096 kB objects). }! [' Q' E. h9 @
block_name_prefix: rbd_data.107d238e1f29, \3 E9 n- r; q+ f7 P. j
format: 2
7 [# h& D7 C( u9 H3 d features: layering, exclusive-lock, object-map, fast-diff, deep-flatten' q8 [( P% }* h0 `- A5 J/ A# m
flags:
: @. q$ i4 ~; p3 ?$ ^1+4+8+16+32 = 61
) k6 m# }8 i" B就是说除了特性:striping 和 journaling 外都开启了。4 n% b4 ^+ ^; e" l, u. t* N
控制属性9 N# J; K, \8 ~( L2 K
有三种方法来开启需要的特性5 X4 Y& ~: S' V2 e. i* R
1、在创建image时,通过 --image-feature 来指定需要开启的特性' m z4 d* z: A5 n4 G
2、对已存在的image可以通过如下命令开启和关闭
+ W1 \; b9 `- c# A& D* z1/ u( t. a( D$ _2 N5 ?/ Y
2" l. O! P; a7 ~
rbd feature enable <pool-name>/<image-name> <feature-name>9 `0 L% G& ^' J0 b4 a
rbd feature disable <pool-name>/<image-name> <feature-name>
/ t+ S& u1 ^8 y4 [3 [& u3、当然,每次通过enable和disable来不是很便捷,可以通过修改配置文件来解决
. N' _+ O& p8 m8 ?2 i1 ~+ g1) T w; E( }: k6 g/ d. L
2
; F9 m1 c" H% r1 W" j1 u31 N' G; V+ }: r" ~( }
44 G1 H- W; r5 a# o' b. s5 H
vim /etc/ceph/ceph.conf
/ O7 M+ c0 d( w$ w1 T5 V...
) W- V' _& y0 Jrbd_default_features = 1
& h7 n) F& O5 t5 b$ @5 N! D... K, N1 ~7 d9 N7 Z! \
具体该设为多少可以通过上面BIT值查表计算得出。( ^. |( z7 k: f2 T; ]) Y
|
|