|
|
为了高可用性,我们部署三个MDS。
" |- z& }+ p( s: F4 @. [
9 |( ?% I, b# M( J" n. u
: I' w* L" s* D: H) j$ cd ~/ceph-deploy/ # 必须在这个目录下执行
1 D; Z, X% k# U' Z3 X9 K
& W; E; w% o8 ], P* F; V& @
% P6 L: ]9 @) R, O0 ?/ N7 t/ |8 E8 U. |% S: N' D
$ ceph-deploy mds create ceph-1 ceph-2 ceph-3 0 q/ Y& O/ q$ y! t+ l0 a' F& K
) U1 j5 t7 p$ u' x: m$ k9 V) J' z( n; V" F8 @5 Z5 b8 L) l
# 安装mds ! _2 k" R- z) d! Z* G
d5 d/ Y% C, i% _1 d' |/ Z% m+ Z; ]: g! O% Z% M o) t
2 I& \7 g! l) J- k) ?$ ceph -s # 查询集群状态
; u: T. {+ c, M8 f3 v
; z: \! A4 o7 D
. j; V+ F& @' \4 G! n& ncluster: 7 G' J* [' k9 Z* o; w3 |
4 A( m8 |$ n3 J* R1 \2 G
# P( Y9 k v4 `' L+ [* [0 Bid: b5ae2882-7ec6-46cd-b28e-6d7527e5deb3
; c/ Q+ Y& i; ^) x0 Q+ P7 f2 A) t/ d. i: b: E; ?
- `4 T& t- c& F8 v Y
health: HEALTH_OK 6 R$ O# T. g' n/ P7 O
, v6 q' z4 f& n" X" i+ B# t7 o2 E! [+ n8 r& M9 S& ^1 |* `, p8 u# B! s
" i% e9 f5 E4 k7 A- K& n' \4 B
U0 T: R/ m7 d+ T. s* m2 sservices: ! f9 N3 {) _5 F% _" d
& P! [& |, I9 R' L$ s- D
! n5 H9 ?8 s! Z* hmon: 3 daemons, quorum ceph-1,ceph-2,ceph-3(age 42m)
$ K2 b5 B& E" |4 P
$ Z1 M9 ]* H. g" M8 S2 h' v4 A$ S5 P# A9 U( V$ o& }: z
mgr: ceph-1(active, since 46m), standbys: ceph-2, ceph-3; H1 b" C. L' t& O7 l0 q& a
8 m; Q, z. F2 h2 @" n
: ?$ c6 w+ ~5 M) O5 Emds: 3 up:standby # 因为当前还没有文件系统,所以三个都是standby状态 / J# o5 m3 T3 e8 g* V, N9 B
: I2 ]) `% f: I! E: `- \
* H" {$ U ^* R4 H; V
osd: 3 osds: 3 up (since 44m), 3 in (since 44m) 1 A$ Y+ F/ U+ S& v* |4 }0 e) {
/ a# `, M+ r; B
. `- E& _$ }: A4 Y, @3 i% H0 i
rgw: 1 daemon active (ceph-1 )2 p) J7 J+ b* {, F9 ]+ q3 n
# d4 b; q4 I; x8 ^3 N @
9 v2 D* C: b/ P9 V# }3 U3 \, [8 [9 d/ O
) B' [, ?7 }+ S Dtask status:
+ r) O$ Q4 T; q J, a8 z$ p* V! ^4 l* q: d0 M
/ y# m9 C- H4 N
9 e) r: V4 e9 S) [ E * }8 P1 ?9 t6 S3 n7 R+ Q% n+ y
data: 6 I+ ?6 T6 _0 ^) z. s6 [$ n2 A+ h
- F: [% B$ ^0 n, R% i, G6 V3 h
% T2 }# P/ I$ V' J( Opools: 6 pools, 2000 pgs 6 x- @4 n# |( Q U/ m, F
" S2 V) c' ~9 P' Y5 B+ }; x3 \, s0 ~# q5 k2 n( N
objects: 201 objects, 3.6 MiB ' u, V9 Z# W# y l9 C7 V, u
" l" ^. z; _$ }5 Z" s& H0 k
- c: H5 B; X4 y+ x9 z* {usage: 20.0 GiB used, 580 GiB / 600 GiB avail
5 O6 A2 y/ u* E4 g1 ^- ^! O& `8 `1 N* A4 {
+ R+ `+ L# r, \. ^8 y) l2 c
pgs: 2000 active+clean
/ d7 {. H# U( t# I. |' T三、创建cephfs文件系统•一个Ceph文件系统至少需要两个RADOS池,一个用于数据,另一个用于元数据。注意元数据池中的任何数据丢失都可能导致整个文件系统无法访问。
9 c( j5 a& H3 b! Y) p4 X•对元数据池使用较低延迟的存储(例如SSD),因为这将直接影响在客户端上观察到的文件系统操作的延迟。1 x4 s% o/ S2 @
3.1 创建pool1 I0 v1 D* H( j% F2 ]9 T& A, Z# H6 {0 Q
0 I" v- h' m0 \ a' [( ?6 q: b$ ceph osd pool create cephfs_metadata 32 32
4 Y) {& a( l- N6 J
1 z( }3 @" e7 @, ]; a
$ c9 U) p3 u j3 e* h$ ceph osd pool create cephfs_data 32 32
; z9 V5 R3 O( w4 R0 e
+ n4 U" \; {7 S; _& C- h1 J/ Q1 n
/ e, g+ t/ M! n0 U
m6 C: r# _: F# L& j$ ceph osd lspools
* U2 g+ v: Q3 Z( b. |2 q
# d* ]4 R4 Z$ F/ s1 W7 T8 H* p+ _. K
1 .rgw.root
! v1 t# R" n. m6 j/ |
1 W& J0 ~/ n0 Q* ?' f4 t, X# n4 e+ u: A4 b& h- X: v9 |4 {; }
2 default.rgw.control : K8 y) U' A" v
& D8 i& k# z" g) v: |( W- D9 ?
" q6 N' n8 a+ p3 default.rgw.meta
+ v. J8 m1 n1 ^6 {1 ?" W/ e
" M% I+ j; C3 v( v0 _
2 C% x$ x, B3 J9 L S4 default.rgw.log 6 R, D0 k; z! J
( q+ \$ u y; {
x( a, M+ |/ ~' N( H8 ^6 s, e j5 default.rgw.buckets.index
8 f* l% q8 D7 H6 b% _) p. t; g4 }3 C/ F" A M. F/ d) {+ ]/ C
- E- I. Q" M, k, h$ G; q: [7 }6 default.rgw.buckets.data
) W; Q6 Y' k, a; f+ ~3 K& b( K
; p1 G+ m% P1 s! P/ N. e# v% r: s7 E7 s
7 cephfs_metadata
1 J* b( T8 k3 y' N3 P4 ^6 J# |) s* O/ h7 i" j' e
7 u" S. d% I# ]. R2 r1 n8 cephfs_data
3 l) A& E) V/ t) H; c0 Y @7 y" o
+ P5 T$ R; D. G. R0 x$ u
. N5 `( a" c7 p/ C5 H5 p# 确认pools已创建
" A* } s8 |; n' \# U3.2 创建文件系统" j' \# Q& `! f! k: @' i6 D
6 Q/ q" V2 a2 i- Q" D8 R, W1 M
$ ceph fs new cephfs-demo cephfs_metadata cephfs_data l1 H; e: g, n6 [ s9 z
" A% x' Q; a; N& J8 f
8 c" @1 u3 U4 L" H+ d5 _# 创建文件系统,格式为:ceph fs new <fs_name> <metadata> <data>
2 v- K. P1 O# ?( {. C6 i
! m6 K& O! I/ I' a/ Q
7 P4 M# D) h: ^. I' C' S* g
6 _" B1 u, ~( b( d) W8 I$ ceph fs ls # 查看cephfs相关信息 8 d3 v4 g1 G. X8 V$ Q, V$ ~' h& _
7 b8 v9 S B& ?4 F. }$ l
$ F# U+ @2 m* Hname: cephfs-demo, metadata pool: cephfs_metadata, data pools: [cephfs_data ] q* K# g$ w$ T; F: H. I& q5 E2 }8 t
3.3 确认mds进入active状态% c$ S3 l# t, F) v4 E( ?, K
% G5 C6 ~: g. H `# L
$ ceph -s $ a4 X) W3 A0 b! W
8 t0 t) j- _, ?0 Z
- \6 v6 K. _8 G, O$ k
cluster:
( y+ A( M1 {% J7 s- D% [- r, t
# a! d! v9 o( u& d' q! W% d" s4 V( C' @- o; W) W: n* e+ d9 w
id: b5ae2882-7ec6-46cd-b28e-6d7527e5deb3
o" Y1 F q$ H% S! M, [9 R# f* Q3 h& B- x3 f
: |# Z9 g( {) G, h8 j
health: HEALTH_OK / V# q* I# o1 G- z
. q1 w- d" t3 m/ d
5 a$ h. y8 T2 f* P- S( E, F
# k7 R8 _! D; S& i9 v% g; Y0 e
% c) s6 \% ]! h3 _, }5 i7 ?
services:
8 B1 H. b L, b+ F; ~+ {! ^1 z1 S& _1 q/ _- Y. J7 u- R
% I% S/ x; {, w: K- b8 P
mon: 3 daemons, quorum ceph-1,ceph-2,ceph-3(age 60m)
8 i0 m. X: \, G2 ?# n6 p0 T: Z, Q! r4 Q
6 `4 r) k4 t! z1 X0 l& }$ `
mgr: ceph-1(active, since 64m), standbys: ceph-2, ceph-32 F1 F" Y- w! H. M/ Y0 b [
+ K# G. _) F' Q3 a3 C$ o6 I
) l: `, `9 h$ r0 {, R8 e
mds: cephfs-demo:1 {0=ceph-1=up:active} 2 up:standby
3 g8 a3 e# H s$ {+ s; y4 {
0 B3 S1 Q( r0 d# n) d- Z7 ?
! _! O/ Q+ N5 }$ z" z* p$ {1 D# 当前活跃状态的是pod4-core-20-6,还有2个备用节点
% o, E5 @, v' {0 u" q4 i ?& l8 T' f: _0 t9 V3 e# [ r$ u$ e
3 h) J5 x0 H8 C/ |osd: 3 osds: 3 up (since 62m), 3 in (since 62m) ! U8 h' L9 n9 _9 G+ {
, o3 U# j" g9 g- |4 [
: B+ [* \# w# x' ?5 u; Crgw: 1 daemon active (ceph-1)
+ {% q7 k J8 B! T+ N9 B. v6 i: e- t3 ^8 F# b& |8 c3 G& r
, u! i; ~% ~. z
( A% K/ h/ j: l; E- V& \ * E( R; Q+ F, I; `! b7 f
task status:
, P, V' k0 D6 U
: w# {, J0 h" \0 y Q
2 a6 Q* g N/ \) w2 n Fscrub status: 3 F$ h& |- E9 o8 d! ~6 X
2 P8 q' s6 F1 \
3 X- N( V2 \- R4 Z& k
mds.ceph-1: idle + ^& y2 h1 m! P' H
; I0 @! k1 l4 P. U% }% t9 C' y0 v& h
, X' ?- N6 m- W5 o5 m; ?! [: |: n( V _ K3 G& m
- @8 Q0 k! r6 n: S/ sdata:
4 R3 S9 [8 j3 N$ |% r( f: j
4 w: o+ b. Q; Y" Q& D1 f; g& Z2 r# K9 Q8 t
pools: 8 pools, 2000 pgs
4 I" G; Q8 ^1 w t9 w
2 v/ { R. d3 u$ M
v/ n! t4 A6 w F0 P3 a3 ~4 qobjects: 223 objects, 3.6 MiB
4 n% s) q2 h6 d. n2 A- M8 z7 P1 Y$ t/ g" t8 A5 r0 B
5 C6 ?: r8 |% B# m; s- \- u$ W `8 m6 E
usage: 20.0 GiB used, 580 GiB / 600 GiB avail : D# ~0 _5 P: c' V. U4 o3 w
/ H, D: i/ ^8 G& u2 ^/ m
, `6 A. S/ W; T9 j" {pgs: 2000 active+clean
9 R4 ^7 Z! p ~! q6 t3.4 cephfs内核级别挂载
9 B& d7 q& Y8 l, C- k直接内核级别使用,性能最好。
! r- @! u: q0 Z2 `- F参考:官方文档
& w7 O b- ]7 }- a+ h \2 @
7 W9 D7 C% T( r7 @; a# k" O3 W& N+ E9 U9 ]6 j
$ mkdir /ceph_fs
7 \/ u5 T# A. {. I/ {6 _- \' H% x$ E
3 y8 u k! F' M1 h, L- E4 _. Z% k9 V
! |4 I9 J/ J+ V$ mount -t ceph 192.168.120.16:6789,192.168.120.31:6789,192.168.120.23:6789:/ /ceph_fs/ -o name=admin
% j. q$ _, ]- T$ a# R7 Y/ q. \' M* o- t6 V8 X) ?( H. M- B
+ d. i r X: R9 k' l# 挂载需要指定ceph集群中monitor地址及用户名,monitor地址可以指定一个或多个(如果其中一个宕机不影响使用) 8 R5 D: M0 z9 [
* P$ O+ G) p) B6 R- j: J3 u9 M2 g% {7 y
挂载后,即可自行写入数据进行测试。
/ e8 \+ Y6 {3 Y1 d- y9 u3.5 用户空间挂载使用
+ O; e9 U% P5 @! d% ^2 Q! T
" g( a. _ t' r& `$ yum -y install ceph-fuse # 安装客户端
2 H6 x7 w0 y' u' H
# s# _* n2 I- v) k4 {# S: ? f4 s( r6 b0 Q3 E6 f4 q( S" X
: f: C- h- d: o; d; K$ mkdir /ceph-fuse # 创建挂载点并挂载使用 4 C* q2 Z( M" \
0 X0 H; a% r4 v: I: T
- z9 H; }$ r. J% w
' W/ Y! n j" R9 U# B S$ ceph-fuse -n client.admin -m 192.168.99.11:6789,192.168.99.12:6789,192.168.99.13:6789 /ceph-fuse
9 c3 @/ C c0 l! k. r6 R6 K& A3 P% G2 M, |- Q, s
/ m6 H+ |$ ?; i6 h2 l2 o# monitor地址可以可以指定一个或多个(如果其中一个宕机不影响使用) ! i* q$ U+ M$ V6 J
$ N" u; x8 X, H0 `
4 J) \/ Q+ C5 T/ F# I" M2 n
z! ?; M7 Y2 L# _: z* `2 R) y, i3 |$ df -hT /ceph-fuse # 查看确认 2 y% D9 P- d: Q3 d5 K* {( ]
/ a* H9 a5 a$ C/ `& U* R/ A
0 z+ V/ U" M9 ]6 l b文件系统 类型 容量 已用 可用 已用% 挂载点 9 D# P8 Z, j3 Q" L4 |/ W
9 p' p# ~/ @% E( P: K
. `* u0 E6 ~. _: _, j+ Eceph-fuse fuse.ceph-fuse 94G 0 94G 0% /ceph-fuse " [) m, s* F8 I
3.6 不同用户挂载不同目录3.6.1 添加新的pool到cephfs
0 r7 i- f Z' O r9 ]& C& e% l1 p; z2 x9 }" W5 `
# cephfs中增加新的pool
/ N& [8 o4 F# S
% C, w4 S- y- j8 u: z6 N# q
R* ]+ @% H" x. y$ ceph osd pool create cephfs_data1 64 64 # 创建pool
. p$ T; h/ Q6 `+ h
% Y) E" d; _8 F7 p( m7 ~# [; h/ K: S6 d A1 ]- b
$ ceph fs add_data_pool cephfs-demo cephfs_data1 #加到cephfs中
4 Y5 b u! q( R' ^3.6.2 创建bruce的用户,这个用户只能访问目录/bruce,数据存储在 pool cephfs_data1 中4 V, r( i% s) T& a
* O0 q3 |' p3 Y x* V
$ ceph auth get-or-create client.bruce mon 'allow r' \ . ^8 z# a j! _+ i( z4 \4 z
! S! a" L; P& Q1 e9 f) u/ o
, n8 a' t) g J1 e z6 Z
mds 'allow r, allow rw path=/bruce' osd 'allow rw pool=cephfs_data1' # [* S' |$ [& D+ Z6 j" @( P. P
8 A; p: Y$ o% u3 b0 J+ {; N4 m6 S0 J! T0 C0 |' p' f# J; q9 I
[client.bruce] 0 _/ L7 P* p! a' e8 f
; u' N( r, O: `3 F
5 F2 I$ e! X: B" I& ~key = AQCtFc9g/CmyERAAzi7ORpEWIxlMiiFC1GK7nA==
C, O! Y4 x. Q! \" M1 C. o3.6.3 客户端挂载
# B% y ^2 C$ B2 o
( x# R6 b2 p" C9 k$ mkdir /data1 . u1 q; `+ \( c( q2 b0 [$ S* ?6 R
( v0 [$ c" X) ^0 n
+ n8 m' q# _2 [' b* h# e$ mount -t ceph 192.168.120.16:6789,192.168.120.30:6789,192.168.120.23:6789:/ /data1/ \
' M) l u7 F9 q- T' S$ S! C; g& [+ `2 U' {7 w& {( G& y
+ z2 L/ t1 v$ @/ W* W) D6 s w5 J-o name=bruce,secret=AQCtFc9g/CmyERAAzi7ORpEWIxlMiiFC1GK7nA==
5 O* y/ P4 O% b+ a; C8 c四、cephfs权限与访问控制4.1 添加用户
o* G! x; D; F$ c) b添加用户jerry,jerry只有对/jerry路径下的文件具有读写权限,对其他路径下的文件只有读的权限1 e. T* I: @! ~( g
" u/ z$ q4 t' n, T0 b8 V
6 v9 M5 S& M! ]. K$ ceph auth get-or-create client.jerry mon 'allow r' \
; Y6 `( T4 l+ }& @- z( v8 |- o1 p! \
: _/ }9 i* B% v( [
> mds 'allow rw,allow rw path=/jerry' osd 'allow rw pool=cephfs_data2' 7 i* h5 b* ~# g+ m; B
- P! y/ r5 |1 ?9 `
# `1 }$ V+ h0 m0 c( p$ ?; m& x[client.jerry] ; _) V* R$ g; v5 s( W
6 i* f2 Y* t0 Y- [8 j: H" w; B; p* B, ^, [
' @" F9 X$ _+ L! O w7 Ekey = AQCdFs9gcepnKRAActZ4OcFf0bg3HsDpVMhlMA== 4 V7 V/ Z7 B* g8 R
: m7 R# ?0 q+ l$ d' E6 [: Z% h
3 [; `9 ]2 l2 X7 W5 q( d S6 ~
( b9 C; d- g" l$ mount -t ceph 192.168.120.16:6789:/ /data -o name=jerry,secret=AQCdFs9gcepnKRAActZ4OcFf0bg3HsDpVMhlMA==
2 r" w4 g+ z: m3 p. h( W
7 B9 u9 Q( E# D4 j: z; X9 \8 t6 n) P
# 使用jerry用户挂载 2 A6 J9 V' Q- C! B
4.2 获取权限列表
9 M e! O3 g. h( M9 {5 Y+ X' S2 ^- c0 C+ ]
$ ceph auth list
3 B- A+ q5 |. |, ]+ R, F4.3 删除用户! w+ f* U3 I. q4 ?- K
; h: \8 }) d8 |( A& {% m$ ceph auth del client.jerry
% R; t6 ^8 m" g4 e* x4.4 获取某个用户的key
* V' d& A6 l0 i1 P' \. i) N- o- p0 P# T7 @* i
$ ceph auth get-key client.bruce 4 c ?; J$ q. a1 {/ T
4.5 修改用户权限5 ?5 z: W6 B- ^0 d# y+ p5 Q
6 A2 N$ r, V8 }
$ ceph auth caps client.jerry mon 'allow r' mds 'allow r, allow rw path=/jerry, allow rw path=/test' osd 'allow rw' . T; ~9 n& t. a5 m6 Q: h
4.6 注意事项 @ P' i2 t1 H! t
•当用java api操作cephfs时,api无法指定新建文件or目录的所属用户or所属组,这两个属性取决于运行java程序时的当前用户(uid)及其所属的用户组(gid)
& M' x, U' L6 G$ O! H7 K! X2 R4 `1 `•经过测试发现,cephfs文件or目录的权限是linux本身用户权限和cephfs用户权限的交集) j, |% M2 r' j6 ?# o" p
•修改用户权限后,在本地需要重新挂载才可生效" h9 F) |% R6 R+ N3 f0 n
•建目录,设置权限无需前后顺序
9 c# y3 H. w0 V0 s4 G
6 D; }7 ^& b3 q' l( M9 k
% C3 V. W) a- r* G |
|