|
|
为了高可用性,我们部署三个MDS。
6 P/ f8 x* u9 G u4 C% s
/ g( b9 j0 F$ q; p7 W0 @+ M9 R9 l7 }; X1 m ^ j0 h: p
$ cd ~/ceph-deploy/ # 必须在这个目录下执行 6 }8 q P: T* m# W5 e
+ @) \: Z. k8 j
/ y) F: Y3 P# Z/ k
z* c, f N$ g# k
$ ceph-deploy mds create ceph-1 ceph-2 ceph-3
4 U) ? Y' U1 s8 ^- Q. P4 P( Y% i2 D4 T/ C+ `
* Z$ O" E# G4 @# 安装mds * l1 |5 `5 C) d" P" {7 G2 P
, D: k# O. \( V3 O$ `
- f" Q% c8 _$ Z1 [1 V! H4 H4 f0 e! G: K
$ ceph -s # 查询集群状态 + Y4 m+ N9 n# G. R
4 y& P2 d( Y. w+ E" B. h3 w' J: N
9 ]" [9 s, c" S: q2 q) u! w
cluster: 0 u& _% b& I8 [8 x2 O
5 P, _5 F. r9 n' j8 a. V
, y& e% R+ G7 _id: b5ae2882-7ec6-46cd-b28e-6d7527e5deb3
. l9 \! H x3 W4 V& n
* i7 |! c9 v/ ^& M" `
2 O' B5 g% N7 l+ Hhealth: HEALTH_OK
5 R6 }- R. ~* W( Z& o: Y8 ?
. G* b2 }. {. C$ k# L: a) p' f/ H0 y5 G4 Q
! D' |0 n% z3 U5 X4 U0 r6 R5 b
) [$ I+ h' o5 Q k. Q# ^services:
) M* O" F8 N8 T) C( U9 ^$ v0 r
& }8 Y, a' ~/ h' s' G7 Z3 D4 d
! R* h& d. P0 ~) Zmon: 3 daemons, quorum ceph-1,ceph-2,ceph-3(age 42m) : q% V3 {; f8 i
1 Z# r3 y, A5 H! \' \: i+ ]! \9 d$ G
/ a- x5 P! P$ R/ }+ s: y$ H( Dmgr: ceph-1(active, since 46m), standbys: ceph-2, ceph-3
! Z8 Q0 n# Q' @. r
5 w$ ]9 Q( D7 V j7 p3 |3 w- S
! o! b; t9 U( z" t" Y4 ~9 Smds: 3 up:standby # 因为当前还没有文件系统,所以三个都是standby状态 2 i5 `/ p, j& R
2 d6 a m; T, p' f' x) n, ]1 r% x2 e: S- _. S% L
osd: 3 osds: 3 up (since 44m), 3 in (since 44m) 9 N4 _3 f$ O: t. V- I5 t3 U' }3 H
1 E0 R% p+ `: E# [/ W3 X, t) R
, L2 o9 D, }7 C3 `7 Q
rgw: 1 daemon active (ceph-1 )
" ~$ C A# l8 G6 [6 Q+ {' _& d7 x$ ~0 x1 J; r
0 x+ L. u- d* Z5 z$ ^. ]' n2 G c5 b" d* `) v0 X; s, d
* l! ^/ V, E- F! k% V2 f+ Q2 i1 B2 Atask status:
0 y' \- ^! Q+ c7 a- |, @0 n4 v' ~5 Z
& w# e K" q" |/ [
6 k2 c$ S# G- J: o ; m6 h) F/ o( B, f4 K: ]
data: " K& {& u) r V0 d+ `& Z
. v6 n3 K& p' ], N; Y
/ M9 ?0 ~ ?) F) m
pools: 6 pools, 2000 pgs
3 p* `3 ?/ i3 l: K- q3 T6 A% w+ ]1 S2 i) b
: R3 ~( C! S/ y$ a" y2 J
objects: 201 objects, 3.6 MiB ! F6 ^9 f& c- F2 b1 X
* |; f4 `& Z8 C) v
: H& p; P; g$ Y- Q* {# M
usage: 20.0 GiB used, 580 GiB / 600 GiB avail
+ O3 B% T# m9 c. h) t* @' d+ i, m) l9 I- o! J7 E
$ f# b2 d: ~; N& h5 |# B, T6 kpgs: 2000 active+clean
) q r2 s; r3 c! k9 c1 E3 R. s- s- x三、创建cephfs文件系统•一个Ceph文件系统至少需要两个RADOS池,一个用于数据,另一个用于元数据。注意元数据池中的任何数据丢失都可能导致整个文件系统无法访问。
/ a" \7 K7 K! U•对元数据池使用较低延迟的存储(例如SSD),因为这将直接影响在客户端上观察到的文件系统操作的延迟。
9 g3 ~( d4 u( X5 f3.1 创建pool( M4 K+ W. ~- z- f/ [3 S- g( a# M
$ Q7 d% U' A6 D5 _
$ ceph osd pool create cephfs_metadata 32 32 ( D7 p6 J3 i5 u; v, G
' H/ `0 k; w6 a- T5 Q$ \$ ]/ D. e" n3 [+ c2 q; A1 Q& {7 m
$ ceph osd pool create cephfs_data 32 32) t S5 _& _+ F7 v3 q
{8 _, S; Z8 B: x A' P
8 s( M5 P- b" k8 V# _) w, `2 ~2 O# N
$ ceph osd lspools ! M% w/ Z& X7 p( y' ]' ~$ g* l
+ k p* M" u0 F" S4 Q, T# }4 B
. k8 z& U M: L8 E
1 .rgw.root
; b. b+ W _' E; D3 [& Q4 b& t. p6 K# a, `+ u4 e* K" K
6 E3 `6 W7 B w+ b$ d, B4 o. w- {2 default.rgw.control 9 s+ P& }$ S- @3 d- j
x/ t' {- G9 a9 v: @# G: W3 k0 U5 r
3 default.rgw.meta
& c% p) u; g" b% ?" R' r L) B7 D8 i6 M
( M$ j( i C6 n$ ]) c0 S1 B- ~7 D2 C
4 default.rgw.log $ r7 @. M, z0 Y9 a0 k
' l9 @( r. p& L5 S: @
; \& q! ^2 |6 S7 G- X2 b5 w1 o/ g
5 default.rgw.buckets.index
b( T" L4 b6 p6 |/ U5 v/ J6 M' C& b6 l& O& S
- S+ u8 P. b8 a. H2 Q5 Z6 default.rgw.buckets.data + L# l, ^8 u& a2 Z4 ^, X- D
, J2 d( d% e0 q& n& z
, w8 F: h M; c# {) i; M7 cephfs_metadata
' W" Q( X* I- V: v! c, o2 H* f# i8 ^! E# \$ Z1 s
6 t* [* v# f& o8 cephfs_data
& V% V8 F, X2 V! Z! E* U
4 o% u& P( f, H: u6 h+ X4 {7 ~9 J. d* z: I7 k
# 确认pools已创建
1 ~$ r$ i9 E. _/ d; w- W: `9 [3.2 创建文件系统# y( y) t4 |, {3 D4 R2 T
+ Y) a9 {$ a4 p; e9 b; s& r) c
$ ceph fs new cephfs-demo cephfs_metadata cephfs_data ( }3 l$ y( ~/ t+ f/ f) X
. Z+ s& W3 z2 F2 A- E% P5 k" O
3 B7 @/ L4 C4 A! M/ \# 创建文件系统,格式为:ceph fs new <fs_name> <metadata> <data> 3 { ?$ T2 N3 m* R9 J& C
- @, m+ \( `6 f% D: ?0 A
% J& k! _( w |* @# c8 Y% o, n
% H, m% ~( Z d/ r$ ceph fs ls # 查看cephfs相关信息 ! ]8 y! i+ P1 O
4 m% u, j+ {/ Y+ Q! J6 H$ [8 j
4 Q4 W( i2 T& K. o7 j9 w$ k
name: cephfs-demo, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
5 D! t( K. G' w& t* M' R a3.3 确认mds进入active状态: M4 \# M6 X+ W4 {
9 k+ s: {- w4 w% y; p
$ ceph -s 7 v1 ~# h% }1 \8 W
: U) U( E* A4 A7 {; j7 ^3 |
* `/ s* z' `( k3 {$ O
cluster:
( W2 _+ b$ L8 W! ~" E7 ^1 C+ o: W( s% a' {& u- y
1 L6 S3 N3 C2 Zid: b5ae2882-7ec6-46cd-b28e-6d7527e5deb3
( L6 e6 | N& ?6 Q7 s; a; H ] Y3 X7 f9 C+ @& R m* p
. D7 J/ A- G/ a
health: HEALTH_OK 7 Q+ p, i$ }5 |8 [) V
7 O% o/ B2 J+ @7 \- H- N ^5 {! |0 s' D4 W3 B" r# g: E5 \
) t8 {& G& I2 s$ x" \ - j% D9 N+ Z4 a* f- P, O+ R7 Q
services: " d$ k: L8 h- g
8 j/ P8 Y5 G: ^
& N2 z6 x, K% s* |mon: 3 daemons, quorum ceph-1,ceph-2,ceph-3(age 60m)
* ?3 X: ? [. q4 _* r, b
% [* _' T- a6 i
; i6 v% v% Z7 g& j7 r7 v7 {7 |mgr: ceph-1(active, since 64m), standbys: ceph-2, ceph-3& W. z1 ?8 D( o5 Z5 x2 J p, V
- S+ G. E7 Q! d! d& D, T
: s) k& Q9 [8 _/ A" o; W" z6 smds: cephfs-demo:1 {0=ceph-1=up:active} 2 up:standby + V( Y4 t/ l& u
6 N. ~# O2 @' {. |
- |6 p$ _2 T# A# 当前活跃状态的是pod4-core-20-6,还有2个备用节点
! i7 n0 X. ]" a& F+ b W1 [
) O7 V! Q" _$ [0 v4 v
" Z% W& t, k7 k c7 j j c* zosd: 3 osds: 3 up (since 62m), 3 in (since 62m)
( I' s) j: V8 E# |
/ h+ r9 C. l' c+ @ P6 N$ X+ q% U2 q
rgw: 1 daemon active (ceph-1)
6 T& V# e! [3 h9 P9 A3 w9 X0 A1 V6 U' X( Z
/ |* g0 Z3 |- p0 g" V
- @! P p' e1 Z! a 8 y; y4 v7 y% l# n
task status:
w9 [! M. J1 C& J! P7 z1 y/ o
6 b9 n' J, T0 d; f, @, ~
1 m8 Z! I, t" [8 T# W) u& ^scrub status: * U( E' v% L4 h6 I3 F
* p4 y7 b! Z. ~- I p; m! t; d8 E, G3 s& ~1 ~" ]
mds.ceph-1: idle 4 a; D5 ?) w5 c" ^. X3 h. q* Q* g
7 X! i! U# }+ x3 N+ h# {% W- A
" u% p. j- G1 J' _' t. F, ]' T
9 n$ O5 i0 E* b6 @6 E( i: U, j % a9 ~8 }; b5 u: S1 a3 |
data:
8 T2 K# F9 Z* D" V' {% V3 p
% V0 M& y) s( I6 D: }
0 j8 H6 E3 ^0 e7 z4 npools: 8 pools, 2000 pgs . W- C+ Z+ R! w7 P
D& `+ M D! ]# Q; w) Q' k% o( L, x: J3 `( P% _
objects: 223 objects, 3.6 MiB
( P$ L. |+ p; L- r. x7 c8 N" C
" L+ r* b [4 H
) [& _5 t2 y2 A& Nusage: 20.0 GiB used, 580 GiB / 600 GiB avail ) B. q* X$ `$ s
5 E* q0 j' n; I% [( I p
1 R/ _& y M: M% P! O3 x7 }
pgs: 2000 active+clean
7 x" _2 |# q) k$ x: A+ i+ C3.4 cephfs内核级别挂载
f5 f/ D! h9 [# y: m% M7 I直接内核级别使用,性能最好。
. a ?# S" g4 H1 @; J" d1 K6 I参考:官方文档
5 e# R0 b& c& Y. a
* I; G" b1 _ X7 E- g2 v- K- M
: n9 }) I- U$ k! Q A' Y( p$ mkdir /ceph_fs
& s" {4 Q6 g+ V: d4 `/ f! _4 ]& m0 E8 R. e3 h
# Q4 }/ U; z/ Q# f
6 h- j& g: p3 v% A, G. j: J+ O$ J$ mount -t ceph 192.168.120.16:6789,192.168.120.31:6789,192.168.120.23:6789:/ /ceph_fs/ -o name=admin 6 A* \, S6 t2 J v2 L
6 ]! @( F1 F5 J9 X4 o7 y; B6 P& ]- h* A7 r& s5 T. L" X
# 挂载需要指定ceph集群中monitor地址及用户名,monitor地址可以指定一个或多个(如果其中一个宕机不影响使用) 9 C, h2 }% `) G
) C, o# ]9 t' l
挂载后,即可自行写入数据进行测试。! a4 ~2 j. I- f5 M
3.5 用户空间挂载使用
2 j. p- K3 Q: o. b2 G# M% |6 b
0 q/ S5 P1 r. C2 e7 C/ H: t$ S$ yum -y install ceph-fuse # 安装客户端
/ j% w2 L2 j4 w& i3 g* S
6 x: O; |7 a D$ o" S; L5 |
1 A5 `0 A Z/ n' K j8 e8 L. C0 |4 N7 c8 h4 R8 p$ ?
$ mkdir /ceph-fuse # 创建挂载点并挂载使用
0 I: l' z7 ?( K! U! E
& K: O2 ?; G: i0 }7 w% y9 ` ?) F7 F A- V/ _& X- ~
, a, {! h' Y& G$ ceph-fuse -n client.admin -m 192.168.99.11:6789,192.168.99.12:6789,192.168.99.13:6789 /ceph-fuse 0 Z# i, O: E" c. _( n ]( h
' H* X( @8 X: p/ K/ L T( E5 T" b/ { u
# monitor地址可以可以指定一个或多个(如果其中一个宕机不影响使用) " X9 U" Z9 y1 O1 l- V
, E. b7 c2 B# f2 z. {: V t B" }8 \! X3 m4 a! R
8 d7 \4 X) `3 @3 y3 d U h5 i/ G$ df -hT /ceph-fuse # 查看确认 " t* t: d7 b p
% Q! c* p% X5 n9 r: W2 g
5 C8 ^! g2 X! T3 i- t文件系统 类型 容量 已用 可用 已用% 挂载点 ( i8 h# M+ W; X6 P0 m
5 S- S" T6 z* j: f. r
- e, H+ S. ]) `. ]& hceph-fuse fuse.ceph-fuse 94G 0 94G 0% /ceph-fuse
" ] _* `* J6 n: S; i9 U5 f9 \. i3.6 不同用户挂载不同目录3.6.1 添加新的pool到cephfs( z$ F1 F7 K5 g* M
2 N6 \( G7 e3 v- x# cephfs中增加新的pool " u4 i2 ?1 b0 I D+ k( b5 u2 f
/ b5 m& Z3 K5 `2 l& \% C
% x, f: N8 C& n( R$ @4 t$ ceph osd pool create cephfs_data1 64 64 # 创建pool
* @& a3 ~; F6 H+ }7 U& ^4 I$ T
* O5 m6 A1 P1 J: j* n2 j; Y+ |( o3 _- r/ D; k
$ ceph fs add_data_pool cephfs-demo cephfs_data1 #加到cephfs中
, Q1 [- T [7 J& u- d3.6.2 创建bruce的用户,这个用户只能访问目录/bruce,数据存储在 pool cephfs_data1 中8 h+ Q8 G3 q4 d' `
2 |0 m ^4 @6 ^) S+ [
$ ceph auth get-or-create client.bruce mon 'allow r' \ / q$ ?1 Q9 l; _, y% \1 f. _' _: o
# I( a, }( M. `5 {
' ?* S: d7 M/ `9 L6 Omds 'allow r, allow rw path=/bruce' osd 'allow rw pool=cephfs_data1'
1 f- p6 G4 F Y* w# F% h, J% i; M9 T- N \# n9 t
$ i. a% |+ I* q: e4 A" o
[client.bruce]
8 w) N( }" ]4 j$ \# k' N0 B% J
% J7 i% Q$ [0 P+ H7 B
, h% L) r1 b) l- b6 C9 J' Z" Dkey = AQCtFc9g/CmyERAAzi7ORpEWIxlMiiFC1GK7nA== ( s' E) D; s1 g. U& w: [9 S
3.6.3 客户端挂载0 U2 f4 }4 P( V0 O A! F
{4 e5 |2 m+ B9 e# f. C
$ mkdir /data1 # ]' p) v' d& L- z* M
) S) D, E" U' t- N( D1 i
* @1 Q& ~% K( e' C$ mount -t ceph 192.168.120.16:6789,192.168.120.30:6789,192.168.120.23:6789:/ /data1/ \ 7 j$ R1 U& V2 Y9 L/ J- o6 v
! L3 |7 f9 J, X7 C4 I
! E9 ]; L9 ^: S, s a P0 i-o name=bruce,secret=AQCtFc9g/CmyERAAzi7ORpEWIxlMiiFC1GK7nA==
+ X) k9 {: j$ B, j5 R; ~8 J四、cephfs权限与访问控制4.1 添加用户
2 ^! t a8 Z5 t2 ~$ b1 u) }: m) @6 C添加用户jerry,jerry只有对/jerry路径下的文件具有读写权限,对其他路径下的文件只有读的权限/ d- {2 r3 ^. t5 ?
) t3 j' l/ h' ?3 w3 i0 Q; e( ]4 B5 C" ^5 u+ ^' o( s, e
$ ceph auth get-or-create client.jerry mon 'allow r' \ 6 [4 J# s `2 A! _' i
, T4 w* \; i2 @: j! }; ?5 V6 Y- [+ R' J1 p( q
> mds 'allow rw,allow rw path=/jerry' osd 'allow rw pool=cephfs_data2'
1 L7 F2 ]$ ~1 i( Q1 a7 S
* c$ |. E& p \; b6 ` i
$ g; D5 {( l G# K3 v[client.jerry] ; f6 c, `6 B. _, F' `8 O" J
5 L7 U( |. z$ E0 [' O
0 A# A% e$ [: i! O! ?$ c( qkey = AQCdFs9gcepnKRAActZ4OcFf0bg3HsDpVMhlMA==
1 i9 J P& W8 W/ ?- f V) e+ Z, N4 ~ \$ P8 l( X1 H
/ h/ g, ?. H( p/ [. t/ y
7 ^- |8 l% O E6 M: h4 m$ l7 Q% j5 I# u
$ mount -t ceph 192.168.120.16:6789:/ /data -o name=jerry,secret=AQCdFs9gcepnKRAActZ4OcFf0bg3HsDpVMhlMA==
, m! A6 c! t' V. P3 r5 w/ B9 S& ~( j/ x) @
% U: F& J) M5 }) x P
# 使用jerry用户挂载
. z3 W2 v! g+ A; B, Q) ]; O+ d4.2 获取权限列表, z6 u4 I" J2 t
& _* ~4 U2 p, ^; v7 Z
$ ceph auth list ' ]5 R$ y( k! j! [3 Y
4.3 删除用户
! N; D' m& d4 ]* u. ]5 C( I3 J$ g- G' l# d7 @- e9 t$ B: B. f7 J3 R9 A* v& w
$ ceph auth del client.jerry & @3 U6 D+ E; h9 P
4.4 获取某个用户的key& K8 w$ q3 y' x& Q7 r8 w
! b" N/ }- v8 H5 N; C$ ceph auth get-key client.bruce ) ]5 \( l! `* ~/ D
4.5 修改用户权限
; G- e$ K6 ~' ~: f0 _; w
. I* c8 x! P( I$ \$ ceph auth caps client.jerry mon 'allow r' mds 'allow r, allow rw path=/jerry, allow rw path=/test' osd 'allow rw' 2 ^3 s; [# Z2 Z; ^, v# Q) p, k! U
4.6 注意事项: y- h5 ]) \9 q; \& `6 K6 x3 O
•当用java api操作cephfs时,api无法指定新建文件or目录的所属用户or所属组,这两个属性取决于运行java程序时的当前用户(uid)及其所属的用户组(gid)
# L. v: M; D* c; [! S& t$ z) u•经过测试发现,cephfs文件or目录的权限是linux本身用户权限和cephfs用户权限的交集1 x Y0 a! L4 }, S6 q# [3 w' } f
•修改用户权限后,在本地需要重新挂载才可生效
) R+ Y) M% n( a•建目录,设置权限无需前后顺序
3 X9 H2 J* m5 }. f4 E' D# G1 O- G. I* f2 N& S: T# F7 [
4 u" |/ ^1 J7 m8 [0 W8 s/ ?, V9 E
|
|