- 积分
- 16844
在线时间 小时
最后登录1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?开始注册
x
查看池* x1 ?1 F* i0 T% }% a( F5 f
[root@node-1 ~]# ceph osd pool ls
7 B3 h h9 o; k$ y: N; a9 i0 r1 J, A' x) j/ B2 W y
新建rbd块2 N0 S9 B, U" p
[root@node-1 ~]# rbd create volumes/Test_pressure.img --size 100G --image-format 23 O. A+ ?+ T3 d. o; x3 g3 V
$ a$ L4 K0 K# R( \8 V$ M/ Y4 x查看块信息
! E# I8 L) D S, \[root@node-1 ~]# rbd info -p volumes --image Test_pressure.img! p; n5 `/ O+ e$ f
rbd image 'Test_pressure.img':
& D6 F, s7 W: \& G5 C3 k; L size 100 GiB in 25600 objects
1 O* c/ _' E. q! U, ~& e order 22 (4 MiB objects)- U, A0 z" T3 L
snapshot_count: 07 g. n8 O+ X6 q4 e" b) N! j7 I: [
id: 30d05554c7f23
1 V9 A6 S% X5 B block_name_prefix: rbd_data.30d05554c7f23
' }, T: Z" I* Z. _: H- u( ?% ^ format: 2
7 o# W1 s$ h3 a3 T+ T" [0 [: n features: layering, exclusive-lock, object-map, fast-diff, deep-flatten/ b6 l% H% u4 v' A) Z, _
op_features:
9 M6 P2 q3 Q& P- I% C flags:
' Q6 s6 g0 n2 m- J. D9 f& @* I create_timestamp: Sun Sep 26 16:57:19 2021' c0 z0 v7 }: D; F. h
access_timestamp: Sun Sep 26 16:57:19 2021+ H* V9 {* x" t8 k6 J) w
modify_timestamp: Sun Sep 26 16:57:19 2021, O8 m9 C( O# n, Q# u+ r8 |
( W, e; ^! {0 k- i* m将rbd块映射到主机(报错)7 l& X- M( I+ J. J
[root@node-1 ~]# rbd map volumes/Test_pressure.img 5 f6 n$ \3 R) q
rbd: sysfs write failed
$ a( u" e! j# K4 U$ O. k4 NRBD 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".8 v w( v9 ^2 I% a( t; m, {
In some cases useful info is found in syslog - try "dmesg | tail".5 ~/ v+ N" r# M) k5 Q. `6 W
rbd: map failed: (6) No such device or address _, c3 J6 f" C% a$ A7 r8 E/ C
" @, g) `% l5 Z
删除/ [& ^, w6 u4 D# n! R
[root@node-1 ~]# rbd rm -p volumes --image Test_pressure.img- T! `4 o' M- T# a# w: m+ W9 }6 ]
Removing image: 100% complete...done.6 z. x8 J: c3 ?
$ p: p1 S6 Z3 U4 Y- o# q5 i+ s故障排查:& A: u3 ?0 C( v z5 ?1 e: N
rbd 块 ceph 支持两种格式:) B% @. x7 R8 i8 K+ F( c
# rbd create volumes/Test_pressure.img --size 100G --image-format 2
6 H( n( }% C/ D( X8 v
1 o* ?, }3 E9 y) y- s--image-format format-id
# S' B2 ?9 n% P选择用哪个对象布局,默认为 1 。0 N+ Y3 x: D. B
format 1 - 新建 rbd 映像时使用最初的格式。此格式兼容所有版本的 librbd 和内核模块,但是不支持较新的功能,像克隆。! H6 U# I" j2 T& F- k" Q
format 2 - 使用第二版 rbd 格式,librbd 和 3.11 版以上内核模块才支持(除非是分拆的模块)。此格式增加了克隆支持,使得扩展更容易,还允许以后增加新功能。! p7 S7 H- V" k
' F1 W9 R/ r" a5 Q& E0 ~5 v" P
4 b+ @2 n4 K- G+ V
为使用rbd块新特性,使用格式2,在map时发生以上报错:
5 Q+ O1 P, @* i' P# [
: c. p3 m1 }$ H9 ?' r4 b/ w查找相关资料,找到信息如下:" h; z/ Q, E% s
笔者安装的是nautilus版本,新建rbd块指定格式2,默认格式2的rbd块支持如下特性,默认全部开启;& ]% @9 n. H* c# u
layering: 支持分层- o3 k. |! E$ C7 v
striping: 支持条带化 v2, L3 |+ \6 E |% v
exclusive-lock: 支持独占锁1 z/ y$ s6 m0 T: w: h2 g2 @
object-map: 支持对象映射(依赖 exclusive-lock )5 p, b5 _$ w! ~, i* D+ b- D2 {# X
fast-diff: 快速计算差异(依赖 object-map )( S0 [7 f! k% C6 }% B! i
deep-flatten: 支持快照扁平化操作2 E' ?" Z2 _$ A! T
journaling: 支持记录 IO 操作(依赖独占锁)3 e' s7 [# G& c3 E0 V( y4 m
0 P; ?1 `: L \( ~
! u- W$ b1 G/ I7 u使用系统为centos7.6 ,内核版本3.10.0-957.10.1.el7.x86_64,根据报错内容提示可知,服务器系统内核版本,不支持有些格式2的新特性导致。可以使用 --image-feature 选项指定使用特性,不用全部开启。我们的需求仅需要使用快照等特性,开启layering即可,配置方式如下:4 O" H* S3 b$ n
[root@node-1 ~]# rbd create volumes/Test_pressure.img --size 100G --image-format 2 --image-feature layering# z0 d' M A; s- O5 p6 S7 |
* P/ M+ m- V% j+ I9 j映射到物理机
; t- O% S4 q1 q9 S; I" z[root@node-1 ~]# rbd map volumes/Test_pressure.img; m; K9 W' R2 T
/dev/rbd0
, }- n, C! r- }" D) @9 }% ~, Q3 L% q5 s) i3 |
挂载
: a8 t+ O) q/ c. d$ u[root@node-1 ~]# mkfs.xfs /dev/rbd0 0 ]( T" g7 _" }8 a* V& Z4 A
[root@node-1 ~]# mount /dev/rbd0 /mnt/
+ g; {0 `3 H: Y- B: J5 t$ u6 h[root@node-1 ~]# mkdir -p /mnt/test1 [; `2 w' z. }. H) v( t
[root@node-1 ~]# ll /mnt/
- |# U' q5 C& k) Z5 D: b( etotal 0
1 M+ c8 X/ u$ Gdrwxr-xr-x 2 root root 6 Sep 26 17:53 test
$ Y7 y' t! ]# A# s3 w. F9 d
: ^$ g' x* C. Q P [; C! Z# 经测试,内核版本3.10,仅支持此特性(layering),其它特性需要使用更高版本内核,或者从新编译内核加载特性模块才行。' }, m' r8 Y% G- U
# 看看format 1 format 2的区别在哪# x( l' j: \" I7 g
format: 2
- C. E% k, J5 T U# p features: layering, exclusive-lock, object-map, fast-diff, deep-flatten # 格式2支持的功能较多,但是低内核又不支持那么多,只能把其他的功能禁用掉使用, u( [7 R. d1 ^+ q5 n
H) r" s7 f, @' C, Q, i8 v2 @
' |6 u2 }4 ]( i- r卸载硬盘; Q: \) Y2 k" i1 u, s/ b
[root@node-1 ~]# rbd unmap volumes/Test_pressure.img. [: S, o% M/ k! F0 M3 ?, A
3 U9 p5 [4 s. D) x8 T删除块6 U" y4 Y' |9 Q" y1 r. n
[root@node-1 ~]# rbd rm -p volumes --image Test_pressure.img3 q9 b* p" f$ {' |* g
7 b4 v9 ^* X% e5 B* Z* n, i. n7 ^, E$ R( Y1 x: S2 v, M
一 块存储调用方式# ^* [1 Z% ]) Q6 h) I
Ceph的块存储有多种使用方式:& I% a! V% E& a. h& ]
1 KRBD方式 : 本文章重点讨论方式/ t' A) d" g0 F
基于内核映射的调用方式,通过Kernel中的RBD模块实现访问后端存储/ B0 n1 G( d; Y8 v
2 利用QEMU模拟器挂载到虚拟机中
, F/ q- T$ Z7 V4 N3 librbd方式:API库调用+ |3 M) R2 j8 F( t B5 m
' v. I, V I0 q% i( P
二 同一个块存储镜像的多物理机挂载问题
" ?* `+ x0 ]" g9 N$ R这里我们采用KRBD的方式时,关于这个问题其实可以拆分来分析:
* B5 P- a/ G: h/ B* w1.能不能同一个块设备同时挂载到多个物理机?
0 }+ `/ W5 m! O0 O V3 L3 x能,但是互相不识,每个物理机的读写不会影响另一个物理机,也不会在另一个物理机上展示其文件;如果再挂一个新的物理机时,会集中把所有物理机的文件都拷过来;
9 l: p8 h- V1 q+ h+ k* y1 }4 E2 l$ z) u
关于块设备映射的文件系统格式化
. @6 b5 l* L ^# F" ?虽然会多个物理机,但只需要第一次用这个块设备时,将其格式化就好了,后续物理机不要格式化,不然的话,块设备信息全部丢失,其他物理机也很无奈;
* N/ e+ z3 e% w! h: f' Q; D$ H- ^# I这个过程中,会出现不一致性,比如如果两个物理机都建了一个名字相同但大小不同的文件时,会以最后一个建的为准;
$ S; V) Q( {5 T7 ]7 z
2 V4 @5 {6 Y1 N关于同一个块设备,我的建议是最好不要挂载多个物理机上;
5 T) r# c+ e, l# y3 @挂载多个物理机虽然可以,但如果重新映射挂载物理机时会把其他物理机上文件一起拷贝过来,便会互相影响了;
" ]" h8 a. \& p$ S; H/ k6 I& n% }+ b& M( [3 r, H3 }6 g
关于块存储的数据复原5 [/ U4 M6 l" U
这里是指如果客户机挂掉了,必须用另个客户机时要把挂掉的客户机数据拷贝过来,便出现了同一个块设备挂载多个客户机了,另个客户机此时会复原原来的那个客户机数据的,这里经过小数据的测试验证。
( u% F9 M+ z, b. M) I! y& u% G. w2 w4 O; ?2 Q# W. }. }" b/ p4 w6 a
期间遇到的一些问题
J f' P+ N/ ~/ q" A2 q; a5.1 文件系统格式化不需要每次内核映射完毕后都调用,因为格式化意味着清空数据.
e/ X/ n" r5 q @7 o5.2 如果重复umount和mount操作时,不要在mount的目标路径下进行操作,因为会出现mount后调用ls命令不刷新的场景,切记~
+ L! \4 D4 ]9 g7 u c5.3 在快照回滚或者其他场景时偶尔出现下面的问题
6 F1 j. M9 @* D( _% [. h3 x+ D' {; o- x) |3 @$ {' w5 T2 {
//问题: C3 q9 F9 d. U- ]; Y( K
mount: wrong fs type, bad option, bad superblock
r) j/ }: \$ P$ O9 E/ Y% J
' G1 M* @7 ?8 W//解决3 W* n, I6 U% ?. \4 t: e
fsck -t ext4 /dev/rbd/rbd/foo2
) D2 Q( w/ G- P* D5 _' O三 RBD模块
! p& t9 H4 K, H# Drbd模块是内核中内置的一种驱动模块,可以驱动Ceph块存储;
1 O O; l6 e, ?# G' V8 ?; O5 O2 L注意的是3.10.0版本以上内核才会默认集成该驱动。% E. k' A" a2 F/ @- I! @6 V7 T/ e
. m' C& x: b2 @* J
//查看RBD模块信息& U$ W2 M3 t- r; W
modinfo rbd
( j5 z* [: C. z+ I) E5 r//查看RBD模块所属的软件包
5 y" K I& H' |+ I0 \! Z0 `6 Qrpm -qf /lib/modules/3.10.0-327.el7.x86_64/kernel/drivers/block/rbd.ko
8 [; _$ H2 W/ z四 块存储的一些常见命令# ^4 b: m; {& x6 N
创建镜像,也可以叫块设备。
" {& k- L. i+ b, N+ Yrbd create foo2 --size 2048 --image-feature layering --image-shared/ ?4 W! c" }/ h2 a; Y
创建内核映射,将块设备映射到操作系统。/ k6 n: W0 G6 [
sudo rbd map foo2 --name client.admin6 ^' J, V) j8 V7 ?( Y
查看块设备映射列表: \, P% c* ^+ V: N
rbd showmapped
) g- i) X* M; r删除块设备映射! l# F5 I3 ?' q7 y5 O" y
sudo rbd unmap /dev/rbd/rbd/foo2$ f0 w% J) o) @) W: e% P0 a) n
导入导出块设备
% p9 k6 o1 N( b% f- \6 Lrbd import --image-format 2 /root/test1 rbd/foo2
A" H- x" L+ U7 ]rbd export rbd/foo2 /root/test1( T4 G+ J2 y- Y2 _5 s, O& p
创建快照- {, a! a$ E& u$ t2 T/ T
rbd snap create rbd/foo2@snap12 w) n$ l7 }# d/ A: f3 U, g# R% P) ~4 r
查看快照
, h6 C* K' N. Y( w. crbd snap ls rbd/foo2. K; W4 S& m1 B0 N
回滚快照
. h. |$ A; ?4 O4 E* S7 D# A2 D; qrbd snap rollback rbd/foo2@snap13 A- O0 d* T2 m
删除快照
3 v. H ]; L9 b/ W7 ~' Irbd snap rm rbd/foo2@snap14 T4 }9 z9 Q6 p$ x" C6 R" q
删除镜像
; ]! x7 T& X; s5 Y( `' S+ Trbd rm rbd/foo2
* H4 W8 }; z; n挂载、解挂块设备- A- ^& A S. H8 \' f- ]) _
sudo mount -t ext4 -o discard /dev/rbd/rbd/foo2 /mnt/cc3# }* }$ J) D# f/ F
umount /mnt/cc3
1 V9 {1 x2 L1 T, h+ ?格式化块设备映射% H2 r8 _/ f, {- v% j% \7 x
sudo mkfs.ext4 -m0 /dev/rbd/rbd/foo2, Y6 J" Y& e$ p
镜像空间大小
$ {; s& k! G5 @ v+ Z: Arbd diff rbd/foo2 | awk '{ SUM += $2 } END { print SUM/1024/1024 " MB" }'9 T# `- O" w3 P
PS: 这个有时在多物理机挂载场景下会不准" G9 |* g) V; z
4 w. \0 ~* g1 w+ ~
/ W8 H" v) t. S) P; n/ x6 x |
|