|
|
为了高可用性,我们部署三个MDS。! E* H1 s3 L# h5 }& m" y( ~
; b- @, \; v% J/ V% T1 ~. g1 p- G' J+ ~
$ cd ~/ceph-deploy/ # 必须在这个目录下执行
" i a k3 L: ^% R Q( ^3 e# W! N1 Q4 y, [% J0 g
2 J/ ^- D8 c" I* t) z- o( }
2 H5 Y6 l8 |2 v' W" o, u
$ ceph-deploy mds create ceph-1 ceph-2 ceph-3
- A6 c3 C# z6 ~- G$ W% ^9 L! s) Y7 p
) b7 P" V1 T3 r* V
# 安装mds - e4 Y. f" _; c$ t# O k
5 A% q0 u' E, ^: w: `5 e& ~% j/ h1 f' P; M1 `
; h! R6 q; Y' H7 ^
$ ceph -s # 查询集群状态 $ A6 K* V1 \. n& i: y
# K9 E! k/ h! V1 O& ^8 w" p- t8 U& E7 E2 W* b
cluster: 1 ~' g" l4 u7 h8 x
% s4 v n" X! s
# E" Z4 `4 O& y$ x4 ]2 Y) L/ x0 ?. aid: b5ae2882-7ec6-46cd-b28e-6d7527e5deb3
. @- m+ _& K& }: P- f/ g7 \1 K2 Y ~$ J, P, q& r. u
' d2 d1 j0 H8 r: c
health: HEALTH_OK , ?# @3 K4 b: p$ u
* Y& a0 w& Y# X' \. S9 ^1 j
3 H( H6 ]$ H- k5 c9 X
/ P u7 X6 g% i" c 9 i2 j* y( y8 A q" ]
services:
+ y, u6 Y2 u" z: x+ _ B8 v( n4 Z# `* b4 ], y1 v
& i* a) ~- b* x8 P$ Rmon: 3 daemons, quorum ceph-1,ceph-2,ceph-3(age 42m)
; y9 l# l" ^3 j+ V4 i0 H1 [9 y2 X+ o! J0 w
& L$ D z* F5 g P! xmgr: ceph-1(active, since 46m), standbys: ceph-2, ceph-3+ y; U8 u# i1 t4 `: @' i7 L5 Z! V
! v# W. V, c }0 s$ c! W" P- D5 f9 b; v* _# W- |
mds: 3 up:standby # 因为当前还没有文件系统,所以三个都是standby状态
# X4 G3 g% W+ ]+ ^+ J P$ K) b& r# u6 X! Q0 n) a7 r/ l
. K5 i( Y9 D; x5 y6 c0 Sosd: 3 osds: 3 up (since 44m), 3 in (since 44m) ) `0 r9 ?) b8 K. m$ M
8 O9 \% f7 {" V; Q2 P7 Y
! Q9 c( z, N; c3 M- C/ V
rgw: 1 daemon active (ceph-1 )
" k; J/ o: F+ p' }7 E' X, K& B& G5 z! g2 u' M5 f ?
& x3 A) X& S4 E) N
4 `. Z2 K1 v: E d' J9 `
7 @8 G9 s {5 e% r0 ftask status:
1 J |4 U: P3 m- V3 m3 r# z. r& P6 ^9 C; r& S0 }7 G$ P
& n5 o& W/ _: [+ p
$ @6 O2 r5 v5 R/ I9 P
" b% t% O3 r$ \2 b" J rdata:
6 _4 U$ [3 ~- z7 H. D$ Y6 X- r+ H+ T0 m% x* ?! {
& I8 d' t" D) V+ [9 j" g' opools: 6 pools, 2000 pgs 5 Q7 ], ^! f3 }. O5 [
9 d8 t4 i+ | m) z4 i; E: Z+ I! X) a( V0 N" ` [
objects: 201 objects, 3.6 MiB % j9 T5 G, {' A9 R- C7 @. u2 |+ w
, J& V% U% z' w! p$ G' T* @: w" D$ m: [" H6 |4 S+ S: M
usage: 20.0 GiB used, 580 GiB / 600 GiB avail 1 H/ h( g& \8 R8 S
5 h8 ?" H, B2 f/ i H
" H0 q- t3 I; T: ~$ rpgs: 2000 active+clean
- U+ p3 b2 q5 o8 R3 [: c三、创建cephfs文件系统•一个Ceph文件系统至少需要两个RADOS池,一个用于数据,另一个用于元数据。注意元数据池中的任何数据丢失都可能导致整个文件系统无法访问。# a% n/ Q# R e& T) z
•对元数据池使用较低延迟的存储(例如SSD),因为这将直接影响在客户端上观察到的文件系统操作的延迟。- { u# e+ j& z% L3 B0 X
3.1 创建pool
l. q; \" d5 c. l
+ G+ S. u' q; F5 k: H0 w$ ceph osd pool create cephfs_metadata 32 32
% f, V) N: }9 a# Q+ t8 {
" @3 k/ k7 s, g% P8 b
& F2 Z0 s4 b' ?5 M$ ceph osd pool create cephfs_data 32 32+ X' w k) q, a# d$ w
! u3 ]8 o. m% |1 D, t v1 c; u, U2 g0 s) V* x
2 g: X0 K; a7 c y5 h
$ ceph osd lspools % ~. d C- i) ^2 E
0 U! B; n' J2 A* r% y
! q. T' x. U- `5 A0 g" i5 v1 h
1 .rgw.root 8 L5 H( K9 C% g9 |! E
0 B! ?# Y& G; r8 r, X. q
/ k! ]8 @% F% w; K. \3 ?: q. F5 `. k
2 default.rgw.control 9 O E `+ b/ A! P$ q
5 t- @ b# i# c2 k8 _% _) {% f, }6 k" F+ P! N# X
3 default.rgw.meta 1 I; r% d) b0 ?2 U+ N
" j* Z) o. `4 ] l6 l$ E) U' Q
z5 X4 P1 W' l! D1 K4 default.rgw.log 9 W0 W! K, p2 q8 x
- w# w5 e# m4 l1 e
! I/ P/ g- T* C$ O6 G7 a/ m5 default.rgw.buckets.index
* E- |- k+ v& ?- b2 T1 t' ^0 d _8 ?9 c2 H) ~7 q8 d: u
8 c( s# t6 M+ L3 S/ y+ a( i1 M
6 default.rgw.buckets.data . i8 k( U% e% o) s5 M% R* r
# Z$ F: c$ {1 t% R
( X4 n$ L9 s9 u0 X. d7 E, V/ z% j
7 cephfs_metadata
0 ?0 f+ D+ _+ d
* s$ f5 B: K3 m9 _ t! b
2 y/ D. y3 f) z" F) ^4 [# }; T' ?8 cephfs_data
0 v4 b& u2 A) Y& v# A8 C. g5 m% N+ H8 U+ u
& y1 [- V" m( H7 I0 l4 @* h, `
# 确认pools已创建 ' m$ d% y" }2 ^- r6 z% v) V$ v
3.2 创建文件系统
# u# _* I: _2 t. F$ e; O& Y
1 q% B2 p: r; L$ B/ u' s$ ceph fs new cephfs-demo cephfs_metadata cephfs_data . `( U0 d3 e; ]
$ \( w: x; m# |/ E2 q
3 Z3 u; c8 @. X# 创建文件系统,格式为:ceph fs new <fs_name> <metadata> <data> ; Q" g3 C& v4 ~( I$ [ q
* A* T7 K( a' W: N3 `! M. \( V& \* g2 P7 j
0 W9 I7 H, g' q# J+ d' U* }( |
$ ceph fs ls # 查看cephfs相关信息 ; M. s0 k h J: y
. w/ @4 [' A+ I1 z
5 S2 w8 s' F5 @4 [4 I2 ~
name: cephfs-demo, metadata pool: cephfs_metadata, data pools: [cephfs_data ] 6 j- c0 B/ T/ P5 K/ N4 W" d& P
3.3 确认mds进入active状态1 V* O+ ?+ z8 P: T6 h I8 |5 G
# a& p1 r# b! a, I1 i& b3 x
$ ceph -s
7 g& H( L2 }' B2 Y* k1 R$ b; Z; V3 X8 g
# l8 P+ Z7 Y3 a s6 M
cluster:
2 ~7 Q( f6 N# y$ a
3 L# ~ n" g$ V' G2 N$ v, h5 R( A: q+ g* y
id: b5ae2882-7ec6-46cd-b28e-6d7527e5deb3 8 ]6 n4 z( l1 O/ h: i
9 Z+ y: ~! p* B! j8 \( a( |- @4 W7 b' b" Y2 a, d
health: HEALTH_OK $ q4 T: l$ E I; O5 @ E
$ x9 W; l5 [% M1 o$ _4 u# r8 F" l- n0 ?
, G0 z; w& s3 q+ C- m6 H
, L+ n j% U% E+ `' V0 @services: / B6 ^ p( r8 W
5 T% ~ h& ^" A# D, T& ^$ y3 K# E8 r3 i1 d
mon: 3 daemons, quorum ceph-1,ceph-2,ceph-3(age 60m) % p9 H( @* X4 k# l' p, P- Y
3 `3 ~3 m( l$ a* d3 a; j, @1 o) d0 c7 ^4 L; N$ h! j
mgr: ceph-1(active, since 64m), standbys: ceph-2, ceph-3
\3 o* c& \; i$ u+ ^: S5 R2 v
) r# m0 n+ E" y9 ?: Y4 N2 Hmds: cephfs-demo:1 {0=ceph-1=up:active} 2 up:standby 0 |9 c! g X/ M/ a+ P. i1 h
7 N% O& k8 k$ s. I' q" B
) d4 R4 [$ S* Z8 M* Z5 u7 m# 当前活跃状态的是pod4-core-20-6,还有2个备用节点
+ \4 ?- T5 Z, c5 K& m9 I) I* [& t# G2 e+ E
, X& y+ `/ F* Y% Nosd: 3 osds: 3 up (since 62m), 3 in (since 62m) 0 w# T" x# c, r3 v3 g+ P
& D n" W& I# q+ ~ D
2 j/ T# d0 A) V( L8 ~rgw: 1 daemon active (ceph-1)
7 K# W0 f3 c! J: }8 g* n
& G, f8 k% z h* i9 P% H$ w( \) \
' A0 F2 X) {4 G
8 w8 G+ |# |4 [3 y9 V; s
, o5 i9 t0 W- ]task status: % k( T7 F! Q5 d, t f2 h( P
, j; ^. ]6 m9 H4 j; `
l& Y- A3 b" i& \- N+ |& I1 _9 A, Qscrub status:
% c: v* m" i+ f) y
' |- c( E" s5 c$ M9 G. K
# | i8 D3 w' {! emds.ceph-1: idle 2 s0 U( o& P! I& m0 z! c+ V' J( L6 p
: _& G2 F1 L8 a3 A% M+ {. ^
8 X* j+ i1 y: F& v) W; [
8 ?3 _" D' \/ ] T
3 ]/ @) D4 Z0 A, ~& y- ]+ pdata: % O4 R/ \" v( R$ ^ M, `
3 W4 o3 q- F4 e' r2 E: E+ U( @
7 j2 u9 y4 q2 |% x3 Ppools: 8 pools, 2000 pgs $ Q5 u: c! Y8 ~; t7 Q
6 F8 i6 B/ s! ~ @6 U
+ \8 c: s) O1 d# }2 i# y
objects: 223 objects, 3.6 MiB
E6 D0 l! {7 W% B. x: Z7 q) k8 v( C
2 C3 h8 ?3 Y/ J+ P! h% yusage: 20.0 GiB used, 580 GiB / 600 GiB avail 4 {! H( v5 w& c+ n8 S$ P
. d5 _# C& I- Y w" x* H
5 a7 ]- v8 q- \9 M( f9 d, v/ ?
pgs: 2000 active+clean
' y% V& [' @. N Y* I9 @$ m( W3.4 cephfs内核级别挂载
! \; `+ _ H) k) y, p$ w直接内核级别使用,性能最好。- N% Y1 Z- n$ I/ z" p
参考:官方文档; R/ d, ^9 P' O) J/ y
3 Q' j5 b: q) ?$ A/ D$ h2 _# i. T- x# l# O- x
$ mkdir /ceph_fs
. O6 A n B) ~5 r. M) r9 Z
) N! m" [8 z: m; {- \& N m" P, K! B7 m
, J) y/ i" v' `
$ mount -t ceph 192.168.120.16:6789,192.168.120.31:6789,192.168.120.23:6789:/ /ceph_fs/ -o name=admin
9 p, e2 i: d6 `5 p9 t# J) @5 \+ S
8 o8 m" }2 o) n" t& A2 u* O4 l4 J! }! }4 y( p$ ~" W3 g7 d
# 挂载需要指定ceph集群中monitor地址及用户名,monitor地址可以指定一个或多个(如果其中一个宕机不影响使用) , O+ N# Z9 D' ~2 d# v1 L( n/ R6 p
3 P" c8 B# F) J5 G挂载后,即可自行写入数据进行测试。
+ u4 i% }! |* u% [6 i9 x3.5 用户空间挂载使用+ ~2 ?% }4 C! q2 ?
z" N9 m6 ]: U" m, f* D8 ~% d$ yum -y install ceph-fuse # 安装客户端
2 R: Q7 J, e1 f7 {# {1 L/ A
. O j% l- d# ?; L+ h
6 D! q* z: x' ?( q$ e+ D# h
* m( h* x0 Q/ ^1 e$ mkdir /ceph-fuse # 创建挂载点并挂载使用
: |/ r2 Z! b5 h; K' I5 H% \& J* |4 y8 q( `8 x7 V
; F8 i1 u! r0 ?. F9 z- @. H& }$ g# @3 {# m, j0 p
$ ceph-fuse -n client.admin -m 192.168.99.11:6789,192.168.99.12:6789,192.168.99.13:6789 /ceph-fuse
2 k1 H; F8 B) J2 R. r% z1 ~' R9 C
0 t. ~1 o0 f% |5 j' d# monitor地址可以可以指定一个或多个(如果其中一个宕机不影响使用) - E: b8 w- Q$ h- D" I
9 n9 z" n2 U; z
. t' ?4 P" O' g# b6 ]$ m
/ i$ q2 J: C& M* v$ N$ df -hT /ceph-fuse # 查看确认
# t& X# _5 q5 x) b# d" g5 D6 N$ s, _) d: M$ r! @1 _6 q
9 E' i0 F: G% C. {' I$ R文件系统 类型 容量 已用 可用 已用% 挂载点
6 a3 e5 e% F% {: E5 B& h* S
L. T' ^+ X+ q4 _% b# H3 n
% i8 {/ K( Z9 w" rceph-fuse fuse.ceph-fuse 94G 0 94G 0% /ceph-fuse
" v3 C- L9 P- ]0 D& _3.6 不同用户挂载不同目录3.6.1 添加新的pool到cephfs
( s) e" t4 f v( C; ~( M$ x/ ~% R2 J" m* e4 f
# cephfs中增加新的pool
5 n* u5 J3 ]4 O7 Z: _# x% k* ~6 v' ^: u1 D, ^) L% I2 z
* s! V2 P. k+ o
$ ceph osd pool create cephfs_data1 64 64 # 创建pool 1 Q( f5 q: Z5 H7 h! `
1 ~/ N. t! A5 P, W/ d# @& T& Y
7 B, B2 b8 @2 g' \ n3 c$ ceph fs add_data_pool cephfs-demo cephfs_data1 #加到cephfs中
: d+ ^5 | X/ _( C4 n' ]2 ^% d3.6.2 创建bruce的用户,这个用户只能访问目录/bruce,数据存储在 pool cephfs_data1 中6 H3 O" b/ L/ ^4 d& l
8 [- p, K0 V; p; N. B0 z8 P$ ceph auth get-or-create client.bruce mon 'allow r' \
4 ^* |% s+ z8 D2 s+ ^" i4 u8 H0 S: v+ I" x6 |
4 z! J/ T: \$ c4 c9 e5 b+ s
mds 'allow r, allow rw path=/bruce' osd 'allow rw pool=cephfs_data1' $ v: c' c; u' d! V! K0 n
9 h7 @: y# ?) L9 V1 C/ P( z- a! Y& Z; S1 S9 N: c, F& @1 ` I
[client.bruce] ' J$ N4 F9 v9 o- X% l$ M
+ x! D ^$ ~# M2 T4 v
6 ^* U' v" u+ |0 Z, ~. jkey = AQCtFc9g/CmyERAAzi7ORpEWIxlMiiFC1GK7nA==
9 o. ?% v8 T7 @' R% T7 o3.6.3 客户端挂载
' a0 O8 c4 t$ H$ A/ A' z& Y
' n8 r' e+ }4 d. R. {% y6 u0 N$ mkdir /data1 3 A4 S0 X. | `6 H* I
' r( L9 N4 [' A% {
$ \# C/ P" I0 z. P2 Y! R/ `: B. W$ mount -t ceph 192.168.120.16:6789,192.168.120.30:6789,192.168.120.23:6789:/ /data1/ \ ! F/ y* w7 l {6 a* g$ F- J
6 y5 I0 p. Y: o/ ^, G! T
: ^# x% Y1 ?9 M# _ Q! l
-o name=bruce,secret=AQCtFc9g/CmyERAAzi7ORpEWIxlMiiFC1GK7nA== ) C8 I+ ]; A/ z
四、cephfs权限与访问控制4.1 添加用户
- p* F" A$ P, f; }; d" b添加用户jerry,jerry只有对/jerry路径下的文件具有读写权限,对其他路径下的文件只有读的权限" b9 t" r8 p4 s% ]7 D* l
0 @+ ]/ |, |; q9 e0 B, W5 ~ ?0 r S6 e0 u' `
$ ceph auth get-or-create client.jerry mon 'allow r' \
h/ T( `% }' u4 {/ ?" h# t' G' ~5 {8 Y7 D( {
& I: w% ~5 B2 X
> mds 'allow rw,allow rw path=/jerry' osd 'allow rw pool=cephfs_data2'
+ N, O. d( j" V& j
, ^3 j: @9 C2 O" y+ Z- b
( P) J& q- p# u5 [& r[client.jerry]
7 z. x1 p9 ?1 V' ^" X$ J
- o" G7 A) ?! K0 S& r; ]8 z& K& }4 I
key = AQCdFs9gcepnKRAActZ4OcFf0bg3HsDpVMhlMA== - R. Q0 H. d# d' L0 W
$ T+ P& j$ B+ [/ | u: k. ]
, p: P' J3 G5 x2 K2 P& Q( {2 M) \4 i) W6 s( E" U& R! d) z7 G
$ mount -t ceph 192.168.120.16:6789:/ /data -o name=jerry,secret=AQCdFs9gcepnKRAActZ4OcFf0bg3HsDpVMhlMA== 9 B( l( C4 y' p7 t4 p
# c% z" p& z: Q: }9 s7 c+ |/ q% y
/ x2 \* U4 K5 ?
# 使用jerry用户挂载
+ D" C5 z6 S6 a4.2 获取权限列表, v) T( Q: g- G B/ S4 _! q; {. m
9 ?4 f/ T! L6 Z* G( d, W5 x3 @$ H$ ceph auth list
! E; g1 q4 }* |1 C( s3 N4.3 删除用户6 }( @, R6 q0 \( f) C. V
& Y% t9 v6 J9 Q* f$ ceph auth del client.jerry 7 r1 F% S- |" a* f$ ]; t
4.4 获取某个用户的key
( j. C9 x+ o% C" ]$ Y3 K1 P9 p, ]1 J7 g! i- b: n& U
$ ceph auth get-key client.bruce ) e" Y$ Y+ s6 D4 u' y
4.5 修改用户权限
& ?8 l8 e9 A+ z4 x! T) ~& C) [( \5 E( h! m9 R. r' ?
$ ceph auth caps client.jerry mon 'allow r' mds 'allow r, allow rw path=/jerry, allow rw path=/test' osd 'allow rw'
: T+ I$ e q, d: l2 ^ i4.6 注意事项
" m% _7 E$ i7 q3 D! k0 F•当用java api操作cephfs时,api无法指定新建文件or目录的所属用户or所属组,这两个属性取决于运行java程序时的当前用户(uid)及其所属的用户组(gid)
: E0 M' }- F1 z1 \: d) f•经过测试发现,cephfs文件or目录的权限是linux本身用户权限和cephfs用户权限的交集) {& p+ d: g; w/ E0 V7 E
•修改用户权限后,在本地需要重新挂载才可生效1 b5 `& n% ^. I2 {4 F4 ~
•建目录,设置权限无需前后顺序
9 P9 X5 ]+ N- d* p
! Z8 ]+ p% \# g7 o- q" h& D$ c2 e$ B' \0 {; i/ j3 Y' c
|
|