|
|
查看池" g; l! A! K7 U- \5 O$ i! q) o# ~
[root@node-1 ~]# ceph osd pool ls0 B: Z* o/ Q& T! X- D8 ]* E
& |$ b1 J( i/ H新建rbd块
; |. v' k4 i+ u6 o& d+ m[root@node-1 ~]# rbd create volumes/Test_pressure.img --size 100G --image-format 2
7 x; T, b( F* o* G& i& {) Q+ I8 Y7 T+ ^% c0 y
查看块信息
* B5 k( V7 T8 o6 A[root@node-1 ~]# rbd info -p volumes --image Test_pressure.img7 q( \5 M. w. m* e
rbd image 'Test_pressure.img':) \% p" }9 v( ~( V- ?3 g
size 100 GiB in 25600 objects: I) W( N# i) U, Z1 J# h6 R
order 22 (4 MiB objects)
* ^* B1 s( G; ?" N" l snapshot_count: 0
* R: F a. L6 } x, u8 u id: 30d05554c7f23" ]. W$ s' n) n4 X- z: e: r
block_name_prefix: rbd_data.30d05554c7f23
( h3 U# ?( j5 ]' M8 s2 x format: 2! s3 ]. T5 f$ l/ d- `$ ]# Y
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
* S0 K. w1 m4 g op_features: " B6 Y8 X0 x e7 s/ W
flags: $ J \3 v% ~3 q& X
create_timestamp: Sun Sep 26 16:57:19 20210 G, C' x6 j, Z4 ^% u
access_timestamp: Sun Sep 26 16:57:19 2021; s8 D+ D$ M) K2 I) @: _: d) o+ g
modify_timestamp: Sun Sep 26 16:57:19 2021
6 M' Y: S- o4 V, l! R# R% L O1 u0 X# m5 ?) X, J
将rbd块映射到主机(报错)8 \1 M p; k% W: p9 Q
[root@node-1 ~]# rbd map volumes/Test_pressure.img
9 e; U/ ~$ U2 M( q! H4 r7 urbd: sysfs write failed% b; A9 I+ ]. W! m, b
RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable volumes/Test_pressure.img object-map fast-diff deep-flatten".! t3 e9 U: F. a- V* N
In some cases useful info is found in syslog - try "dmesg | tail".4 x( ~6 q, j' I0 ^1 S
rbd: map failed: (6) No such device or address0 B; [& `/ e, N) L2 W
; J3 c1 h! v& p a4 [9 x2 M7 R$ C删除
6 T, L" J. P( j) b! R. ?* j" j[root@node-1 ~]# rbd rm -p volumes --image Test_pressure.img( R( L. ?" n, x. Q* T
Removing image: 100% complete...done.& W( ~6 A% A( {: _2 N/ ?7 |' b
9 k" \( C6 ~. Z4 F8 P1 L2 o
故障排查:
. G4 V9 l0 m- K2 [! l! M& Wrbd 块 ceph 支持两种格式:
' c! t; T2 K0 h4 k: U9 U1 e* i7 ^2 T# rbd create volumes/Test_pressure.img --size 100G --image-format 2 1 }0 c* u4 R2 J0 N( ]. [+ z
1 @8 h9 Z7 K5 d& H- y
--image-format format-id) v x6 }' `4 [6 g
选择用哪个对象布局,默认为 1 。
/ g/ ^( s; K" Q- }5 C7 W/ wformat 1 - 新建 rbd 映像时使用最初的格式。此格式兼容所有版本的 librbd 和内核模块,但是不支持较新的功能,像克隆。
. [' B9 i7 M& Z& C; ^format 2 - 使用第二版 rbd 格式,librbd 和 3.11 版以上内核模块才支持(除非是分拆的模块)。此格式增加了克隆支持,使得扩展更容易,还允许以后增加新功能。9 F; C& B2 S+ O' r" i; D
0 V+ J2 P9 N! G
. V/ ^: V( i7 H/ P3 w5 c为使用rbd块新特性,使用格式2,在map时发生以上报错:9 I, ]7 D5 p$ g l& Z2 b) U
; A5 r; h3 ?" O2 [ [' O
查找相关资料,找到信息如下:
- M- N& @% q0 B2 r+ C. L& o! e笔者安装的是nautilus版本,新建rbd块指定格式2,默认格式2的rbd块支持如下特性,默认全部开启;
" a% q1 o2 K3 _1 slayering: 支持分层
5 `( a; H2 v8 ^. O9 `$ Estriping: 支持条带化 v2
' U a& J) K! l: P) g: x7 S1 eexclusive-lock: 支持独占锁
/ o: s" {6 `" P7 J2 jobject-map: 支持对象映射(依赖 exclusive-lock )
& X9 n/ S* D* b9 x3 Yfast-diff: 快速计算差异(依赖 object-map )9 P; Q4 H6 h$ ]) a, ~1 I
deep-flatten: 支持快照扁平化操作# A3 x% x! e7 U6 P# J/ ~& e. U
journaling: 支持记录 IO 操作(依赖独占锁)2 ~; {: }; g' P3 [. H
) h5 v, Y! j5 M) L5 _; j: A4 R# z" g9 o% q& M3 q
使用系统为centos7.6 ,内核版本3.10.0-957.10.1.el7.x86_64,根据报错内容提示可知,服务器系统内核版本,不支持有些格式2的新特性导致。可以使用 --image-feature 选项指定使用特性,不用全部开启。我们的需求仅需要使用快照等特性,开启layering即可,配置方式如下:' Y" @2 q! F, Y$ r( Q
[root@node-1 ~]# rbd create volumes/Test_pressure.img --size 100G --image-format 2 --image-feature layering
2 x3 ~. g% g) T7 p+ P& m7 b7 O( ?8 _
映射到物理机
: K/ T7 u0 |. J+ ?9 I! ?[root@node-1 ~]# rbd map volumes/Test_pressure.img2 ^7 Z+ {) l5 y8 j8 B
/dev/rbd0
" I' }9 m, E3 B7 I+ Q2 m* v
* A4 x# w& u4 Q/ T* ^挂载
% U" t: Y$ O1 X- G! V! ] ?3 E[root@node-1 ~]# mkfs.xfs /dev/rbd0
! ^$ s* l% }2 `2 [+ f1 t* z* P Z$ V[root@node-1 ~]# mount /dev/rbd0 /mnt/
/ h9 W8 Q! S/ p: e[root@node-1 ~]# mkdir -p /mnt/test* B b9 A" [2 y/ X; A8 o+ W
[root@node-1 ~]# ll /mnt/6 ?7 w7 E# k* h6 _& k0 [
total 0
, Y m; I W; x- jdrwxr-xr-x 2 root root 6 Sep 26 17:53 test1 A& b \! {/ A0 @- A; _7 ]4 p% S3 K$ w
/ n# l0 j3 I1 i* p: I: w# 经测试,内核版本3.10,仅支持此特性(layering),其它特性需要使用更高版本内核,或者从新编译内核加载特性模块才行。
0 Z1 U' o) b1 s, V# 看看format 1 format 2的区别在哪
) m. Z1 _- F: E* L" A7 k' K format: 2) O+ l9 v( Y9 T. b
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten # 格式2支持的功能较多,但是低内核又不支持那么多,只能把其他的功能禁用掉使用: t& I# F; u) x4 O- J0 p
# }7 B! p- H7 w% v' H
" M, y6 ?# s) t. h$ U% i卸载硬盘+ l: k0 R' j; D
[root@node-1 ~]# rbd unmap volumes/Test_pressure.img
; Q: y( E4 O' k" P7 `/ r! D7 T4 V) a) B' E
删除块
R! b3 f) V) p h[root@node-1 ~]# rbd rm -p volumes --image Test_pressure.img& R# W: q- R7 A$ ~# y' T7 ^ j
a# ]2 b: ~9 |4 ]: v
8 n: ^9 [) S C) K) W/ c. ]一 块存储调用方式
! J3 x% r& g0 e5 _3 eCeph的块存储有多种使用方式:
% Q- B0 C4 N2 D$ R/ N1 KRBD方式 : 本文章重点讨论方式2 `! [. i- j/ c8 k# }
基于内核映射的调用方式,通过Kernel中的RBD模块实现访问后端存储
8 j% @6 K. ~. |+ j! V0 B7 n2 利用QEMU模拟器挂载到虚拟机中
0 A- v I$ E6 R$ c3 librbd方式:API库调用
5 |( {7 {& T4 h+ q- u i/ ]+ v3 S" y; I2 \
二 同一个块存储镜像的多物理机挂载问题
: S) t( a c1 s4 w' [这里我们采用KRBD的方式时,关于这个问题其实可以拆分来分析:8 B9 ]2 E1 ^2 F* Q6 X5 ~; }
1.能不能同一个块设备同时挂载到多个物理机?. W2 Q0 \' A9 c- ?5 t
能,但是互相不识,每个物理机的读写不会影响另一个物理机,也不会在另一个物理机上展示其文件;如果再挂一个新的物理机时,会集中把所有物理机的文件都拷过来;
0 s& [4 E1 B# M( ]0 O( a
0 S+ G( Q. ~# ~$ T关于块设备映射的文件系统格式化" [3 B! T L9 i) G4 H5 I
虽然会多个物理机,但只需要第一次用这个块设备时,将其格式化就好了,后续物理机不要格式化,不然的话,块设备信息全部丢失,其他物理机也很无奈;
* N5 S: D4 z" N这个过程中,会出现不一致性,比如如果两个物理机都建了一个名字相同但大小不同的文件时,会以最后一个建的为准;
! c" }/ b( O: Y t7 x' k7 z* r& H3 R6 f% f, Q8 I2 m) P$ o3 ~6 h
关于同一个块设备,我的建议是最好不要挂载多个物理机上;
4 q2 F7 m) k2 `& r% `挂载多个物理机虽然可以,但如果重新映射挂载物理机时会把其他物理机上文件一起拷贝过来,便会互相影响了;0 v0 j6 n' Q* [5 f2 s7 c# g: O
# ]! Z' X# Y. s% c' }, g' {关于块存储的数据复原
4 D- u; n/ Q, |) t. u5 b: q7 d$ O& R这里是指如果客户机挂掉了,必须用另个客户机时要把挂掉的客户机数据拷贝过来,便出现了同一个块设备挂载多个客户机了,另个客户机此时会复原原来的那个客户机数据的,这里经过小数据的测试验证。
1 ~; H) j9 F0 L5 M4 v) }4 N; C- Q/ @- K! N/ E& `
期间遇到的一些问题
0 b4 J8 v( B. M; `; q& m, v) e5.1 文件系统格式化不需要每次内核映射完毕后都调用,因为格式化意味着清空数据.$ |6 a6 w1 T/ }$ q- @4 W( P
5.2 如果重复umount和mount操作时,不要在mount的目标路径下进行操作,因为会出现mount后调用ls命令不刷新的场景,切记~
7 @3 A& Q' {7 D! B; r d5.3 在快照回滚或者其他场景时偶尔出现下面的问题
$ t3 A. i& _3 C2 l. Q! I2 k: {1 C- g; O
//问题, ]% q" H& o/ q2 ~
mount: wrong fs type, bad option, bad superblock
9 [# H/ }8 U0 g' b+ `
: j7 r. Q1 Z( M//解决& d& z8 ]! P8 \4 r4 r
fsck -t ext4 /dev/rbd/rbd/foo2
. a! Q+ J' e* ~三 RBD模块2 C! ~5 \: ?; e
rbd模块是内核中内置的一种驱动模块,可以驱动Ceph块存储;
8 h) Y+ }+ H4 h8 L' \1 R注意的是3.10.0版本以上内核才会默认集成该驱动。
2 m8 P: ]/ l, B( s. j- n# C$ j8 N7 x) D' Y
//查看RBD模块信息2 C) f) v1 D7 Y
modinfo rbd
2 ?0 Q8 y* E% M1 ~& } v/ _//查看RBD模块所属的软件包
; _* H( c/ z, h1 \8 P. frpm -qf /lib/modules/3.10.0-327.el7.x86_64/kernel/drivers/block/rbd.ko5 S$ h4 k$ {" \* s
四 块存储的一些常见命令
7 V. x5 `$ V* H+ A创建镜像,也可以叫块设备。- d1 N1 r2 Y3 [
rbd create foo2 --size 2048 --image-feature layering --image-shared
1 k' e! G r- H7 L& l' J创建内核映射,将块设备映射到操作系统。
8 i- |, }( o* V6 Z. v; k3 t, jsudo rbd map foo2 --name client.admin1 ]/ w7 ` D8 A7 q
查看块设备映射列表, U# | T' h. u2 z3 C, C' u! j8 E
rbd showmapped
# e9 w8 t C' Z删除块设备映射
' U5 B; d& c; Vsudo rbd unmap /dev/rbd/rbd/foo2- q% D% q* {/ A5 |9 n" l; p
导入导出块设备8 ]6 r) U4 S/ [( a) f$ u
rbd import --image-format 2 /root/test1 rbd/foo2
0 P2 i* v3 k/ \ Erbd export rbd/foo2 /root/test1
/ o- A* Q* |9 }8 [创建快照
2 T8 d) y( l5 R$ p0 ^% N- irbd snap create rbd/foo2@snap1
4 b0 H! y. x' T) T0 a7 U' Z5 N9 v查看快照
5 C" V, t8 n* C- O% O. K9 y. } irbd snap ls rbd/foo25 ~! w C. Y9 `# L% T
回滚快照
C1 @# R: ^( i. ^2 Mrbd snap rollback rbd/foo2@snap13 s+ V& M3 ^$ W9 W
删除快照" j' R& c+ R+ ?5 u$ J
rbd snap rm rbd/foo2@snap1
: H- f: j2 r C- t, Y删除镜像
! m) n* }. ?, W" F4 K9 }rbd rm rbd/foo2% I; P) H( ?& N* m& M l: l
挂载、解挂块设备3 w# d& _* J) x+ P: z
sudo mount -t ext4 -o discard /dev/rbd/rbd/foo2 /mnt/cc3
3 ? n1 k% h- L, qumount /mnt/cc3
& K- ^5 P4 b, s5 @) r8 f: H, t格式化块设备映射
& \2 w0 n* `1 ]1 X# xsudo mkfs.ext4 -m0 /dev/rbd/rbd/foo2
/ s2 l8 @, h2 o; J9 h$ _镜像空间大小
. ]/ V3 k% i& r; prbd diff rbd/foo2 | awk '{ SUM += $2 } END { print SUM/1024/1024 " MB" }'
! Q, \* `+ \0 H, c& I3 M9 FPS: 这个有时在多物理机挂载场景下会不准
3 P7 j0 o/ k9 F- v3 Z
2 ?( ?9 P- h& J& [! a9 k& N4 h! S' B2 f/ z+ e1 \
|
|