|
|
Ceph Pool操作总结一个ceph集群可以有多个pool,每个pool是逻辑上的隔离单位,不同的pool可以有完全不一样的数据处理方式,比如Replica Size(副本数)、Placement Groups、CRUSH Rules、快照、所属者等。
& v3 p: L. N) w
+ w. t7 \+ i( a, r ]/ c打印pool列表
! v3 `$ i9 J2 O3 r+ @& ?* ]7 f/ [% u. h; [
ceph osd lspools
7 z" z# @0 K" |4 S2 t7 d6 {' b. P
创建pool& _& l) F, ]$ s4 A' g0 e
: [$ T# t* A/ ~3 q$ ?0 d) D& M3 g8 V6 \0 N
通常在创建pool之前,需要覆盖默认的pg_num,官方推荐:! i6 S; v: v+ g q3 O
; f2 h# T D f- j( P }若少于5个OSD, 设置pg_num为128。. _8 S; D+ ?, r4 u8 y
' {3 X" \; S' y& o0 b5~10个OSD,设置pg_num为512。6 i6 Z+ N* f) t' L- T0 Z; x
6 }. s' B0 U& U1 G* @- [+ O* s+ p: h8 U10~50个OSD,设置pg_num为4096。0 ?" A# V* U6 I
- x2 |5 ]# x4 T# l0 N7 Y超过50个OSD,可以参考pgcalc计算。
5 w5 ?. n# o$ R0 P# W& b- G \# I1 \2 B2 @7 e; P4 n
本文的测试环境只有2个OSD,因此设置pg_num为128。! | _4 O- m0 k% C0 W
' {! J- u# {9 h( d/ xosd pool default pg num = 128* l6 ~/ s" L2 E, r2 ^8 _0 U
/ A& x$ c2 W- U! m0 W5 {1 t
osd pool default pgp num = 128! {- o6 U8 {# D! e3 A. b
1 ]* T! s5 d, R
创建pool语法:
7 h5 n% T* m5 ?% T
+ e: ]+ c3 J6 A2 u5 R8 Kceph osd pool create {pool-name} {pg-num} [{pgp-num}] [replicated] \
4 Y/ u* p- p# d- W+ u% J+ J1 n: e1 Y4 D) f& ^; |1 F
[crush-ruleset-name] [expected-num-objects]1 L( p% y0 x: B" w* g; v
+ l- W9 M; i( O4 I: }( ~
ceph osd pool create {pool-name} {pg-num} {pgp-num} erasure \
; @7 V# s4 e* Q% l
( ]' s& \4 G a! Z* H( {' ?( [[erasure-code-profile] [crush-ruleset-name] [expected_num_objects]) X' f o0 z& D3 ^( I
5 B6 O& u3 {+ N+ O4 R7 l+ S0 v创建一个test-pool,pg_num为128:( l, g5 s# m: b6 m) E; U6 C
8 O9 ~* Q2 R: M% k; ^8 F# P9 [
ceph osd pool create test-pool 128
% d5 Y6 `3 x+ R' b9 P( _
: V0 U4 \' T4 D; L0 y( K: B设置pool配额
2 `* R' F# F* K
1 y6 v9 `( T8 a0 q6 [3 w, y |支持object个数配额以及容量大小配额。
4 Y/ T5 ]! |4 o7 I$ l8 Q: U
) l2 {) a( C( N" @- E: A6 O设置允许最大object数量为100:
) w- y: V( f# i, Z( _. ~0 B7 _) p9 p0 o5 E
ceph osd pool set-quota test-pool max_objects 1005 e6 e; M# H. k* {& r$ H$ A4 u2 B
! Y8 J; {- Y9 y% h1 Q! q: w/ |
设置允许容量限制为10GB:
' x9 f' ^: h3 z! H* H5 b
' R5 f. _; `" d2 Y$ b& lceph osd pool set-quota test-pool max_bytes $((10 * 1024 * 1024 * 1024))2 L- G$ n- c. n9 d- F
' X: t' q) a& B& D$ Q
取消配额限制只需要把对应值设为0即可。* r8 H- f& Q0 C6 h: |
. H: F' r( e8 \; B. u, c" V重命名pool
/ [+ W2 d- l5 t* e% J1 B- I; S4 P0 B6 n
ceph osd poolrename test-pool test-pool-new
. Q* e9 r/ ?# G: m) r/ \4 x3 P4 r3 ^; L$ V, x
删除pool5 u" R4 U `+ t1 ~! V5 ?
. d# b6 V+ P M2 u2 {$ J- h
删除一个pool会同时清空pool的所有数据,因此非常危险。(和rm -rf /类似)。因此删除pool时ceph要求必须输入两次pool名称,同时加上--yes-i-really-really-mean-it选项。
* e! s4 m. w) u+ U+ |
8 e c0 z9 A2 j N6 M7 qceph osd pool delete test-pool test-pool --yes-i-really-really-mean-it* M1 \: m& K! t }6 d+ J2 y
+ e% b) ^! E4 }+ T3 l5 ]
查看pool状态信息
2 `2 T O, r) c
7 ]0 |. ~( e5 g9 O8 u# W5 N# ]rados df
u. v2 W5 y( k1 b' [1 D
5 X) ^0 n" m( V: `创建快照
) {. `0 z4 }9 V# h2 |
) Z B( |& [+ U8 Z$ U# g+ t3 Zceph支持对整个pool创建快照(和Openstack Cinder一致性组区别?),作用于这个pool的所有对象。但注意ceph有两种pool模式:
2 g7 i5 O4 S* L3 m5 L8 J! t. P& F( C& W- Q W4 x) _
Pool Snapshot,我们即将使用的模式。创建一个新的pool时,默认也是这种模式。( S0 g j" m0 `$ F9 {& w6 ?
$ Z+ U& K" [. N7 f% K1 B! B
Self Managed Snapsoht,用户管理的snapshot,这个用户指的是librbd,也就是说,如果在pool创建了rbd实例就自动转化为这种模式。
' g4 [* S- I; S4 \5 G7 h# c# I
' I4 i, l5 U- r* `' R0 }这两种模式是相互排斥,只能使用其中一个。因此,如果pool中曾经创建了rbd对象(即使当前删除了所有的image实例)就不能再对这个pool做快照了。反之,如果对一个pool做了快照,就不能创建rbd image了。
4 {3 D( s% N N7 m( P
/ x5 }, o+ }/ Sceph osd pool mksnap test-pool test-pool-snapshot. C% [$ f0 @% S: Z5 s+ e
. w3 U C0 y- ?删除快照# A% ?1 R" G! E/ c' s; I7 V
. f. I# y' H% z* \0 x
ceph osd pool rmsnap test-pool test-pool-snapshot6 Y/ K5 S6 x, y, g* l
- ]; I" O8 I( Z: g- Q5 M设置pool; |3 b+ f' n, ~& R
8 i0 B% T5 `) a通过以下语法设置pool的元数据:
" W! ]0 y+ ]8 [; s, c2 _5 B& A% q: i( C N) O3 W6 j
ceph osd pool set {pool-name} {key} {value}
% g/ P0 D8 X! I9 P. {1 z. a" E, }- D; N6 u
比如设置pool的冗余副本数量为3:1 T& W( o( D Q# w0 I
7 {; Y! T' \. q
ceph osd pool set test-pool size 38 q( [% G$ A" h3 G3 ?
2 @+ k! k2 U A5 G其他配置项参考文档。1 W O& A+ l4 d5 H
2 V" q% ]5 I# O- p0 b w9 t' f( B
通过get操作能够获取pool的配置值,比如获取当前pg_num:
* g& K5 d% ]3 Z8 G
& F* { E8 _ t" T7 Q Bceph osd pool get test-pool pg_num a' a/ h/ r7 _/ V- W5 S, f. W* S6 o
X0 W& i0 R; g3 w
获取当前副本数:# v& D( T& s4 x7 f6 J
* u/ y! S( U: N" L( V# h2 a( eceph osd pool get test-pool size& G9 A, c3 {" K" D7 E3 W
! z9 t; ^$ |4 U6 ?
|
|