|
|
6 Pool操作[color=var(--theme-color)]#6.0 pool 说明(1) pool 是 ceph 存储数据时的逻辑分区,它起到 namespace 的作用。其他分布式存储系统,比如 Mogilefs、Couchbase、Swift 都有 pool I" {4 I) b* v8 V
的概念,只是叫法不同。每个 pool 包含一定数量的 PG,PG 里的对象被映射到不同的OSD上,因此 pool 是分布到整个集群的。除了隔离数据,我们
+ n) M8 M! D$ U/ P/ S# A, d9 s也可以分别对不同的 POOL 设置不同的优化策略,比如副本数、数据清洗次数、数据块及对象大小等。
, t& i" r- a/ {; M6 D8 P, T: v% z- p. R& ~7 h ]
(2) pg_num 和 pgp_num
2 H c$ i- C) K! e) B1) 创建 pool 操作: ceph osd create pool ${pool-name} ${pg_num} ${pgp_num}
9 }+ {2 ]$ t" D( m" b' B0 A7 k a2) 这里强制选择 pg_num 和 pgp_num,因为 ceph 集群不能自动计算 pg 数量。
8 x/ L3 [& P) d5 r( o3) 官方建议的 pg 使用数量
- r! x" w% y7 O& a4 W! }: y( q8 Q小于 5 个 osd 设置 pg_num 为 128* b$ S, [# I0 w6 Y/ {
5 到 10 个 osd 设置 pg_num 为 512
- n8 X' I2 W/ W/ n0 W2 v: u9 Q10 到 50 个 osd 设置 pg_num 为 10247 K5 f3 u/ B8 X- h$ F# u. i
如果超过 50 个 osd 你需要自己明白权衡点,并且能自行计算 pg_num 的数量,pg_num 通用计算方法如下:
6 ~& p: ^- N( {3 }* ^ (OSDs * 100)
, B; ^4 h1 i: l( c2 k# D# pTotal PGs = ------------
Q+ m; g( `/ n4 ]& O, ` pool size
+ V2 y$ U' Y& C, x. q 8 Y7 g2 ` I3 C1 x
例如: 60 个 osd,3 个副本
& a! w7 d& I; T(60 * 100)
9 N! H# m) M A o6 b4 ^( V0 K----------- = 2000
# B4 Z) p6 z+ z# N4 E# N 3
7 [+ [) T/ H" v8 Q- K! b& @. t+ R+ a5 }' M1 V! i; h7 A% l6 I
2^11 > 2000 < 2^10,所以 60 个 osd,副本数为 3 时,pg_num 设置为 2048,pgp_num 默认和 pg_num 保持一致。6.1 列出存储池[root@ceph-deploy ~]# ceph osd lspools% v( ?4 f/ m& a- E& A
1 device_health_metrics
7 _, I1 |% S$ C' N$ f( S& G3 O2 cephfs_data3 _( X; p+ Y* |7 Y% s
3 cephfs_metadata6.2 创建存储池(1) 命令格式
% v, } h! q: l8 H* y! P" @: Z# ceph osd pool create {pool-name} {pg-num} [{pgp-num}]: H( Z3 e+ g. J' V
4 n% E; ~3 h) L
(2) 命令举例
/ y; T; p% \/ ], j, e' \! o- J& V Z[root@ceph-deploy ~]# ceph osd pool create rbd-pool 64 64
9 S( I8 m- x$ H+ @4 V: x[root@ceph-deploy ~]# ceph osd lspools
5 [4 D$ S5 i) q; {1 o2 B1 device_health_metrics$ p. ^8 ~% E1 D& w7 x1 @+ }
2 cephfs_data
. J9 q. D+ k- a& J6 Y2 z3 cephfs_metadata
; p! ~# |' {8 c4 S4 rbd-pool6.3 设置存储池配额(1) 命令格式
2 e6 _; @8 q- u- }# ceph osd pool set-quota {pool-name} [max_objects {obj-count}] [max_bytes {bytes}]
5 L+ J8 J0 q; G+ L; K8 v0 z, E0 F3 ?5 E
(2) 命令举例
# R' _9 A" h3 K- Q[root@ceph-deploy ~]# ceph osd pool set-quota rbd-pool max_objects 10000
+ p) ?7 M }' [1 ]) g[root@ceph-deploy ~]# ceph osd dump | grep rbd-pool
( F y6 m6 I: ^0 Q6 p, O. Cpool 4 'rbd-pool' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 64 pgp_num 64 V' f1 a6 j6 j! E5 v. E: z# N
autoscale_mode on last_change 378 flags hashpspool max_objects 10000 stripe_width 06.4 删除存储池(1) 命令格式& y! ?3 U* [5 y! p& J6 h+ [) K& E
# ceph osd pool delete {pool-name} [{pool-name} --yes-i-really-really-mean-it]
" D& B& S. V: Y4 V. l% o9 V- s: }2 Y* {; D
(2) 命令举例
- L6 Y/ _" t6 r! C, i+ K; p[root@ceph-deploy ~]# ceph osd pool delete rbd-pool rbd-pool --yes-i-really-really-mean-it% g8 ~- `: G' L8 M
% F4 ^" d0 }1 e! l0 _3 H
报错:
! B4 V( U6 W8 }% O9 wError EPERM: pool deletion is disabled; you must first set the mon_allow_pool_delete config option to true before
# b) q$ q- [; `8 U# Z0 X3 f* Vyou can destroy a pool# r+ w0 @! s3 J- r- |' j
解决办法:& f$ H" u( n2 N4 m; u
1) 在 ceph-deploy 节点修改 ceph.conf 配置文件, \ k/ } o; f# H V c8 M; K
[root@ceph-deploy ~]# cd /root/my-cluster/* c' [1 P( G5 N, a5 c5 \( F) Y
[root@ceph-deploy my-cluster]# cat >> ceph.conf << EOF5 C2 W( z, u$ D8 s8 c# {) _
[mon]
: h: F3 C9 P/ G: U3 h k/ u$ _mon_allow_pool_delete = true T0 P. i9 S- J' T, p
EOF% T6 [& D0 C6 o
+ `* ?- B0 V; a" o6 O* {7 i
2) 推送修改的 ceph.conf 文件到所有节点(覆盖旧的/etc/ceph/ceph.conf)
X* h2 B/ m6 V- F) S[root@ceph-deploy my-cluster]# ceph-deploy --overwrite-conf config push ceph-deploy ceph-node01 ceph-node02 \
3 F% Z/ I+ ]! q$ C Aceph-node038 {6 u$ |7 I6 o5 d
; X5 r# y" Z2 Z& B
3) 在安装 ceph-mon 服务的节点上重启 ceph-mon 服务
. z& ]) a! l; |$ |# w1 n# 在ceph-node01、ceph-node02、ceph-node03节点上操作& [! g/ s+ A& w6 p5 p
# systemctl restart ceph-mon.target% `. O8 B% }! `. a, q1 E. G
8 S9 e% l9 c9 V/ `/ a/ G: J- G% q
4) 查看 ceph-mon 状态
7 V! f8 r, `: S; z! S[root@ceph-deploy my-cluster]# ceph mon stat
" a; X W, ~. p1 A% L! }e1: 3 mons at {
) A& P- G- F0 w2 h( a* ]9 Wceph-node01=[v2:172.16.1.31:3300/0,v1:172.16.1.31:6789/0],
! U6 b: y! f ]9 B) [* \! ?ceph-node02=[v2:172.16.1.32:3300/0,v1:172.16.1.32:6789/0],$ P+ L0 Z1 B/ P
ceph-node03=[v2:172.16.1.33:3300/0,v1:172.16.1.33:6789/0]. y6 A( ]2 H$ @7 s* T/ R( F
}, election epoch 34, leader 0 ceph-node01, quorum 0,1,2 ceph-node01,ceph-node02,ceph-node03
& |+ H1 N$ N& ^0 S8 q% B' p S/ c' [3 t, v- B8 G
5) 删除指定存储池成功$ e- m: J" H9 H7 `
[root@ceph-deploy my-cluster]# ceph osd pool delete rbd-pool rbd-pool --yes-i-really-really-mean-it
$ c( X4 V' l0 o# I, dpool 'rbd-pool' removed6.5 重命名存储池(1) 命令格式
- ^. c& i0 W x2 K8 r# ceph osd pool rename {current-pool-name} {new-pool-name}6 i8 @- }# M U) f% L" l
, l: R5 e. T* Q J(2) 命令举例
- c5 _3 U% V& o# r- [' M* ?6 H[root@ceph-deploy ~]# ceph osd pool rename cephfs_data cephfs_data_lc
d g1 H; m; T E8 P$ o, M: Y[root@ceph-deploy ~]# ceph osd pool rename cephfs_metadata cephfs_metadata_lc
& A7 r+ @; `$ z* x0 k* J+ K; u9 ?& c+ R[root@ceph-deploy ~]# ceph osd lspools) i$ g& @( m" Q/ i
1 device_health_metrics k3 T9 h8 S" u( f: Z
2 cephfs_data_lc
o2 y/ |- ^2 G- f$ J' v3 cephfs_metadata_lc2 D* z$ R: f2 z. D7 c' `9 E
[root@ceph-deploy ~]# ceph fs ls
( C8 ?; K5 B9 Y; [name: cephfs, metadata pool: cephfs_metadata_lc, data pools: [cephfs_data_lc ]6.6 查看存储池统计信息# 显示整个集群的所有磁盘利用率信息,包含池信息3 a6 W8 m. l/ _! t/ Y1 R# v1 J
[root@ceph-deploy ~]# ceph df
4 r+ @5 k: P2 c ^1 V) H0 N--- RAW STORAGE ---( F+ l) r0 q: x6 t1 f, n$ ?
CLASS SIZE AVAIL USED RAW USED %RAW USED
% {4 \% n, Z: R$ K3 g& Y0 O, O3 Ghdd 120 GiB 110 GiB 3.8 GiB 9.8 GiB 8.18
$ {5 d( I/ Z; `# ?$ S; P( WTOTAL 120 GiB 110 GiB 3.8 GiB 9.8 GiB 8.18
9 L& X9 V, s% t: J" u" N
9 y b+ _/ i3 x" r8 U--- POOLS ---' H. Y% A" D3 v0 E ?
POOL ID PGS STORED OBJECTS USED %USED MAX AVAIL$ h# Y7 C: x( J+ S" M# L' b- i2 k
device_health_metrics 1 1 0 B 0 0 B 0 34 GiB! B! J+ ^" m; m1 ~) h) V. p
cephfs_data_lc 2 64 1.2 GiB 302 3.5 GiB 3.30 34 GiB
# S. ]. Y: q( Q) `% F$ A* xcephfs_metadata_lc 3 16 263 KiB 23 2.3 MiB 0 34 GiB
7 G8 t$ _+ ?4 U' L9 U
, L- R& @6 C* a/ w1 W( ^# u1 L# 显示池的利用率统计信息
- \7 a. ^$ A% L$ U+ R[root@ceph-deploy ~]# rados df图示:[color=var(--theme-color)] 6.7 给存储池做快照(1) 命令格式
3 q, K g8 a7 C* O$ \# ceph osd pool mksnap {pool-name} {snap-name}" W, x$ D- e. p- R
' ^( O0 x2 n' J
(2) 命令举例
: x, M: C X. K5 p, j+ }[root@ceph-deploy ~]# ceph osd pool mksnap cephfs_data_lc cephfs_data_lc_snap
& |/ m. G3 H! B& L9 B[root@ceph-deploy ~]# ceph osd dump | grep cephfs_data_lc
4 C; {, c% Q' x: w[root@ceph-deploy ~]# rados lssnap -p cephfs_data_lc
3 j9 A/ a2 G. x- }$ s1cephfs_data_lc_snap2021.12.22 14:01:15/ H9 E. m* ]8 k( R- d, O
1 snaps6.8 删除存储池的快照(1) 命令格式
4 R9 J, a0 z" T; E( f ^/ Q4 a# ceph osd pool rmsnap {pool-name} {snap-name}
' A8 G; X' z+ [$ O
7 q" k5 \" r Q: X$ J* e& H(2) 命令举例
+ S0 M6 s6 F% _[root@ceph-deploy ~]# ceph osd pool rmsnap cephfs_data_lc cephfs_data_lc_snap2 @( m) C$ v8 c2 H: _+ Q% p* H
removed pool cephfs_data_lc snap cephfs_data_lc_snap& g* o9 Y9 |( n
[root@ceph-deploy ~]# rados lssnap -p cephfs_data_lc
4 S; h2 I2 R: V; M) U: v3 C0 snaps6.9 获取存储池选项值(1) 命令格式
- M- E6 [6 m% X( Y$ c" K# ceph osd pool get {pool-name} {key}! P* L. u: W( t
6 Q# J9 _7 c$ Z1 a1 J(2) 命令举例
9 p4 k7 ?& F# I, `: j# 查看可以使用的 key: v5 b1 r6 p" Y! r+ W
[root@ceph-deploy ~]# ceph osd pool get cephfs_data_lc ?( T5 U& {2 g( Z' Y( b
# 查看存储池的副本数
. t' B; g3 w8 p9 ~[root@ceph-deploy ~]# ceph osd pool get cephfs_data_lc size8 n( B- W) |2 H! `- t ^
size: 3
: s; ~4 g8 W5 l4 W! q[root@ceph-deploy ~]# ceph osd dump | grep 'replicated size'6.10 调整存储池选项值(1) 命令格式 Z$ c- K; d! `! r: E- i! j
# ceph osd pool set {pool-name} {key} {value}0 \0 d! x, G' n9 z2 v
size # 设置存储池中的对象副本数,详情参见设置对象副本数,仅适用于副本存储池。# Y: J! _& d2 X5 ]
min_size # 设置 I/O 需要的最小副本数,详情参见设置对象副本数,仅适用于副本存储池。
) u/ q0 J- E# J& V! mpg_num # 计算数据分布时的有效 PG 数,只能大于当前 PG 数。
6 q' H# z' Z& u5 apgp_num # 计算数据分布时使用的有效 PGP 数量,小于等于存储池的 PG 数。
; X5 p! W1 C d/ p% K! \( {, I: Ehashpspool # 给指定存储池设置/取消 HASHPSPOOL 标志。
9 \& l' |, q! C9 [5 itarget_max_bytes # 达到 max_bytes 阀值时会触发 Ceph 冲洗或驱逐对象。
* d# ?5 U9 L$ f1 Otarget_max_objects # 达到 max_objects 阀值时会触发 Ceph 冲洗或驱逐对象。
6 Y- N. Z4 W( P& `. \' B9 pscrub_min_interval # 在负载低时,洗刷存储池的最小间隔秒数,如果是 0,就按照配置文件里的 osd_scrub_min_interval 。
! ^; v% o; d. i8 K( Yscrub_max_interval # 不管集群负载如何,都要洗刷存储池的最大间隔秒数,如果是 0,就按照配置文件里的 osd_scrub_max_interval 。
2 P3 _. \' H+ {. j+ n3 Z ]6 Z- Udeep_scrub_interval # "深度"洗刷存储池的间隔秒数,如果是 0,就按照配置文件里的 osd_deep_scrub_interval 。! o6 F9 P% i$ R8 q
' Q- m3 N) C9 c1 K# W(2) 命令举例(更改存储池的副本数)$ k9 F% |$ _5 _/ H
# 更改前存储池实际最大可用容量
3 _; M7 n& j D. r2 @[root@ceph-deploy ~]# ceph df O- i% q" N4 Q; O
--- RAW STORAGE ---, \4 T1 L6 }2 Y) i5 z+ \6 z
CLASS SIZE AVAIL USED RAW USED %RAW USED! a( ]: `2 F8 U! A
hdd 120 GiB 110 GiB 3.8 GiB 9.8 GiB 8.18
* j: i* o9 l& GTOTAL 120 GiB 110 GiB 3.8 GiB 9.8 GiB 8.18
. u( e% W6 c) @7 L @0 ]
7 H0 h# `! H; [- a--- POOLS ---( i: h( i: j H$ R+ |
POOL ID PGS STORED OBJECTS USED %USED MAX AVAIL3 s% {" G' [7 x# k8 E
device_health_metrics 1 1 0 B 0 0 B 0 34 GiB' Q3 Z$ O+ U2 e+ H; q
cephfs_data_lc 2 64 1.2 GiB 302 3.5 GiB 3.30 34 GiB! `1 \ p9 }& C
cephfs_metadata_lc 3 16 263 KiB 23 2.3 MiB 0 34 GiB$ R5 e, ~' h: a# b* J1 u k
6 F! q# U8 p% Q2 o# C- W/ x
# 更改存储池的副本数由 3 变为 2; E" x9 L, \; k2 a( `8 F
[root@ceph-deploy ~]# ceph osd pool get cephfs_data_lc size
+ @& a8 u6 l! y1 Msize: 3
/ n! K5 T2 C" R: b: U[root@ceph-deploy ~]# ceph osd pool set cephfs_data_lc size 2
4 f2 U7 c6 {3 w5 M3 {- ^set pool 2 size to 21 P8 w2 N9 x# `9 b0 y& E
[root@ceph-deploy ~]# ceph osd pool get cephfs_data_lc size
$ \7 H* y" r- F, ~& Esize: 2" R* m. ?" E% D3 A
1 I7 s) Z, j3 j% T1 D$ V
# 更改后存储池实际最大可用容量
6 }2 i4 I- b' D; E' t5 O[root@ceph-deploy ~]# ceph df
# [6 I4 {% o1 c" r--- RAW STORAGE --- M# e- U6 h2 m5 R2 R
CLASS SIZE AVAIL USED RAW USED %RAW USED
: {% W; }5 v l6 t! _( ~hdd 120 GiB 111 GiB 2.6 GiB 8.6 GiB 7.20
; t& T; n* s" A( a) u/ HTOTAL 120 GiB 111 GiB 2.6 GiB 8.6 GiB 7.20
3 p# ]* D! |* c4 J u" J: t+ K4 N8 u3 r0 s; ^
--- POOLS ---
7 J" I2 J0 x, @* }5 d! L) j8 G# n9 iPOOL ID PGS STORED OBJECTS USED %USED MAX AVAIL! K7 X( H) e4 c2 J" R" }- T2 i, K" Z; s
device_health_metrics 1 1 0 B 0 0 B 0 35 GiB: {9 C2 K l8 J# k9 _
cephfs_data_lc 2 64 1.2 GiB 302 2.3 GiB 2.21 52 GiB! a; B# E- @2 J' s, `9 r n1 k
cephfs_metadata_lc 3 16 263 KiB 23 2.3 MiB 0 35 GiB
* z5 H# h6 f. [ {+ I+ d; g8 v. ~* N. i: P0 K
注:
0 C' I$ }$ R$ M2 k, c6 Ecephfs_data_lc 存储池的实际可用容量由 34GiB(总容量 120GiB 减去集群占用容量后除以 3 副本数) 变为 52GiB(总容量 120GiB 减去集- t( o5 E# y/ [; d/ @
群占用容量后除以 2 副本数),自己手动计算的结果和 ceph 集群计算的结果相差不多。多个存储池对 ceph 集群存储容量是共享的。6.11 pool快照的使用(1) 将测试文件导入至存储池中,并指定一个新的 object 名字% ^7 ^7 Z0 x/ i6 F$ D) Z$ e
# 格式, ^7 ?. L$ O+ ?- T1 F
# rados -p {pool-name} put {object-name} {file-name}
* [3 r- ]9 f9 Y8 j; K$ T[root@ceph-deploy ~]# rados -p cephfs_data_lc put testobject /etc/hosts, `+ C4 m0 G" K. V S6 v
7 \% k0 @6 G; a$ ]; v
(2) 查看 pool 中的 object 文件
# |' X- Z+ h9 {& f( I" a' w[root@ceph-deploy ~]# rados -p cephfs_data_lc ls | grep 'testobject'* S9 F: m6 x. _6 W0 d( J- {1 P
testobject
7 y# E, Y8 C$ T# o6 y* @8 G$ s, j% K. t R& t+ {
(3) 创建 pool 快照
: I0 z7 u% s4 q. J! h; h6 T& c$ O( i& V* Q[root@ceph-deploy ~]# ceph osd pool mksnap cephfs_data_lc cephfs_data_lc_snap7 F: c6 y- B0 e, I% t+ m
created pool cephfs_data_lc snap cephfs_data_lc_snap8 o9 }" W' e5 B2 i; k) u- D
6 C1 M$ z0 n2 G$ c3 K( V5 m! _(4) 查看 pool 快照# G {2 ]: U. k: k
[root@ceph-deploy ~]# rados lssnap -p cephfs_data_lc- ?; M! ?, l0 R
3cephfs_data_lc_snap2021.12.22 15:57:05* |9 B3 o E* W" q" B6 `
1 snaps# h0 P7 w" v; X
5 Z3 x- \: v( Y' O" }- m' z/ t(5) 删除 object 对象
/ }3 j1 G! O- o$ D$ o8 r5 N& P[root@ceph-deploy ~]# rados -p cephfs_data_lc rm testobject) X8 L5 M6 i: G! P
3 y! [# i# p! K! Z( F, j
(6) 再次查看 pool 下的对象
5 _- M* `" J2 ?( L3 F[root@ceph-deploy ~]# rados -p cephfs_data_lc ls | grep 'testobject'# R% G# D. G1 @9 J/ ~+ n
testobject
: g8 O2 {! s; ~9 Z9 y- l$ I2 A
$ V" s; i* w( d, X7 T[root@ceph-deploy ~]# rados -p cephfs_data_lc rm testobject
4 ^ K7 g2 m) m: t8 f! Verror removing cephfs_data_lc>testobject: (2) No such file or directory! r/ o/ w/ {5 V/ K2 |2 v2 w) r
/ O* n% n& {" M注:# F+ s( u8 N" _
根据上面输出可以看出,虽然确实已经删除对象文件,但是这个池中还是有这个 object 文件存在,实际上已经不再占存储空间8 z1 L% W7 E% R! l- g1 J. \
了,相当于是一个缓存的输出,主要原因是被打了快照的对象文件在快照被删除之前被删除了,即使后面快照被删除后还会存在。
8 b/ p- A+ r9 ~( K
$ B+ Z9 r0 k. D: }( c; S: L1 g3 [(7) 指定 pool 快照中的对象文件进行回滚
2 l; M- t; E* d3 a6 Z[root@ceph-deploy ~]# rados rollback -p cephfs_data_lc testobject cephfs_data_lc_snap
6 ~/ D7 ?% w( @4 V. S h: grolled back pool cephfs_data_lc to snapshot cephfs_data_lc_snap0 k% a0 R' G+ i& K1 X
! V3 T; h8 c( z" v1 i[root@ceph-deploy ~]# rados -p cephfs_data_lc ls | grep 'testobject'+ `( f8 [9 }+ n+ _! _1 Y" {- E
testobject
' P- k: b% l! G4 [" _
5 ?( Y( e) v W- y- X0 E8 h6 [/ ^注:6 T/ c1 h% _) O- ~0 o
根据 ls 输出显示看不出什么,所以我们来再删除测试一下
$ `( g1 v" x3 v; H3 ?( d2 \9 h: A' R m
(8) 删除 object 测试' n' }2 I% _6 L6 @. T
[root@ceph-deploy ~]# rados -p cephfs_data_lc rm testobject+ {, o5 B2 k$ k. ]4 j) k4 v! z
[root@ceph-deploy ~]#4 ~' y7 S5 ]" B" \ |! g8 ~
! Q& l0 J* [) e# F' ?0 f
注:
% G$ r9 X2 I# R6 a可见已经可以正常删除,即代表文件通过快照已恢复,代表快照回滚恢复功能正常,到这里快照测试也就结束了
& P2 z- \7 e% d) l9 R: B
+ @( B3 Q* ?2 G8 |- q6 Q8 Q Y' E(9) 删除快照! Z. n8 E6 Y- w- G, j! h
[root@ceph-deploy ~]# ceph osd pool rmsnap cephfs_data_lc cephfs_data_lc_snap' b, |0 y; h& X' @) n, D% Y
removed pool cephfs_data_lc snap cephfs_data_lc_snap
8 F7 r* N* H6 o/ [
( s& Q0 p7 _8 @ |: E. `3 `4 O4 D[root@ceph-deploy ~]# rados lssnap -p cephfs_data_lc
( ~9 }( h' }$ T& s0 snaps! a1 v- S; O2 u5 I; Y2 B" r" G% a' g' W$ G
+ I. ?( U2 i! M& Z% Q! M[root@ceph-deploy ~]# rados -p cephfs_data_lc ls | grep 'testobject'
& U' H, H: A1 m0 H! vtestobject: c1 U8 H) w- \. c; V0 T- ?
2 r5 K! K& s2 p: u2 X% J% |[root@ceph-deploy ~]# rados -p cephfs_data_lc rm testobject
7 O; q( A- g: P- F1 a! S( Ierror removing cephfs_data_lc>testobject: (2) No such file or directory
6 q- }0 U- S. L" m: O4 t0 ]; M" H- `2 a. k
(10) 结论
, U( d& o# D2 T$ _1) Pool 池的快照相对来说是有局限性的,没办法直接恢复快照里边全部 object 对象文件,只能一个个来恢复,这样的设计效果可能是因为如) h; C5 a3 ^% s( ?* [8 _1 u+ d7 j
果 pool 池直接整体恢复,会导致整个 ceph 集群数据混乱,毕竟集群中数据是分布式存放的。2 e* F0 k, v1 n( I$ _
2) ceph 支持对整个 pool 创建快照,作用于这个 pool 的所有对象。
( x3 W& z# h1 w1 @3) ceph 有两种 pool 模式
' a5 m! J7 H8 b$ ^0 O! APool Snapshot,创建一个新的pool时,默认也是这种模式。
. Y- i6 U1 t/ B; E7 OSelf Managed Snapsoht,用户管理的 snapshot,这个用户指的是 librbd,也就是说如果在 pool 中创建了 rbd 实例就自动转化为这种模式。2 \8 t8 j% R: }9 s
注意: 这两种模式是相互排斥,只能使用其中一个,因此,如果 pool 中曾经创建了 rbd 对象(即使当前删除了所有的image实例)就不能再对这个% |5 O# F6 v- a" q9 @, z2 w
pool 做快照了,反之,如果对一个 pool 做了快照,就不能创建 rbd image 了。7 用户管理[color=var(--theme-color)]#Ceph 把数据以对象的形式存于各存储池中。Ceph 用户必须具有访问存储池的权限才能够读写数据。另外,Ceph 用户必须具有执行权限才能够使用 Ceph 的管理命令。 7.1 查看用户信息1 查看所有用户信息 K p9 m3 r+ K; t
[root@ceph-deploy ~]# ceph auth list
3 f+ y& H$ p7 T! m3 O
' @1 R( O) y9 V2 E3 D2 获取所有用户的key与权限相关信息
7 |) R6 z4 P0 c# X0 J! E. Y5 W( Q[root@ceph-deploy ~]# ceph auth get client.admin+ O8 a) x$ A9 t
exported keyring for client.admin
( d: k$ S" l' v0 }, f[client.admin]/ z7 L g" U, o
key = AQArL5JhBEiAKRAAymBtomUPKP6M/BSI17oXyg==
/ T& [) Y( _$ c2 |( p# wcaps mds = "allow *"! {0 M: C# I9 z$ {2 q6 [
caps mgr = "allow *"( ^7 d- U# R) g6 }3 D
caps mon = "allow *"6 T( ~) K( g2 `9 H$ @- B1 d
caps osd = "allow *"
1 ^/ q$ m0 L, R: w/ R n
# Z! M& {0 y: T3 如果只需要某个用户的key信息,可以使用pring-key子命令
! h' X4 r; d# [: w[root@ceph-deploy ~]# ceph auth print-key client.admin& x, }, o- Q+ [" F! i x ?
AQArL5JhBEiAKRAAymBtomUPKP6M/BSI17oXyg==7.2 添加用户# ceph auth add client.john mon 'allow r' osd 'allow rw pool=liverpool'
4 A, F# Z5 Y, @5 d( a# ceph auth get-or-create client.paul mon 'allow r' osd 'allow rw pool=liverpool'
* M; D$ W6 v' _7 S* @: J# ceph auth get-or-create client.george mon 'allow r' osd 'allow rw pool=liverpool' -o george.keyring
! S, ]7 m; o: U) a5 q5 z# d' `# ceph auth get-or-create-key client.ringo mon 'allow r' osd 'allow rw pool=liverpool' -o ringo.key7.3 修改用户权限# ceph auth caps client.john mon 'allow r' osd 'allow rw pool=liverpool'
; o$ D5 M H$ G' p# ceph auth caps client.paul mon 'allow rw' osd 'allow rwx pool=liverpool'
; O! {! N5 ^& Q. W# ceph auth caps client.brian-manager mon 'allow *' osd 'allow *': D! l8 s% A P! m3 n; }
# ceph auth caps client.ringo mon ' ' osd ' '7.4 删除用户# ceph auth del {TYPE}.{ID}
5 b5 _0 E* I' n6 o$ U8 ]说明: 其中,{TYPE} 是 client,osd,mon 或 mds 的其中一种。{ID} 是用户的名字或守护进程的 ID。
3 o7 ~' p; M+ x u5 B |
|