|
|
查看池$ T* F1 ]( g$ y% Y
[root@node-1 ~]# ceph osd pool ls
$ A0 M2 d5 Q8 G+ P: w% i- F; {) L9 \5 c+ \* k
新建rbd块
, s- a! \+ a3 b[root@node-1 ~]# rbd create volumes/Test_pressure.img --size 100G --image-format 2
0 L. @, |. v4 r" i
* T2 |6 j* W) T& a+ K B% i查看块信息
2 l- s; g/ v2 [[root@node-1 ~]# rbd info -p volumes --image Test_pressure.img
' t# P6 |) {3 E6 i5 prbd image 'Test_pressure.img':, d& C3 b0 B B8 M" ~: N7 l
size 100 GiB in 25600 objects( h" k: }/ {8 w* x. S# ^" h
order 22 (4 MiB objects)% q9 C7 r! b4 _, q* R$ r
snapshot_count: 0
, \0 D: g4 q6 F1 O n0 `% s id: 30d05554c7f23. B8 G. J5 W6 C" V. K6 [6 _7 R
block_name_prefix: rbd_data.30d05554c7f233 P( V5 J: \5 B# n: F
format: 2& Z" Y2 q8 t, W& ~% D! `
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
# H7 h: Y/ J8 O1 P2 a op_features:
( y( C0 q+ s! R) D# W- ~3 D flags: 7 Z, g: Z. O( |$ L2 U9 z1 r. |
create_timestamp: Sun Sep 26 16:57:19 2021! p8 E6 e+ P3 n6 M8 H# u8 ~* \
access_timestamp: Sun Sep 26 16:57:19 2021
- ?$ ^5 E0 u! H& e# R) O5 A P) G modify_timestamp: Sun Sep 26 16:57:19 2021% w9 \% y8 _. @' N8 f G( Y3 m
- w# `3 u. m* q% x将rbd块映射到主机(报错)
: a* u; ~9 e8 j4 P3 R[root@node-1 ~]# rbd map volumes/Test_pressure.img
8 ~( i2 u3 G" Q& P8 q' Prbd: sysfs write failed
+ k" F( L; | iRBD 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".
: a7 a4 O7 F/ a- _9 fIn some cases useful info is found in syslog - try "dmesg | tail". `0 T2 p- U+ \4 U
rbd: map failed: (6) No such device or address( r7 H( h- |6 I
5 R- ^8 K8 v4 \& ?- `. E8 R
删除' p7 ? I* T( J, Q! p
[root@node-1 ~]# rbd rm -p volumes --image Test_pressure.img
& O8 @- I$ y( \* W5 m1 Y8 p) H" ORemoving image: 100% complete...done.
3 O I+ W4 g8 d3 I% Y' C4 `& x* g6 O$ D# ~+ R u
故障排查:9 A' J! t! s& J& o* V- b# z
rbd 块 ceph 支持两种格式:
, @1 W [) ]& p+ V# rbd create volumes/Test_pressure.img --size 100G --image-format 2
1 s8 _& Y% G( V" Y6 S: ?' T* W. q0 R& Q) K; g& ?
--image-format format-id& x, a; w7 U# v- K) t* v& f
选择用哪个对象布局,默认为 1 。
7 k8 _2 ^6 B: w8 sformat 1 - 新建 rbd 映像时使用最初的格式。此格式兼容所有版本的 librbd 和内核模块,但是不支持较新的功能,像克隆。9 n1 T$ L, B, d* D' a9 i7 H
format 2 - 使用第二版 rbd 格式,librbd 和 3.11 版以上内核模块才支持(除非是分拆的模块)。此格式增加了克隆支持,使得扩展更容易,还允许以后增加新功能。
" ]* C* } Y1 {5 ?) m+ a/ `" a: b$ w
' ?( d* ^1 _1 d( t. [* b; b; R为使用rbd块新特性,使用格式2,在map时发生以上报错:! h% ^8 f5 y) b. f
/ Z4 h+ k* [( b, Z: j1 X2 \ m查找相关资料,找到信息如下:
: w# g2 m. d7 U% D0 ?! Z" W! Q+ H笔者安装的是nautilus版本,新建rbd块指定格式2,默认格式2的rbd块支持如下特性,默认全部开启;
! D, ?6 d. I' R f& H4 alayering: 支持分层
8 i; r4 ^8 ^7 R: ]striping: 支持条带化 v2; Y; f0 R/ X; N6 C& d
exclusive-lock: 支持独占锁
/ d ^/ ^) @4 q% sobject-map: 支持对象映射(依赖 exclusive-lock )% K' U& F/ |5 c
fast-diff: 快速计算差异(依赖 object-map )
. P; ~0 G# p& R- {& ^. udeep-flatten: 支持快照扁平化操作
9 F [8 y, `* H) ^journaling: 支持记录 IO 操作(依赖独占锁)
6 l5 i U. L3 `
8 v. L1 }4 r! P# E# }' I' l) R5 t6 n, [6 m; N- V& T
使用系统为centos7.6 ,内核版本3.10.0-957.10.1.el7.x86_64,根据报错内容提示可知,服务器系统内核版本,不支持有些格式2的新特性导致。可以使用 --image-feature 选项指定使用特性,不用全部开启。我们的需求仅需要使用快照等特性,开启layering即可,配置方式如下:3 N7 O5 Z! W1 P3 `
[root@node-1 ~]# rbd create volumes/Test_pressure.img --size 100G --image-format 2 --image-feature layering Q+ P" X1 ]" W
3 \, V. O; H- L' @映射到物理机
; L3 g s, C# I8 q$ u5 O[root@node-1 ~]# rbd map volumes/Test_pressure.img
7 |0 j6 g. [/ c) V7 U: m/dev/rbd04 s' ^8 m7 w* N5 F9 D
1 f, u7 c) e1 @( M3 d挂载4 G) s; @3 D V& H
[root@node-1 ~]# mkfs.xfs /dev/rbd0
. I" o; i; \- {" h" O[root@node-1 ~]# mount /dev/rbd0 /mnt/7 e" P* C a- B' F! A8 h0 X
[root@node-1 ~]# mkdir -p /mnt/test
8 I0 E/ i% b: ~3 R3 E2 T* D[root@node-1 ~]# ll /mnt/
& H% M; Z( b$ v9 P% `6 ztotal 0
6 Z% s$ F, [* J7 adrwxr-xr-x 2 root root 6 Sep 26 17:53 test9 v, u, q3 B0 R2 ^; r2 u
. L8 e3 i; y0 d! ~$ S
# 经测试,内核版本3.10,仅支持此特性(layering),其它特性需要使用更高版本内核,或者从新编译内核加载特性模块才行。; X1 z; B/ Z- l
# 看看format 1 format 2的区别在哪
, M0 I$ a9 V4 B7 V @ format: 2
0 m. l! h# r g/ ~: H- L8 i1 e; h features: layering, exclusive-lock, object-map, fast-diff, deep-flatten # 格式2支持的功能较多,但是低内核又不支持那么多,只能把其他的功能禁用掉使用/ n* y/ H5 o& W, ]! F7 ^
0 t/ y5 }; d% k" {; }& k/ w. { r/ g3 D j
卸载硬盘6 Z; a& w0 F* Y; P/ x. p7 k% Q7 l
[root@node-1 ~]# rbd unmap volumes/Test_pressure.img
# A9 x5 f& x6 h0 p! Y8 |) G; G3 [% E# g4 ~7 y0 ?( y7 J8 u) C
删除块
9 n% a4 w5 m( o# P9 G. x$ J3 `[root@node-1 ~]# rbd rm -p volumes --image Test_pressure.img
/ g6 A8 q+ M, @) C
& g1 Z' z a* {3 g7 B: _
5 z. f) [2 t, p i8 X. ~, o一 块存储调用方式# F, Z3 P/ a. j' j
Ceph的块存储有多种使用方式:
' c# O1 m, p( @5 k6 _. ?9 H' w1 KRBD方式 : 本文章重点讨论方式! }0 L- Q/ {% g; W# R
基于内核映射的调用方式,通过Kernel中的RBD模块实现访问后端存储
; _1 F+ _" H! e1 c2 利用QEMU模拟器挂载到虚拟机中
. B5 I, {$ N& M" B2 W3 librbd方式:API库调用
- Y2 l4 @0 u$ J" v2 ?, f/ N$ Y+ | g7 t- i
二 同一个块存储镜像的多物理机挂载问题
6 s: z$ h' {- p+ T# v. h/ f这里我们采用KRBD的方式时,关于这个问题其实可以拆分来分析:# N+ T& n& V8 f
1.能不能同一个块设备同时挂载到多个物理机?% p0 s) x8 g, p
能,但是互相不识,每个物理机的读写不会影响另一个物理机,也不会在另一个物理机上展示其文件;如果再挂一个新的物理机时,会集中把所有物理机的文件都拷过来;
' `& X/ A$ O6 i! X) }
: v& ^3 |* p* }$ @' X6 ?/ T关于块设备映射的文件系统格式化# z( k ]0 z# R9 L9 n7 r" y
虽然会多个物理机,但只需要第一次用这个块设备时,将其格式化就好了,后续物理机不要格式化,不然的话,块设备信息全部丢失,其他物理机也很无奈;: ^0 Y8 N4 }8 q
这个过程中,会出现不一致性,比如如果两个物理机都建了一个名字相同但大小不同的文件时,会以最后一个建的为准;
( C% a7 B O/ A8 ^+ A+ q" `- M. N9 y* s b/ Z/ y2 y) G
关于同一个块设备,我的建议是最好不要挂载多个物理机上;
. \3 M* E( b9 k9 _9 s* Z6 N挂载多个物理机虽然可以,但如果重新映射挂载物理机时会把其他物理机上文件一起拷贝过来,便会互相影响了;" Q% ^% P' n# G; ~( \
% I w/ ?0 P. u _2 @& x) ?关于块存储的数据复原
5 o; B9 ]$ c f% a$ b9 N这里是指如果客户机挂掉了,必须用另个客户机时要把挂掉的客户机数据拷贝过来,便出现了同一个块设备挂载多个客户机了,另个客户机此时会复原原来的那个客户机数据的,这里经过小数据的测试验证。
( r& ]& Y( E0 L4 g: {* A/ ~/ \, g& d$ n, `; b. z
期间遇到的一些问题* h8 v+ H6 X1 R! a1 F) x: ~) {
5.1 文件系统格式化不需要每次内核映射完毕后都调用,因为格式化意味着清空数据.
$ J' B8 V* L/ ]& j* ?: `5.2 如果重复umount和mount操作时,不要在mount的目标路径下进行操作,因为会出现mount后调用ls命令不刷新的场景,切记~
* }, ?9 ]% E# m5 F; P5.3 在快照回滚或者其他场景时偶尔出现下面的问题
2 Q: @# u5 l: S4 S+ j! i" b$ r% W$ p6 Y- r* f
//问题
. A2 B) h' d9 h imount: wrong fs type, bad option, bad superblock
9 _- r6 B- V X# @6 H, x
|% O0 {* ?$ r1 s" I% o//解决$ v% b; i% k) q# F5 d K! d
fsck -t ext4 /dev/rbd/rbd/foo2' c z4 P" k6 W! M
三 RBD模块
7 f# x3 t3 f8 e: Z6 A; Frbd模块是内核中内置的一种驱动模块,可以驱动Ceph块存储;
! F0 s& r: ]) d+ X% q7 |注意的是3.10.0版本以上内核才会默认集成该驱动。
L8 S4 I7 s+ U7 Z% S' H, q5 k% ^" U4 D! [
//查看RBD模块信息
) u8 N% r, s! X0 H+ f) O7 J1 dmodinfo rbd0 N& k) e: K' W0 @+ k
//查看RBD模块所属的软件包
8 m) ?) j" }7 {, U$ Mrpm -qf /lib/modules/3.10.0-327.el7.x86_64/kernel/drivers/block/rbd.ko
8 Y0 x! g8 ?0 W* J# i9 T四 块存储的一些常见命令
1 C' v1 `5 ?* E1 }" L创建镜像,也可以叫块设备。
/ q* x' w! T. ^2 v% D# C+ krbd create foo2 --size 2048 --image-feature layering --image-shared) V1 T* G+ Q$ T
创建内核映射,将块设备映射到操作系统。
% G5 W# k* w7 d7 J: q. A( N+ |sudo rbd map foo2 --name client.admin
+ Z. A9 @+ C) d查看块设备映射列表+ ~' m* |4 s: U/ x* l4 D, _
rbd showmapped; E1 [2 [; T1 B2 J3 i _0 `
删除块设备映射
4 h/ w2 o1 i y# T6 C# Q# a0 qsudo rbd unmap /dev/rbd/rbd/foo2
( @. \0 U% l! s" x- {导入导出块设备+ S0 d# n4 t( I/ R- X0 p
rbd import --image-format 2 /root/test1 rbd/foo2
; s6 N. y I" S2 F. Vrbd export rbd/foo2 /root/test1
# {: }) j, p* x创建快照9 F" r1 p5 {) W
rbd snap create rbd/foo2@snap1
; i) V, V# a5 h; `' \9 L5 Y3 W查看快照2 m9 j/ N3 r) s+ {: _8 R
rbd snap ls rbd/foo2% V8 [/ ^* N+ }, [+ R
回滚快照1 {2 J6 q( G( y# Q8 S. W, d1 e6 n* Z/ u
rbd snap rollback rbd/foo2@snap1
6 A$ \ \& @2 [' V+ e0 h删除快照
h5 H% D* o3 b3 `9 orbd snap rm rbd/foo2@snap1
4 J& M# U) K% N删除镜像
) C- C8 l0 c+ T) S& }4 _8 ~rbd rm rbd/foo2) o* M, y; ?' x% h6 o+ y3 N1 @
挂载、解挂块设备
5 x1 [5 p+ v _# g: Fsudo mount -t ext4 -o discard /dev/rbd/rbd/foo2 /mnt/cc3
* W7 B, M- e. i* C }umount /mnt/cc3& m) R. U+ |5 u, b( A
格式化块设备映射
9 I' L' @5 Z) N0 ?. y Y6 d( Csudo mkfs.ext4 -m0 /dev/rbd/rbd/foo2
) C) N! w! v" q镜像空间大小
# [& U' x+ t+ o/ t& J1 l! [, F) prbd diff rbd/foo2 | awk '{ SUM += $2 } END { print SUM/1024/1024 " MB" }'
; ]* B# }0 T* G6 j% x! FPS: 这个有时在多物理机挂载场景下会不准
3 V* P4 q# L& d6 N( q8 n% h7 C' @
0 h) p4 `5 c5 G! g& Q
|
|