|
|
查看池
4 G4 ^8 |( |7 `9 [[root@node-1 ~]# ceph osd pool ls* j, h: P0 T: |/ w, x
/ A3 @/ Q! x4 z7 ?3 Z( f% x* t i
新建rbd块3 F7 C5 w2 W+ v2 Q# `
[root@node-1 ~]# rbd create volumes/Test_pressure.img --size 100G --image-format 2+ n& R. ~# l/ T" }" m8 t8 R3 r
" a7 f/ R' w0 @查看块信息$ C- J5 g& R( c4 Q. v7 G6 D
[root@node-1 ~]# rbd info -p volumes --image Test_pressure.img
2 O+ q3 s/ j1 @rbd image 'Test_pressure.img':' s. c4 B! [2 x5 |5 z b
size 100 GiB in 25600 objects
2 ~! y+ H! v p) Y, Q5 u' q3 ~ order 22 (4 MiB objects)7 n' s& Z4 b3 A$ V
snapshot_count: 0
K/ u$ L `+ e/ W id: 30d05554c7f23
, R. X4 Z) i* f, e block_name_prefix: rbd_data.30d05554c7f23: z O% r0 G z8 ~- Y
format: 2
* Q3 }% Y; g3 m, o features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
' X; N) g! Z+ d1 q: B! J9 O+ H- O+ f7 O op_features:
2 L; m1 k; S5 Y! ]9 f7 [ flags: $ t$ v' G$ l0 ]
create_timestamp: Sun Sep 26 16:57:19 2021
! x V" n# Q$ l; l& H access_timestamp: Sun Sep 26 16:57:19 2021
7 S! R# `6 n; g% p; L" F! ^ modify_timestamp: Sun Sep 26 16:57:19 2021 n2 _( O( i3 X, b( Z7 M6 v
+ ~9 y6 Z, b7 B4 q0 _8 |将rbd块映射到主机(报错)1 w8 _2 z4 a& u4 [
[root@node-1 ~]# rbd map volumes/Test_pressure.img
7 E0 r3 k" x4 [ T7 C/ yrbd: sysfs write failed" A3 ^( l& F) ]3 r4 |: W9 m
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"./ o# O! w g1 K3 _. U5 y3 y
In some cases useful info is found in syslog - try "dmesg | tail".
" u( C+ G2 e) u2 Trbd: map failed: (6) No such device or address4 W/ l4 j9 i. p$ V; ^
5 K( O- ~9 [% o% f) {7 z删除5 F2 A {' q& k7 G" z, S
[root@node-1 ~]# rbd rm -p volumes --image Test_pressure.img
8 a4 n+ |+ @$ k" C; _0 X6 ?Removing image: 100% complete...done.4 G2 `' M- R/ w1 r
0 h8 W8 J& H0 ~
故障排查:
1 W1 @, B1 s5 b6 |' \/ B/ A$ n8 H; _+ c5 [rbd 块 ceph 支持两种格式:
2 T4 e% z( b% g6 j' D2 R0 k# rbd create volumes/Test_pressure.img --size 100G --image-format 2 6 M. P9 `' g7 ?8 C! W5 R o8 Z
$ u& ]$ c [3 p7 j8 z% D--image-format format-id
- X) p$ d& h4 U8 D选择用哪个对象布局,默认为 1 。% s% G- L/ ]0 r5 g0 K) R
format 1 - 新建 rbd 映像时使用最初的格式。此格式兼容所有版本的 librbd 和内核模块,但是不支持较新的功能,像克隆。# p# I, p- G1 b
format 2 - 使用第二版 rbd 格式,librbd 和 3.11 版以上内核模块才支持(除非是分拆的模块)。此格式增加了克隆支持,使得扩展更容易,还允许以后增加新功能。& z* y! x) {: q/ @3 T
; M! ?: J3 B1 O3 k5 L3 ^5 U
5 C) {- X- F/ j$ r/ j
为使用rbd块新特性,使用格式2,在map时发生以上报错:" r! u+ K% Z8 u
1 w. S3 _- H( S2 O0 {9 d
查找相关资料,找到信息如下:: Z: p5 ]5 W! D# e1 U
笔者安装的是nautilus版本,新建rbd块指定格式2,默认格式2的rbd块支持如下特性,默认全部开启;5 Y, d+ U6 `- J7 G1 j
layering: 支持分层
& D( T5 K2 H8 p# astriping: 支持条带化 v2- m* x) o" p" ~3 D% _8 k
exclusive-lock: 支持独占锁( @/ d- u; k) t N0 l3 h3 @
object-map: 支持对象映射(依赖 exclusive-lock )
7 a6 [3 C; F u5 gfast-diff: 快速计算差异(依赖 object-map )$ c& U- u4 T2 _
deep-flatten: 支持快照扁平化操作
7 Y; s9 m* ?+ ]; ]journaling: 支持记录 IO 操作(依赖独占锁)% ]) V2 }1 ?- c/ a7 j
/ b2 @! c# j/ v" Z% M# G e, n: T/ d: u; }, {4 E
使用系统为centos7.6 ,内核版本3.10.0-957.10.1.el7.x86_64,根据报错内容提示可知,服务器系统内核版本,不支持有些格式2的新特性导致。可以使用 --image-feature 选项指定使用特性,不用全部开启。我们的需求仅需要使用快照等特性,开启layering即可,配置方式如下:9 V# i4 U- ?) R# B4 [
[root@node-1 ~]# rbd create volumes/Test_pressure.img --size 100G --image-format 2 --image-feature layering) X: Z! a1 {. W
6 s9 g: {- Y3 Y映射到物理机
7 A3 h2 U7 t$ g/ v2 u# K[root@node-1 ~]# rbd map volumes/Test_pressure.img
% A3 f6 O$ E3 X9 U* W4 W/dev/rbd0' d) p$ h5 x3 t4 S. v6 {& F
6 a! [# F3 d, g9 M1 T% c& K$ C
挂载
5 x; X, E) m, {1 J; f3 }9 x" E3 K$ c[root@node-1 ~]# mkfs.xfs /dev/rbd0
2 A+ J- `7 g/ R" B[root@node-1 ~]# mount /dev/rbd0 /mnt/
8 U: p+ r- L; L/ a4 e S0 E7 A[root@node-1 ~]# mkdir -p /mnt/test( K7 G3 g3 q: r
[root@node-1 ~]# ll /mnt/
0 Q+ f5 I B2 ]) s9 stotal 0/ s: P$ C' f: p3 v4 G% K
drwxr-xr-x 2 root root 6 Sep 26 17:53 test
; ?, ^, Z$ w- [3 O; @9 q3 Z7 U; o1 z t$ w) w. C6 p
# 经测试,内核版本3.10,仅支持此特性(layering),其它特性需要使用更高版本内核,或者从新编译内核加载特性模块才行。0 w3 z/ j5 r3 G# M7 m }5 W
# 看看format 1 format 2的区别在哪4 v; a7 w7 M" y
format: 2$ N- f t Z! m" o9 g
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten # 格式2支持的功能较多,但是低内核又不支持那么多,只能把其他的功能禁用掉使用- i9 d( d3 Z: R* s* k1 b# g/ B% ]
4 r9 x7 C* }6 T$ Y$ ]
( P4 M/ \: u1 R! R卸载硬盘 |& E, Z9 Z( Q! j9 ?0 y, y
[root@node-1 ~]# rbd unmap volumes/Test_pressure.img9 l5 v' M0 i) Y! O% A* |! }8 F
% e1 C+ G) P9 \+ G" B5 N8 c
删除块
: `0 i# I( r& l; H[root@node-1 ~]# rbd rm -p volumes --image Test_pressure.img* A/ Z4 g/ m9 [ Y- n2 _
! s+ O H% D; I9 u" {* M+ i
- K' `2 c+ |; u: F一 块存储调用方式
9 o+ x8 L, X% P& l! l6 wCeph的块存储有多种使用方式:- V) Y' @6 ]$ k$ g6 p
1 KRBD方式 : 本文章重点讨论方式) d* Z/ i* o. u/ Q9 M
基于内核映射的调用方式,通过Kernel中的RBD模块实现访问后端存储/ @5 @. x2 P( U
2 利用QEMU模拟器挂载到虚拟机中& r! Z5 `% y, {$ _' v; [
3 librbd方式:API库调用
) R9 Q" P" o- ?- s3 V1 ^
! R! ?. a" o, J8 Y! ^, S, p8 `二 同一个块存储镜像的多物理机挂载问题) v/ }) y$ L4 H8 i* ] y2 A
这里我们采用KRBD的方式时,关于这个问题其实可以拆分来分析:7 q* a1 n& W3 B i- c f4 c1 y
1.能不能同一个块设备同时挂载到多个物理机?) X- J: _8 R+ ?) a* ?1 g
能,但是互相不识,每个物理机的读写不会影响另一个物理机,也不会在另一个物理机上展示其文件;如果再挂一个新的物理机时,会集中把所有物理机的文件都拷过来;& c/ k0 o$ r& d8 P) m
$ M6 D( |& y* m, j' Z
关于块设备映射的文件系统格式化" R$ P5 w' n) F% ^( E9 F' \
虽然会多个物理机,但只需要第一次用这个块设备时,将其格式化就好了,后续物理机不要格式化,不然的话,块设备信息全部丢失,其他物理机也很无奈;
& n8 \9 x) W; N8 H, h* g6 n这个过程中,会出现不一致性,比如如果两个物理机都建了一个名字相同但大小不同的文件时,会以最后一个建的为准;+ P) v' x5 e! C4 ?+ L9 c3 f
. e% o: }# h- w1 j
关于同一个块设备,我的建议是最好不要挂载多个物理机上;* v0 m; R, ^" u. p6 s
挂载多个物理机虽然可以,但如果重新映射挂载物理机时会把其他物理机上文件一起拷贝过来,便会互相影响了;$ u7 ?2 o& ^3 h
5 H: I5 @9 t% A. O
关于块存储的数据复原
E# s+ N. q) Y5 q0 j4 U6 N5 C9 @+ _* v这里是指如果客户机挂掉了,必须用另个客户机时要把挂掉的客户机数据拷贝过来,便出现了同一个块设备挂载多个客户机了,另个客户机此时会复原原来的那个客户机数据的,这里经过小数据的测试验证。
1 L' t0 Z) G" I+ k9 \
& U9 T+ M, S! Z- O4 M& [, u期间遇到的一些问题
d$ a+ p8 D @5.1 文件系统格式化不需要每次内核映射完毕后都调用,因为格式化意味着清空数据.
& X+ k' N* T, [* y5.2 如果重复umount和mount操作时,不要在mount的目标路径下进行操作,因为会出现mount后调用ls命令不刷新的场景,切记~
1 F/ F* j$ ~( }. ^' i5.3 在快照回滚或者其他场景时偶尔出现下面的问题
2 P) J9 [3 m9 B; P! L- P. m: l0 l M5 O8 b( p
//问题
+ i7 Y; F) ]8 Nmount: wrong fs type, bad option, bad superblock
# i0 P! A: E+ Y" K0 N- u9 f
G! H; [1 `4 ^. o* D//解决* h8 p1 F' h5 _8 E% `4 m( r
fsck -t ext4 /dev/rbd/rbd/foo27 X+ i$ w# g- o$ L$ i
三 RBD模块
; _7 Q7 p @( R3 g: A9 S( Vrbd模块是内核中内置的一种驱动模块,可以驱动Ceph块存储;
- d! U4 C; m/ m( u注意的是3.10.0版本以上内核才会默认集成该驱动。, n u0 f o( c9 A M) c
2 H' F( h; X+ y/ O5 p0 v \8 n3 D/ ^5 s
//查看RBD模块信息0 |, z$ C1 b( D/ E- V7 d
modinfo rbd: m. k8 ?9 v# l1 I
//查看RBD模块所属的软件包. D0 U. m9 G8 d- J3 p; G! m7 {
rpm -qf /lib/modules/3.10.0-327.el7.x86_64/kernel/drivers/block/rbd.ko
3 F; @* M1 `$ p( \, T. Y四 块存储的一些常见命令' ^1 h9 I$ } i% Q' h9 j
创建镜像,也可以叫块设备。9 [4 K2 \' v. _2 x9 [1 P' g. [
rbd create foo2 --size 2048 --image-feature layering --image-shared' z* G, \& ~( A' i4 I. l& G9 u
创建内核映射,将块设备映射到操作系统。5 ]- s7 O3 \* y2 \1 N/ v, u, n
sudo rbd map foo2 --name client.admin4 d8 r# \& g, {
查看块设备映射列表
' g$ c2 _1 w; s/ M: D" H; U5 }/ Arbd showmapped
& _) w- f' r- e. _6 Z4 L删除块设备映射. d1 ^/ U9 w6 i7 A( \& R
sudo rbd unmap /dev/rbd/rbd/foo2! f8 a2 _7 `: b& e: {6 ?. J( X
导入导出块设备
+ G( h- U5 d" erbd import --image-format 2 /root/test1 rbd/foo2
* a0 d' l) S8 d# Yrbd export rbd/foo2 /root/test1& c; @& b1 w1 s% ^1 D- z; H
创建快照. h8 b2 f% s1 }) _
rbd snap create rbd/foo2@snap1) x- R5 R; X# T# r4 }; b# f: h
查看快照
! m& E; V2 t6 u) J" T& {rbd snap ls rbd/foo2; s- {+ ]% R6 A7 k- s/ s u6 }/ ]
回滚快照
# d) G" g* M8 e' D% v' W- h. hrbd snap rollback rbd/foo2@snap1
3 e+ L( H/ E4 R! }& l# N4 X, L删除快照
8 e, j+ q* j! ?7 c' c# T/ erbd snap rm rbd/foo2@snap1$ c, M0 J6 z. l7 C- N
删除镜像
/ \; _* v: G( Brbd rm rbd/foo25 B! v8 p" I% b8 A5 e e g# v4 x8 l
挂载、解挂块设备
7 d) \1 q) \, ~: H0 }! S& Usudo mount -t ext4 -o discard /dev/rbd/rbd/foo2 /mnt/cc3
: }! } _# U/ R/ Y& p: a8 r1 ?umount /mnt/cc3
! N4 J( I) R7 D( ?格式化块设备映射) W; j% T5 y! j6 p3 g
sudo mkfs.ext4 -m0 /dev/rbd/rbd/foo2
' ^5 ^* ^1 o- K ~- ~9 _镜像空间大小4 V. x; E0 |% D5 G, N' ^, O$ y
rbd diff rbd/foo2 | awk '{ SUM += $2 } END { print SUM/1024/1024 " MB" }'" b8 ]) [, H8 X! r5 {; K
PS: 这个有时在多物理机挂载场景下会不准
; r- G1 W( ]0 G+ W4 p" I9 S1 V4 f) Q* D, w/ C; ^- Q
& x, j* v1 q+ [% N" h- c1 D
|
|