|
|
探索 kernel RBD map 失败的问题。. q, V$ v! v) h4 L% b. i# p
场景
5 @& S% j2 w# u; n, W搭完 rbd mirror后,想通过client往image里写一些数据,所以在client端map rbd设备,结果失败了。9 T# [- {, \; p A
rbd mirror的image 需要两个属性:exclusive-lock, journaling N, k/ l& D) I' M9 \! z4 t! d
原因
8 I& A4 }' U9 P m% B9 Y; b查看rbd image info
+ G; ^/ U. h) a k4 `8 ]$ }$ b- }8 G4 g) B) K- Z* n
# rbd info rbd/image-1
: l. h' B, M1 O) N0 r. }rbd image 'image-1':
8 k1 B1 p. K1 i2 a& r3 P' K$ T size 1024 MB in 256 objects' l* r6 P6 k a
order 22 (4096 kB objects)9 x2 t, x. s! v a7 k: C
block_name_prefix: rbd_data.108b238e1f29- y, V2 |* h" \% l5 j
format: 22 P, a# x% b5 _4 b+ T9 h
features: exclusive-lock, journaling, E' h* a0 }. k
flags:0 p" F6 U" H1 p
journal: 108b238e1f292 U6 M: q+ U% i8 g
mirroring state: enabled W8 Q9 l0 I ` [3 e
mirroring global id: c603d9dc-6f8d-49e0-ab68-5944d348e5274 M \% _* Q5 l$ l5 j2 ?
mirroring primary: true# y3 D8 c y( B: p& w) q
输出
) I8 E( C1 y+ ]9 h) L/ c" a( e! y" m1 d! }$ ^& t' ~
# rbd map rbd/image-1% Y _) f8 X3 |6 h, T0 ^3 P- A
rbd: sysfs write failed0 ^2 u" L8 c( W, _6 r, H; V4 b
RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable"., @7 L- o7 r. y/ @2 J9 d/ {" [ w
In some cases useful info is found in syslog - try "dmesg | tail" or so.! C3 [) h7 q2 X
rbd: map failed: (6) No such device or address( O4 Y) i4 j5 v& @
然后dmesg看一下
8 n! ]; [: @3 E' ?& v; `* [. H5 O* d( w& x
# dmesg | tail
1 F- x: z8 k( Z) X2 M+ R9 O[ 64.808315] rbd: loaded (major 251)) P, o3 M& ]; v5 `* Q1 M
[ 64.818369] libceph: mon2 172.20.2.160:6789 session established! p: \5 y7 z" P! N& _* `
[ 64.819187] libceph: client14167 fsid 4c7ec5af-cbd3-40fd-8c96-0615c77660d42 x5 a* I- W$ @, D C( y
[ 64.836328] rbd: image image-1: image uses unsupported features: 0x40
2 ^5 [3 f& P0 t. x2 s[ 443.658569] libceph: mon1 172.20.2.161:6789 session established
/ W# g, L: z p/ t r. A2 J4 Y[ 443.659143] libceph: client4313 fsid 4c7ec5af-cbd3-40fd-8c96-0615c77660d4
4 i0 E' @: C5 b( O0 I- y[ 443.683178] rbd: rbd0: capacity 10737418240 features 0x1
7 x0 g, f) `# c& t$ @' C[ 978.502132] rbd: image image-1: image uses unsupported features: 0x40
9 [7 Z. k5 I8 l4 U3 X错误原因
% c. ]" g: J4 g4 C0 o$ ^# v+ ^image uses unsupported features: 0x40" y- D: c# N( h8 F3 c) }
不支持特性 0x40 = 64,也就是不支持特性 journaling* r( M' {! I* y" }
关于内核支持的特性分析% }9 {1 q5 Z5 x* F5 x+ o
查看内核版本# k, _ U c6 h
4 N, m" y+ K4 O. A' O2 w0 r
# uname -r9 Y9 U9 U7 i9 D; V' y
3.10.0-327.el7.x86_64
( D* w+ `9 [2 _根据查阅资料和实践,发现:0 E! O+ ~5 X- d+ `
CentOS的3.10内核仅支持其中的layering 和 exclusive-lock,其他feature概不支持
: @( Q1 }! C3 L6 u内核4.6仍然只支持:layering、exclusive-lock和 striping 属性
8 S1 a9 h/ e) g9 U, ^* S1 e7 ]- p( D
# rbd info rbd/test-map
' F/ A/ q1 s8 D% C0 `$ Z* v# [$ zrbd image 'test-map':
. h+ w& ~8 G. q) s: f( l# o { size 512 MB in 128 objects
% v- Z. \) M- [ order 22 (4096 kB objects)2 q u" ^+ s8 B$ l m0 y# U7 U* Y
block_name_prefix: rbd_data.10ca238e1f29
. X/ ^0 e* G3 l6 Q% z M format: 2
- S' A9 R; x8 I1 l$ I6 W features: layering, exclusive-lock
7 ?: {/ V. w' i- v! Q flags:; U6 U4 R' \! N. W
map2 m) `7 z. @( ^" A( p. e! Q" F
3 s6 {5 y0 c: Y, F* L2 D
# rbd map rbd/test-map
+ b# c+ k1 Z2 y4 s7 n- m k; C/dev/rbd1
b' Z h2 P) D) ?, }此时可以map成功。& @" R" b5 D, t t
RBD特性解析4 B0 Q k) q' V) p* `8 o1 b3 Q' C
特性一览表4 C; V3 z% K6 b4 I
RBD支持的特性,及具体BIT值的计算如下
/ F* g4 I( T0 W4 F4 d! C属性 功能 BIT码
H5 {' Y, f ^8 w/ Zlayering 支持分层 1- k; O% g6 ]$ ]( u- b. X* l8 G
striping 支持条带化 v2 2% z, ~: W% L2 @$ G: ~6 v7 N/ t
exclusive-lock 支持独占锁 4
& `8 P3 t* Z9 Lobject-map 支持对象映射(依赖 exclusive-lock ) 8
) P; [& v! _: H( }fast-diff 快速计算差异(依赖 object-map ) 16
! a5 ]+ d1 P# I/ K+ Hdeep-flatten 支持快照扁平化操作 32
4 k0 `3 g9 h! b [( [) ~2 K, w3 Jjournaling 支持记录 IO 操作(依赖独占锁) 64
+ d& {/ d* E4 A+ n8 G& z+ q Nceph kraken版本默认属性值& o# Y; v+ a4 ?9 I! b7 w' d1 k8 W
$ e% C- R: d* i# p& y
# ceph --show-config|grep rbd|grep features
3 y" L4 i% Q$ nrbd_default_features = 61
* X2 f: m0 Y# _ x为啥是61?我们创建一个默认配置的rbd看看
4 W& A2 }, I) F/ l2 g; z; z, W3 G* q
# rbd create test-feature --size 64
C9 {" N) g. f# rbd info rbd/test-feature& d; J$ x! [/ f
rbd image 'test-feature':
8 b1 u) U( M5 _' C( R, s! i* I size 65536 kB in 16 objects
4 R7 R( F/ b9 [ order 22 (4096 kB objects)
- r/ }4 W9 d5 M! a( G' B block_name_prefix: rbd_data.107d238e1f29. G! d# y4 @! g6 v
format: 2
9 k' O/ i3 |* y& ]& ] features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
* o5 {" H2 y; o flags:! J/ [1 O6 T/ K' l0 n+ z
1+4+8+16+32 = 611 X) Q& {' _0 r) N( G+ o
就是说除了特性:striping 和 journaling 外都开启了。6 T" T9 E3 c. H$ H9 ~% Q
控制属性1 |* S7 L+ U+ ~4 T
有三种方法来开启需要的特性) r: |6 X% B. B& |+ d- I! J
1、在创建image时,通过 --image-feature 来指定需要开启的特性
4 f9 n8 z& b+ o2、对已存在的image可以通过如下命令开启和关闭0 _- I4 P* s3 ]+ F! N4 h
1
Z, E$ g; w6 Z* B& s( F G2
1 g e) Q; G" T1 c% N/ hrbd feature enable <pool-name>/<image-name> <feature-name>. u; w0 `" ~8 \" Q' o) y& u
rbd feature disable <pool-name>/<image-name> <feature-name>
, \2 Z- j/ b9 R" W) `; B n3、当然,每次通过enable和disable来不是很便捷,可以通过修改配置文件来解决
9 V% @ z) X- k, H2 |1
6 Q2 U4 [& ]0 A: @1 i2( c- K5 a3 \" h8 {
3& R/ G' f" o: h2 c
41 g& z: ]6 H* D' B" J
vim /etc/ceph/ceph.conf
& @) K' z) F7 B3 r, K. U* C. [...
8 A: j8 F+ f7 u0 y! h0 d% H D0 z$ Yrbd_default_features = 1
/ g+ H) p5 R0 ~/ D8 b...
: p$ z& b# Y. v Z2 F; W4 v; V具体该设为多少可以通过上面BIT值查表计算得出。: O, L( c: T& n/ \" f% X2 h
|
|