|
|
搭建
$ Q( H; z: E* Y8 I- g9 u4 z* c0 x. R- `& `; K9 d
有两种安装方式,第一种下载编译好的直接使用,第二种是下载源码进行编译。由于暂时不更改源码, 故使用第一种方式运行
; O# q' D V; O+ K3 h5 i3 s1 e下载地址:https://github.com/chrislusf/seaweedfs/releases 下载完成后,解压出来直接运行。
8 Y# V* N9 S5 T' b相关定义意义说明 d3 g$ P5 P6 {$ V+ m* r+ q* w
2 M; Z& n* p* t" S- @4 w! k
因为是研究测试使用,就粗糙一点,都是在一台机器上完成( ~# H1 e: \" H3 \+ h
计划: 一个master(master只能为奇数个【好像master是以ip来做确定个数的,我做实验时,使用不同的端口启动三个master,在申请卷信息的时候报错,所以这里改成一个】)三个volume 一个filter4 p! J9 J+ ^( I+ {7 L- p- ~) M
. h d, c: h: h2 ]从官网的release仓库选择一个版本下载下来,
! A6 S: V0 ?3 O" | _8 T+ S% o
; O, [' `8 @+ T9 u5 R% \wget https://github.com/chrislusf/sea ... /linux_amd64.tar.gz7 j! R. H( U+ @8 e# x& C
% M8 Z8 \0 v; R# f c* t
上传到/usr/local/weedfs目录
0 U+ x1 c% d# b0 [3 S6 F* u. |3 j5 p4 x' w4 n
mkdir -p /usr/local/weedfs/
( `: t' e$ D! Xcd /usr/localweedfs/
0 h% o1 L! E& z. N$ `1 Ttar -xzvf linux_amd64.tar.gz
- m) [ y9 t7 C" }1 E得到一个weed可执行文件,weedfs的master 和volume的可执行文件都是它。
. s2 E8 h$ C, O& X( y创建数据卷根目录以及各个数据卷目录、master数据目录和filter目录! M; J7 h1 k% e$ _6 \' y( ]) {
7 A2 e1 w `9 h- T0 |! Q4 Mmkdir -p /data/weedfs_data
* k' a: j9 J2 f, m+ `7 amkdir -p /data/weedfs_data/vola
& y; }- p g0 V! V `, l5 Zmkdir -p /data/weedfs_data/volb
* [+ {7 B9 r- p. \1 }mkdir -p /data/weedfs_data/volc
, v& Y) F7 o' o. f) Lmkdir -p /data/weedfs_data/master
3 ~+ E+ H! f. a3 H) ^: a$ j8 _- Amkdir -p /data/weedfs_data/filter; q; W4 [2 u! n
启动master
# ]* `9 z! T8 Q7 v( r# N o% |( B& z% t; i/ s% q
[root@k8s weedfs]#nohup ./weed -v=3 master -mdir=/data/weedfs_data/master -peers=localhost:9333,localhost:9334,localhost:9335 -defaultReplication="001" >> /data/weedfs_data/master/wdfsmaster.log & ##同个ip指定使用三个端口启动的master,在后面使用中会报错。master集群是用ip来区分的9 M ^" n. Q; c) ?0 D, ~) Q: \/ s
[root@k8s weedfs]# nohup ./weed -v=3 master -mdir=/data/weedfs_data/master -defaultReplication="001" >> /data/weedfs_data/master/wdfsmaster.log &
3 X& o, V0 C F* J( y启动完成以后就会生成下面文件和文件夹
- A8 b: v6 {* l3 s" j; V5 f# [4 H S) q0 O3 r
[root@k8s weedfs_data]# ll *4 I# h' v2 L5 ~: U) t
filer:* }: k0 @8 K; m8 v& F' }, P) S
total 0
2 N8 r# }6 m* j- S8 B3 ^drwxr-xr-x 2 root root 6 Feb 3 16:17 leveldb2
; z% z% `5 a& W, f
, [( M* X, u- vfilermount:, }' c7 C2 R9 W* `: Z2 q3 f
total 0
3 g. ]. _5 H3 m1 }8 b0 cdrwxr-xr-x 2 root root 6 Feb 3 15:32 data
* J' t5 H5 u: @0 e0 Y6 t1 n# Z
0 s$ U: v( N1 t+ l5 amaster:
4 o; m& Z* `( F; A" Vtotal 16
5 C* V3 {# C9 B/ @; d-rw------- 1 root root 28 Feb 3 16:52 conf
0 v8 V0 U6 b* C# K1 {-rw------- 1 root root 112 Feb 3 16:52 log4 N! p7 E' f2 Z: H% I$ p
drw------- 2 root root 6 Feb 3 16:52 snapshot$ b1 U* D2 ^6 Y6 L
-rw-r--r-- 1 root root 4513 Feb 3 16:52 wdfsmaster.log; X+ h+ _ S$ r- a }
$ T7 Q( M' u: ^8 ?* Kvola:
7 ~" @ ]5 P4 q* {total 0# f7 H; t* N% E
. `( g+ j& ^( W
volb:
2 s- n0 ~+ [. B6 M! h" j. @total 0* d" e* p. _. f3 C* u- M) Y
6 D# D w; B! A- @volc:# p J% q1 g5 a N
total 0
. i& j4 ~9 M$ k) ~$ \0 G( f) t B
5 r) B8 u7 P3 D* }7 \vold:
$ N `. z- N' G. F0 xtotal 0$ H% z9 [6 q, m
" \3 k2 V! G' d. avole:5 V, N6 l }* @7 [0 K( N
total 0
8 O) e: Q2 w! [# _5 W
" X5 F! j# O7 Cvolf:
- c+ P# [2 R3 b3 M$ V' d7 T# _total 0" n1 |, G( g9 H3 c4 A( U. e {7 F
[root@k8s weedfs_data]# ps -ef | grep weed. [+ C1 s" z6 @* N5 p/ B/ _
root 16171 15806 0 16:52 pts/3 00:00:00 /usr/local/weedfs/weed -v=3 master -mdir=/data/weedfs_data/master -defaultReplication=001
* p; A. ^6 X6 g% J: ?9 w6 Xroot 16190 15473 0 16:52 pts/1 00:00:00 grep --color=auto weed) x* d8 Q+ d' B9 a+ k
[root@k8s weedfs_data]#% Q; T% a& ~" b+ S- ^+ _1 `# U4 f
启动volume
Y0 w q( \: p1 a* C/ o% w7 L
3 ?- i4 B/ o% N, N+ V( F[root@k8s weedfs]# nohup ./weed -v=3 volume -port=8081 -dir=/data/weedfs_data/vola -mserver=localhost:9333 -rack=rack1 >> /data/weedfs_data/vola/wefsvola.log &* ]6 {! C- s! F
[root@k8s weedfs]# nohup ./weed -v=3 volume -port=8082 -dir=/data/weedfs_data/volb -mserver=localhost:9333 -rack=rack2 >> /data/weedfs_data/volb/wefsvolb.log &
, n, S& v5 E2 N5 I* D5 }[root@k8s weedfs]# nohup ./weed -v=3 volume -port=8083 -dir=/data/weedfs_data/volc -mserver=localhost:9333 -rack=rack3 >> /data/weedfs_data/volc/wefsvolc.log &1 v# |. ]" J7 X7 G9 N/ |
启动完成以后就会生成下面文件和文件夹
; \2 v2 {) n9 n, G4 k3 b, T: Z9 D; \0 l: A7 {+ ^* D
[root@k8s weedfs_data]# ps -ef | grep weed7 ^, c% J) c: n1 ]
root 16171 15806 0 16:52 pts/3 00:00:00 /usr/local/weedfs/weed -v=3 master -mdir=/data/weedfs_data/master -defaultReplication=001
& t$ {/ r9 c/ w' F, Xroot 16191 15806 0 16:54 pts/3 00:00:00 ./weed -v=3 volume -port=8081 -dir=/data/weedfs_data/vola -mserver=localhost:9333 -rack=rack1
% g- }& B5 ~0 H$ p, N$ _root 16217 15806 0 16:55 pts/3 00:00:00 ./weed -v=3 volume -port=8082 -dir=/data/weedfs_data/volb -mserver=localhost:9333 -rack=rack2( a, N4 N+ @9 n* O6 v# v
root 16359 15806 1 16:56 pts/3 00:00:00 ./weed -v=3 volume -port=8083 -dir=/data/weedfs_data/volc -mserver=localhost:9333 -rack=rack3
" ^6 \ t( \' ]9 Froot 16378 15473 0 16:56 pts/1 00:00:00 grep --color=auto weed
! T/ O+ @& r: \[root@k8s weedfs_data]# ll *
- z4 C$ v7 T1 Q2 b4 y7 H( [filer:
7 D, C9 ~: T8 l: ktotal 47 E$ R- ` d( z& ^9 \; ]
-rw-r--r-- 1 root root 2715 Feb 3 16:55 filer.log
& S) p% E' U: y6 ~. q z, W: Sdrwxr-xr-x 2 root root 6 Feb 3 16:17 leveldb2
9 W& _: b1 m8 d, m( t% p0 g% P6 X, t7 E" A9 `
filermount:
& l/ s% ]: N" t: W$ z4 `total 0
1 }5 q) [7 p: jdrwxr-xr-x 2 root root 6 Feb 3 15:32 data, @( J! D& ]8 O @
-rw-r--r-- 1 root root 0 Feb 3 16:55 wefsmount.log4 D# g9 j9 w! c( h. Q+ L
* e1 Y# v& {6 {4 r4 _7 l S
master:$ c1 \( m3 K4 K- u; N, v
total 24# K6 f* }6 D! o" c, q# D; T
-rw------- 1 root root 28 Feb 3 16:52 conf$ W# W7 U& ~( Q4 \8 R1 ]9 P
-rw------- 1 root root 112 Feb 3 16:52 log
- z! J }$ O6 c! o6 Z( \+ ^drw------- 2 root root 6 Feb 3 16:52 snapshot
: x4 w" Z+ F! v3 s% U* F* m s$ j-rw-r--r-- 1 root root 14495 Feb 3 16:56 wdfsmaster.log
5 y8 O, F0 @5 L$ I# c' J8 [- v4 T5 |" K7 y9 b
vola:
' d8 s. Q$ d m! B4 A6 x S. f0 {total 8
. X! ~9 F# a" Y4 t( w-rw-r--r-- 1 root root 1267 Feb 3 16:55 wefsvola.log }5 v. o6 H- f7 L! ?
-rw-r--r-- 1 root root 1151 Feb 3 16:55 wefsvolb.log: O3 W- @* q# q
3 H' `6 e) |3 J
volb:$ ^+ b! S/ r! w5 |
total 43 t4 G$ b( Q, g3 h
-rw-r--r-- 1 root root 1151 Feb 3 16:55 wefsvolb.log
9 B# n$ u0 l1 u6 H, x" l. O, y* a( C1 ^ U
volc:' s, e+ ~( [: P, N, d: E% _
total 8% \: x; T, G+ ^+ R6 w# [; \ H
-rw-r--r-- 1 root root 4644 Feb 3 16:56 wefsvolc.log
; S* ~2 V* I1 z; _: F1 ?# g9 m- i6 r' t
vold:
* P3 n; ~) `. j6 rtotal 4
' A$ p+ o% M7 }' d) k-rw-r--r-- 1 root root 1151 Feb 3 16:55 wefsvold.log
2 H! E; ~1 p: i2 T! S
* ~% r- x- l, l5 Rvole:9 A# ]% Q) k1 o! P
total 4! i& L+ G* w1 j! Z9 z# t: }3 t
-rw-r--r-- 1 root root 1151 Feb 3 16:55 wefsvole.log
0 \2 ?0 u# N5 ^" Z
+ u4 T9 m) p. rvolf:
. n2 _3 z) V$ v* c- Q( p: K6 etotal 4. ^8 v; A0 _ H. C4 ~! d3 C
-rw-r--r-- 1 root root 1151 Feb 3 16:55 wefsvolf.log
# h! ^% H; r* y[root@k8s weedfs_data]#( p; t( B9 X" O {% ^% P1 t D
此时volume下面还没有任何数据,volume server会在第一次写入数据时建立相应的.idx文件和.dat文件: P% y) m5 N: c9 M) @' O2 g, {
0 u3 S2 h4 B7 l- Z0 A7 ^启动filer a; V: }( P; L
% {$ m. P6 e4 m a; s F+ ^# K文件服务+ h, D" H9 f: `( J+ t* Y
& i- ^/ u! }/ m1 U# R可选的文件管理器服务可以减轻您的负担,因此您不必这样做。5 F; w. D& y0 f0 \
2 |8 w8 c2 J) {( U- B它通过HTTP或UNIX FUSE挂载将SeaweedFS卷和对象组织到用户可见的路径(如URL或文件系统)中。
, @6 p# t @" f- |: y; ] F4 Q( U. t1 l q0 D
Filer提供了一个方便且通用的抽象,可用于为现有应用程序提供正常外观的文件系统或Web API,以用于向下/上载,而无需进行修改。
5 }1 M. J6 k" y, o* a0 G9 G
$ a# b1 ~1 Z8 ~可以使用文件, MySQL, redis等保存 filer metadata, 只需要启用或者停用对应的配置
p- u0 @2 h# ~+ z6 l t
+ v j2 O) p9 \3 o4 I- n" }; q( [先生成一个配置文件,如下图
6 Q3 W9 y7 M7 G. X9 T$ J1 ]) }0 h; K
[root@k8s weedfs]# ./weed scaffold -config=filer -output=.
$ U9 v* i/ R1 h修改filer.toml,把filer的数据目录指向导/data/weedfs_data/filer/leveldb2下9 F( W: f3 Z( D2 J: o8 D5 S
4 s% q, [0 ~0 c" e/ D
mkdir -p /data/weedfs_data/filer/leveldb2% k" h2 H/ d5 c. ^
[leveldb2]
7 e. T/ M* P6 g- z; U! |3 ]# local on disk, mostly for simple single-machine setup, fairly scalable( K, `3 ]! ~" t0 v. t
# faster than previous leveldb, recommended.
: W! D( }3 M- L3 M% penabled = true) h/ z" P N: |+ B6 |# m# L. a
dir = "/data/weedfs_data/filer/leveldb2"
0 O! p# t g+ G) K然后启动0 O! J" [9 R# N. @% D$ H' [1 j/ O
: L; i. Q& u0 j7 }% I( n
[root@k8s weedfs]# nohup ./weed -v=3 filer -port=8888 -master=localhost:9333 >> /data/weedfs_data/filer/filer.log &
' M0 I9 F! K2 y# {; r[root@k8s weedfs_data]# ls filer/*' T. I, t2 f. h% J* M3 q
filer/filer.log# M( r2 l4 M; b n4 l% A
' z7 V: [* i* R( z$ J, Y3 Z3 Ifiler/leveldb2:
; N) j* x1 r! `# q, c! ?, h00 01 02 03 04 05 06 07
8 U& p$ ~! E3 h- P最后2 G& y1 a- O+ d9 ?0 f! \4 U( w
- E ~2 y5 M E* P P% K" Z所有的启动完成以后,如下图所示:
9 K: n: q3 p4 N2 p/ E) S+ s5 ~+ @) G- h1 E) B7 i
[root@k8s weedfs_data]# ps -ef | grep weed4 n0 Q9 P0 _9 }) s1 @5 P! J
root 16171 15806 0 16:52 pts/3 00:00:00 /usr/local/weedfs/weed -v=3 master -mdir=/data/weedfs_data/master -defaultReplication=001- X5 V! ~, B/ @$ @7 o5 K
root 16191 15806 0 16:54 pts/3 00:00:00 ./weed -v=3 volume -port=8081 -dir=/data/weedfs_data/vola -mserver=localhost:9333 -rack=rack1
, B# u6 s0 D; B! y8 hroot 16217 15806 0 16:55 pts/3 00:00:00 ./weed -v=3 volume -port=8082 -dir=/data/weedfs_data/volb -mserver=localhost:9333 -rack=rack2$ p' o9 W: p: v3 |4 Q
root 16359 15806 0 16:56 pts/3 00:00:00 ./weed -v=3 volume -port=8083 -dir=/data/weedfs_data/volc -mserver=localhost:9333 -rack=rack3
8 h0 l) Y' K! Xroot 16458 15806 0 17:06 pts/3 00:00:00 ./weed -v=3 filer -port=8888 -master=localhost:9333
2 k/ r m+ t8 Z6 E2 Z9 Zroot 16469 15473 0 17:07 pts/1 00:00:00 grep --color=auto weed4 X9 ^" [8 A( F' |6 s" L: t
filer的mount挂载
! l! L2 e3 u* f& w
; D$ _8 Z* @% h7 U, K6 }' l为了方便本地操作,把一个collection里面的内容挂载导某个目录,方便操作: a+ A3 `# J b3 H
. \% G; W% t+ d3 c6 u: H" f3 \0 e( Z2 ?[root@k8s weedfs]# yum install -y fuse
2 U- E+ ^3 G" h3 z, o" Fmkdir -p /data/weedfs_data/filermount/data
3 h9 v9 O. V. N" a) D8 j3 R8 o0 anohup ./weed mount -filer=localhost:8888 -dir=/data/weedfs_data/filermount/data -filer.path=/ >> /data/weedfs_data/filermount/wefsmount.log &
% J, B$ o0 ^, U, c. E9 E/ S ~$ H# \( b* ^) s$ h3 T
./weed mount -filer=localhost:8888 -dir=~/wz/mdir(本地目录) -filer.path=/(上传的filer中的目录)* Z+ l/ l1 W4 P. f ?
3 z% v# e$ a* }3 `: Z& s
! I- e; q7 z, K9 _5 Z
直接往weed filer中拷贝目录或者文件把wubo目录拷贝到/ 根目录下也就是本地目录目录下/data/weedfs_data/filermount/data 下面
! j" G* B4 o* p2 L+ d8 k W2 s0 {- v
[root@k8s weedfs]# ls wubo/- [! l& {. K3 @) ]
a b c! {2 v4 @) I5 u) n# u$ G9 @6 A/ D8 w
[root@k8s weedfs]# ./weed filer.copy wubo http://localhost:8888/( D- K. k2 g9 S5 c
uploaded c to http://10.10.3.163:8084/1,030dfa7a23
2 ?4 h$ U* m/ w+ M4 _0 Q% Y3 Wcopied c => http://localhost:8888/wubo/c3 Y$ _" A; N/ M8 C1 [
uploaded b to http://10.10.3.163:8084/2,02a5ddaae7
7 q t$ i" y! c# V7 ~copied b => http://localhost:8888/wubo/b# a+ X& l- A8 D7 j
uploaded a to http://10.10.3.163:8081/4,04153475ab
0 O- ]2 F# }7 T, L( `) icopied a => http://localhost:8888/wubo/a
6 Y9 E! ?; D% P' u: }6 Lcd /data/weedfs_data/filermount/data, 就可以查看具体上传的文件
5 `/ b6 y: \3 s7 o; r( g% U
3 P/ F9 t, ^4 }: }& l[root@k8s weedfs]# ls /data/weedfs_data/filermount/data% ?0 ]3 p% b# V& M! E9 {
topics wubo( A; W2 y1 J+ E0 E! H0 M& }" e
[root@k8s weedfs]# ls /data/weedfs_data/filermount/data/wubo/
& ?% }' k7 Y. Sa b c$ T2 U+ j3 n" t8 F" W3 R
浏览器查看根目录文件$ p6 D' G% y/ n, S* z- j- M8 V
- Z( J/ t$ A y. |) }
6 x6 _" D7 `; }6 T% f* Q# D! @
& M) `4 U- R0 `! ~: P测试+ b4 J2 a# Q7 N
curl http://IP:9333/dir/assign$ u( Z3 C! K2 ?% ]/ |+ n( @8 m% L4 J
{"fid":"4,02d6944eef","url":"IP:9080","publicUrl":"172.19.131.45:9080","count":1}
; p# F# Q' b+ y$ N7 V关于filer mount的问题" f! `4 ?; X& R. q- c
weed mount -filer=localhost:8888 -dir= /data/weedfs_data/filermount/data本地目录) -filer.path=/(上传的filer中的目录)( Y4 Z3 \ r& n( O( B
+ x- e7 n$ u$ t$ n# v6 fweed mount 像访问本地目录一样访问文件系统,前提是开启了 master volume filer; H/ a& w% W+ ^6 z
(它使用bazil.org/FUSE,它允许在Linux和OSX上编写FUSE文件系统。在OSX上,它需要OSXFUSE). R' L9 c1 }4 o1 M) T
weed mount -filer=localhost:8888 -dir= /data/weedfs_data/filermount/data -filer.path=/home/chris -collection=chris5 ^2 }& T$ R* u9 @; j
weed mount -filer=localhost:8888 -dir= /data/weedfs_data/filermount/data -filer.path=/
* ^( d3 `4 P- W" |2 A5 u) W关闭挂在需要关闭mount并且手动umont -l /data/weedfs_data/filermount/data 目录,如果一般用户失败请使用root用户
" s6 V) h! O3 ?: @0 l
0 B* [" E9 N% L! b9 U$ I其中mount只是为了本地操作方便,不想本地操作,可以不使用mount
/ p+ |! E; P2 P4 I1 e- z/ N( C: U% i4 d
使用2 B) c& Q# I! B
上传文件
7 H( x' ^( S# ?: G( W/ [3 r# Q+ G' i- |- K8 _ O
要上传文件:首先,向/ dir / assign发送HTTP POST,PUT或GET请求以获取fid和卷服务器url【理解:master负责管理卷,并生成要上传文件的fid,并给指定需要上传文件的卷服务器,所以我们在上传文件之前,需要向master请求获得这些信息,然后根据这些信息直接往指定的volume里面上传文件】
9 l) h- b. z6 I0 c1 L) TSeaweedFS在卷级应用复制策略。因此,当您获得文件id时,您可以指定复制策略。例如
- k/ l4 R: m- ~$ q3 V: G! b9 ^+ K. v T3 Z" G4 {9 t
curl http://localhost:9333/dir/assign?replication=001& Q) C$ A0 y. u o, h- ?
当申请卷信息时,报如下错误。这是因为我们使用的replication模式是 001,即对于一个needle来说,会在同一个机架下的两个volume中保存相同的文件。由于上面我们创建的3个volume都分别指定了不同的机架,所以本教程目前的拓扑(逻辑)结构就是: 只有一个数据中心(默认的数据中心),包含有三个机架 rack1,2,3。每个机架下各只有一个节点(datanode --默认的节点,相当于一台机器,即localhost),然后这个datanode下面又有一个volume server(创建的,比如8081)然后这个volume又会创建默认, U4 z; m N# {9 Q+ d3 p1 G% m
% P- V# P0 w. P[root@k8s weedfs]# curl http://localhost:9333/dir/assign?replication=001# c# M% S) u$ w, O9 `" U
{"error":"Cannot grow volume group! No matching data node found! \nDefaultDataCenter:Only has 0 racks with more than 2 free data nodes, not enough for 1."}[root@k8s weedfs]#
+ w" R. t4 d! c6 Q0 m拓扑结构如下% [4 L, @, I1 t6 }) ?/ D
! S- O8 U6 F+ r1 g7 {( n
- T! r- `: c& }- d' h8 [1 j+ \) q
% i: I' f* d8 I. e0 F* C数据中心(datacenter):包含多个rack(机架)相当于机房
* v4 l! K$ }4 Y4 r+ O+ Q! p- I$ `0 ]4 E. d& O9 |& Q$ K
rack:属于一个数据中心(datacenter),类似机房中的一个机架9 l; N) p3 I/ I; O2 U9 _
3 J7 b+ D4 t! S* c% M5 K8 i, pdatanode : 存储节点,存储多个volume,类似机架中的一个机器 weed volume
6 _! a. [5 }5 W; h( W2 m e7 T: E
% {5 M' l# s* K, avolume server:逻辑卷服务,多个逻辑卷服务,每个逻辑卷服务(volume server)可以有多个逻辑卷(volume ),默认7个
, x. ?2 S+ o1 r v- o& N4 a$ _ R( X5 X7 l
volume :逻辑卷,存储needle文件对象
% e' a! V& |* Z1 E& ?# S8 j: d' o+ U6 n# j( a
needle: 逻辑卷中的object,对应存储的文件; c2 G2 i9 c- y& n4 X" l1 Z! y
+ y( z I6 A i1 p; x
collection:文件集,默认所有文件都属于""文件集。如果想给某些文件单独分类,可以在申请id的时候指定相同的文件集
* L S5 a, B+ n r: ]2 h4 j/ X7 W* I
& p9 J* h, t0 l" v P, c/ V/ nfiler :指向一个或多个master的file服务器,多个使用逗号隔开。 weed filer
; S* P: v# N0 z$ u/ a5 ]9 d: M( _8 }( V5 B' ^! E3 `$ ]0 X
weed volume会创建一个 datanode ,可以指定所属的 datacenter rack和master ,会根据配置存储文件,默认一开始没有volume,当开始存储文件的时候才会创建一个volume,当这一个volume大小超过了volumeSizeLimitMB 就会新增一个volume,当volume个数超过了max则该datanode就不能新增数据了。那就需要在通过weed volume命令新增一个datanode。
. _( j) z4 G8 Z0 b+ j: s9 j# C
) v/ X* C8 J$ X' b# Z4 \5 N% m按上面的添加volume的方式再添加一个vold
# O5 Z3 i0 C; {; d[root@k8s weedfs]# nohup ./weed -v=3 volume -port=8084 -dir=/data/weedfs_data/vold -mserver=localhost:9333 -rack=rack1 >> /data/weedfs_data/vold/wefsvold.log &/ G6 f) n' e" ]: y" l+ i$ L
并重新申请就能返回如下结果
/ I! b3 W5 o) R' V5 {" h$ W& x! h3 h, {4 x5 j! @
[root@k8s weedfs]# curl http://localhost:9333/dir/assign?replication=001
6 |+ f* M, f- G8 X2 ?* g: X{"fid":"4,01c1810497","url":"10.10.3.163:8081","publicUrl":"10.10.3.163:8081","count":1}[root@k8s weedfs]#( d1 I5 t: s# J) I4 j# u
服务情况vola和vold 属于一个数据中心同一个机架(rack1)
8 n$ T! r. x2 t+ f, d! Y: a7 s3 j7 E3 V I1 E9 i
[root@k8s weedfs_data]# ps -ef | grep weed, P$ h" f% i/ o7 E; g0 M/ Z8 w
root 16171 15806 0 16:52 pts/3 00:00:01 /usr/local/weedfs/weed -v=3 master -mdir=/data/weedfs_data/master -defaultReplication=001
+ b( w/ v/ P9 t) W& J# xroot 16191 15806 0 16:54 pts/3 00:00:00 ./weed -v=3 volume -port=8081 -dir=/data/weedfs_data/vola -mserver=localhost:9333 -rack=rack1" l" k; X, E' ?! P7 }4 ^ Y/ M3 ^
root 16217 15806 0 16:55 pts/3 00:00:00 ./weed -v=3 volume -port=8082 -dir=/data/weedfs_data/volb -mserver=localhost:9333 -rack=rack2# u. L; }! `" T4 N
root 16359 15806 0 16:56 pts/3 00:00:00 ./weed -v=3 volume -port=8083 -dir=/data/weedfs_data/volc -mserver=localhost:9333 -rack=rack3
9 V2 C% a' T6 Qroot 16458 15806 0 17:06 pts/3 00:00:01 ./weed -v=3 filer -port=8888 -master=localhost:9333+ W p+ k" p' Q) _$ r4 {& x7 b
root 16811 15806 0 17:11 pts/3 00:00:00 ./weed mount -filer=localhost:8888 -dir=/data/weedfs_data/filermount/data -filer.path=/9 @8 u8 h+ ^6 Y. M( J1 w0 X
root 16841 15806 4 17:22 pts/3 00:00:00 ./weed -v=3 volume -port=8084 -dir=/data/weedfs_data/vold -mserver=localhost:9333 -rack=rack1" s7 Z; I- _) m4 i# ~
root 16850 15473 0 17:22 pts/1 00:00:00 grep --color=auto weed6 p* A8 ~0 v* h( T! ~+ [# j
这个时候看一个各个volume下的情况,如下图
, A7 d% V0 x" D! Y1 @+ J因为vola和vold同属于一个机架rack1 而replication策略又是001,所以vola和vold都有数据,并且数据是相同的两份。, U. H( B; X5 ~! e
6 O, @: [$ x- Y( d5 f9 P: Z. F[root@k8s weedfs_data]# ll vol*: p7 t/ P# [. Z# K" J7 M" {
vola:% p* v s8 |1 j5 z
total 64
& V6 _2 k& b9 D% s3 r8 A7 D-rw-r--r-- 1 root root 8 Feb 3 17:23 1.dat
# E. m" d' u; M) Z-rw-r--r-- 1 root root 0 Feb 3 17:23 1.idx' i' d5 p( e$ g r% D. `
-rwxr-xr-x 1 root root 57 Feb 3 17:23 1.vif4 m& h, ?! I- { t
-rw-r--r-- 1 root root 8 Feb 3 17:23 2.dat
9 ]* P& f6 e$ L" O) v$ l1 J-rw-r--r-- 1 root root 0 Feb 3 17:23 2.idx
: O/ t0 K4 |( n-rwxr-xr-x 1 root root 57 Feb 3 17:23 2.vif
1 t8 n2 \/ V: ?2 v5 S7 O0 R% F-rw-r--r-- 1 root root 8 Feb 3 17:23 3.dat7 M' \+ w: ]9 M: i) D, x: _
-rw-r--r-- 1 root root 0 Feb 3 17:23 3.idx- g$ R3 [( m0 ]8 z0 E
-rwxr-xr-x 1 root root 57 Feb 3 17:23 3.vif
9 u- ]2 }7 `- k6 _7 T-rw-r--r-- 1 root root 8 Feb 3 17:23 4.dat
) H6 V/ r2 }& i2 Y4 F-rw-r--r-- 1 root root 0 Feb 3 17:23 4.idx% K# x2 l- |, ~0 t! C4 w
-rwxr-xr-x 1 root root 57 Feb 3 17:23 4.vif
/ g. V& e j _/ P5 M% ^0 ?1 {-rw-r--r-- 1 root root 8 Feb 3 17:23 5.dat
5 g0 A1 d. `! l/ t# ?* a-rw-r--r-- 1 root root 0 Feb 3 17:23 5.idx& @& U+ f! g: R" |
-rwxr-xr-x 1 root root 57 Feb 3 17:23 5.vif
$ R9 V0 L( X7 k- ?8 z-rw-r--r-- 1 root root 8 Feb 3 17:23 6.dat
* ?3 J% m+ Z! ~/ _-rw-r--r-- 1 root root 0 Feb 3 17:23 6.idx- E" G5 p% E3 t( G7 o
-rwxr-xr-x 1 root root 57 Feb 3 17:23 6.vif! h' ^. S* V% c: B2 v
-rw-r--r-- 1 root root 8569 Feb 3 17:23 wefsvola.log
# H2 ^1 |" ]$ M. ~5 p7 L+ S-rw-r--r-- 1 root root 1151 Feb 3 16:55 wefsvolb.log6 P% k; x/ S/ f0 M
. F+ ~& P- w) w4 [1 Z8 j
volb:
) h0 _: l. c; Z: utotal 43 R9 o9 c1 K# i( {1 U
-rw-r--r-- 1 root root 1151 Feb 3 16:55 wefsvolb.log/ m8 H' ]2 y3 @$ y" A
/ w0 J) b+ b0 \% X8 N2 S6 Q, D
volc:
e- u, l/ F* {" i1 [5 {total 8 X: A( w9 O p# j! ~
-rw-r--r-- 1 root root 4644 Feb 3 16:56 wefsvolc.log0 w0 Z d$ f6 @8 l0 v3 q
! Z, c! F( b8 e$ Z+ N# i% y- U" q: H
vold:" o5 J2 h( ^# ?* I
total 60
o3 J3 _/ ]% r1 x0 M! V-rw-r--r-- 1 root root 8 Feb 3 17:23 1.dat+ d% m$ C0 G& J" b. v1 D2 r# l# V
-rw-r--r-- 1 root root 0 Feb 3 17:23 1.idx
' q# H! l* r% R# {9 [8 | z5 S-rwxr-xr-x 1 root root 57 Feb 3 17:23 1.vif y/ O2 I6 X& G U/ s
-rw-r--r-- 1 root root 8 Feb 3 17:23 2.dat$ n0 N5 ]/ ]6 N* j7 Z0 Q
-rw-r--r-- 1 root root 0 Feb 3 17:23 2.idx- Q) Z8 m# W! x- I; T- f
-rwxr-xr-x 1 root root 57 Feb 3 17:23 2.vif
' x }2 M& c" W, ]5 C-rw-r--r-- 1 root root 8 Feb 3 17:23 3.dat+ @! A# S6 ~* M$ i4 p$ o
-rw-r--r-- 1 root root 0 Feb 3 17:23 3.idx' e+ N. V4 o# s" Q8 Y: M
-rwxr-xr-x 1 root root 57 Feb 3 17:23 3.vif
8 g) a$ x* w1 R* E+ i# ?-rw-r--r-- 1 root root 8 Feb 3 17:23 4.dat7 U2 D5 |; F2 e: m+ y1 ?7 l% @" T% b
-rw-r--r-- 1 root root 0 Feb 3 17:23 4.idx* f0 c; d E/ I# C
-rwxr-xr-x 1 root root 57 Feb 3 17:23 4.vif' H# }2 P& ^/ p6 h8 p9 q
-rw-r--r-- 1 root root 8 Feb 3 17:23 5.dat
I4 F1 Y, U( o-rw-r--r-- 1 root root 0 Feb 3 17:23 5.idx! a' \, J: B* Q4 e. B l8 V
-rwxr-xr-x 1 root root 57 Feb 3 17:23 5.vif! ^ d4 ~% J0 x
-rw-r--r-- 1 root root 8 Feb 3 17:23 6.dat
: G$ |/ Z4 H6 L4 @8 j3 }& ?-rw-r--r-- 1 root root 0 Feb 3 17:23 6.idx
# i/ k4 v' A7 D: r-rwxr-xr-x 1 root root 57 Feb 3 17:23 6.vif7 x, p; E) t% V( X3 v* C
-rw-r--r-- 1 root root 9604 Feb 3 17:23 wefsvold.log4 R( {) L( C' k3 V3 c
. w: Y! [% U2 b, B2 t- x \$ `% mvole:5 B# p8 Y+ u* l# T% ?
total 4
' {6 h& d7 a2 |8 m& Y, z C' K9 I, v% T-rw-r--r-- 1 root root 1151 Feb 3 16:55 wefsvole.log2 A3 _, r& j4 Q0 c
% X. w2 L: m, j" e: K! K/ ^; f
volf:! T. B$ q" ~, J
total 4+ ^2 L4 g. t8 t) N1 d
-rw-r--r-- 1 root root 1151 Feb 3 16:55 wefsvolf.log
7 A9 p0 T6 f$ m% v( g# v[root@k8s weedfs_data]#; I! ^% G$ A, R2 o0 n
同样的操作也rack2和3也创建相应的volume. k: h* M. x1 f; d1 E1 h. Z- U
7 v t7 S$ Y& B$ l. c
[root@k8s weedfs]# nohup ./weed -v=3 volume -port=8085 -dir=/data/weedfs_data/vole -mserver=localhost:9333 -rack=rack2 >> /data/weedfs_data/vole/wefsvole.log &% B" ]; L" V' m
[root@k8s weedfs]# nohup ./weed -v=3 volume -port=8086 -dir=/data/weedfs_data/volf -mserver=localhost:9333 -rack=rack3 >> /data/weedfs_data/volf/wefsvolf.log &9 V8 P2 i7 V% X7 w* n
服务启动情况, T7 |4 F k. b. F% b
5 q+ d. n) m* ^, ?* @; @) f6 S[root@k8s weedfs_data]# ps -ef | grep weed' x7 i+ I) r0 e" i9 |6 t
root 16171 15806 0 16:52 pts/3 00:00:02 /usr/local/weedfs/weed -v=3 master -mdir=/data/weedfs_data/master -defaultReplication=001/ O8 U# q% d8 K& a o$ U
root 16191 15806 0 16:54 pts/3 00:00:00 ./weed -v=3 volume -port=8081 -dir=/data/weedfs_data/vola -mserver=localhost:9333 -rack=rack1
8 ^; K) O1 m" `8 |9 mroot 16217 15806 0 16:55 pts/3 00:00:00 ./weed -v=3 volume -port=8082 -dir=/data/weedfs_data/volb -mserver=localhost:9333 -rack=rack2
% A% f( h) U4 x& iroot 16359 15806 0 16:56 pts/3 00:00:00 ./weed -v=3 volume -port=8083 -dir=/data/weedfs_data/volc -mserver=localhost:9333 -rack=rack3$ v6 E9 u. L! N
root 16458 15806 0 17:06 pts/3 00:00:01 ./weed -v=3 filer -port=8888 -master=localhost:9333
3 E; r2 G g: o o v2 b, k) r' proot 16811 15806 0 17:11 pts/3 00:00:00 ./weed mount -filer=localhost:8888 -dir=/data/weedfs_data/filermount/data -filer.path=/
( r. H1 f4 X: n3 Vroot 16841 15806 0 17:22 pts/3 00:00:00 ./weed -v=3 volume -port=8084 -dir=/data/weedfs_data/vold -mserver=localhost:9333 -rack=rack1* b$ v, a" ]; ^$ H
root 16855 15806 0 17:25 pts/3 00:00:00 ./weed -v=3 volume -port=8085 -dir=/data/weedfs_data/vole -mserver=localhost:9333 -rack=rack2
3 Y2 g( \+ C( |' S" ^8 `root 16864 15806 3 17:26 pts/3 00:00:00 ./weed -v=3 volume -port=8086 -dir=/data/weedfs_data/volf -mserver=localhost:9333 -rack=rack3
9 e' z0 e# a+ K' o) Jroot 16873 15473 0 17:26 pts/1 00:00:00 grep --color=auto weed" a* \# E& A' r8 t2 h
上传文件
. K# o4 J2 a( |2 b) i, A2 r& _- g上传文件之前0 [" G) A4 g6 {
5 H0 _3 j- {/ ~[root@k8s weedfs_data]# ll .
* o; V" z) `# F' }0 ]5 ^) `total 0
' }# t2 }3 I$ d% T- {/ F0 [7 L$ sdrwxr-xr-x 3 root root 39 Feb 3 17:06 filer' c1 ^% J* [( G* H- M* K; s
drwxr-xr-x 3 root root 39 Feb 3 17:11 filermount! w* X# e4 p* \) P& U& L
drwxr-xr-x 3 root root 67 Feb 3 16:52 master% Z% p: O) A: B& v1 w4 k: ?( Y4 L/ X
drwxr-xr-x 2 root root 280 Feb 3 17:23 vola8 @' P5 l/ B: i. s8 K6 B
drwxr-xr-x 2 root root 26 Feb 3 16:55 volb
+ F t d; Z% w" o( h* Jdrwxr-xr-x 2 root root 26 Feb 3 16:55 volc# t+ ^) \6 ?" c5 F
drwxr-xr-x 2 root root 260 Feb 3 17:23 vold+ @/ g3 S8 j+ K: t$ j$ }( V
drwxr-xr-x 2 root root 26 Feb 3 16:55 vole, [( R2 j& `1 C( g+ k+ W
drwxr-xr-x 2 root root 26 Feb 3 16:55 volf; Q1 s7 G+ @( y0 x) [; t* {% F. i; }
[root@k8s weedfs_data]# du -sh *2 h( i' R4 h4 @% \5 |
104K filer
1 w# ^& b* q9 {* ?4.0K filermount
) y w/ w* X9 @" m44K master
" J X3 ?+ Q4 n76K vola+ w. D2 V% V6 h; }. t
4.0K volb
6 y& a% l* _6 e1 a- H* s8.0K volc
/ m( X( X z8 ~3 N; w( ~76K vold0 {$ p$ Y- D2 r" `- X( F
4.0K vole
3 a/ Z9 w2 R& f* [4.0K volf
, \0 K2 P! Q6 ^7 T6 i T[root@k8s weedfs_data]#
0 [3 N4 b/ @" l0 C, r0 m 上传完以后,再测试了一下下载
' A7 u! R& v/ p6 G
# Q+ H7 O5 A5 _ Q* D- d7 U; q保存文件ID' c, o( ~6 D# l" i: r3 J; }
现在,fid在这种情况下,您可以将4,01c1810497保存到数据库字段中。
: R7 r- K9 v4 m4 ]
6 K! Z: m$ F+ m, i$ i开头的数字3表示卷ID。逗号后是一个文件密钥01和一个文件cookie c1810497。1 R+ R( Q# W: L' }9 p
: S+ L H" D% c4 c& v, o+ p x
卷ID是32位无符号整数。文件密钥是一个无符号的64位整数。文件cookie是32位无符号整数,用于防止URL猜测。
g6 ^' A+ r: u) g7 y$ U$ O8 D5 U4 d7 o- v7 O, S; O: N
文件密钥和文件cookie均以十六进制编码。您可以使用自己的格式存储<卷ID,文件密钥,文件cookie>元组,也可以将其存储fid为字符串。
5 _9 _9 j+ f, w2 y+ A
& J9 A0 ~& |- r* N8 f如果理论上以字符串形式存储,则需要8 + 1 + 16 + 8 = 33个字节。char(33)就足够了,如果还不够的话,因为大多数用法不需要2 ^ 32卷。6 h. F5 m& G9 G3 H5 @& s6 m
- X& t4 @+ W( _4 q; E
如果确实需要空间,则可以使用自己的格式存储文件ID。卷ID需要一个4字节整数,文件密钥需要8字节长数字,文件cookie需要4字节整数。因此16个字节绰绰有余。
' R% V; ?. u2 b. F0 J$ ^6 ?! v; h" ], o. D* d0 {
[root@k8s weedfs]# curl http://localhost:9333/dir/assign?replication=001
9 K" ~0 D& i# y0 U5 ~9 x* Q" I{"fid":"4,01c1810497","url":"10.10.3.163:8081","publicUrl":"10.10.3.163:8081","count":1}[root@k8s weedfs]#
$ t/ M0 Z ]+ T- b$ R7 v. s5 `, r[root@k8s weedfs]# curl -F file=@acme.sh.tar.gz http://10.10.3.163:8081/4,01c1810497
" c7 f8 b1 U7 v) Z4 L{"name":"acme.sh.tar.gz","size":205121,"eTag":"0e2e8219a406a0cb817f24716caa9432"}[root@k8s weedfs]#
) R G5 l# S- A: ]5 D下载:8 D2 ?0 N, u3 Q
0 _, A y! Q2 x1 \! x; G7 d9 K& g[root@k8s weedfs]# wget http://10.10.3.163:8081/4,01c18104978 P+ }# E+ a R2 z. @. s
--2021-02-03 17:29:44-- http://10.10.3.163:8081/4,01c1810497
( [/ U4 u1 y7 F' h+ }0 GConnecting to 10.10.3.163:8081... connected." H" ?) G+ N. X3 F8 I6 O
HTTP request sent, awaiting response... 200 OK
+ J0 [# f; D) X: P2 W _; e. n mLength: 205121 (200K) [application/x-gzip]! o& M. N( Y5 V: I7 o
Saving to: ‘4,01c1810497’9 m, b) U7 s( W7 K3 W0 T5 x
6 e5 x$ |$ K# V) z( z0 ?9 ~ S
4,01c1810497 100%[===================================================================================================================================>] 200.31K --.-KB/s in 0.001s
0 Q- y' _( m+ B& _ U" c5 {0 z+ ?2 a0 a, C4 ~- p# J a. p
2021-02-03 17:29:44 (249 MB/s) - ‘4,01c1810497’ saved [205121/205121]
( ^6 ?& a+ U1 H# n
" m" B, T* X, v' l+ L2 @[root@k8s weedfs]# ll) `- d! T. `9 ~ @0 T; f; M. f
total 70368 V; ^2 d5 D0 ]) w
-rw-r--r-- 1 root root 205121 Feb 3 17:28 4,01c1810497
5 S) X: n, z3 v9 I% H, @ V- F-rw-r--r-- 1 root root 205121 Feb 3 16:11 acme.sh.tar.gz
: U$ w! D: w, Z0 t2 D2 p-rw-r--r-- 1 root root 5718 Feb 3 17:04 filer.toml
- D# n7 [" g3 @: W-rwxrwxr-x 1 2000 2000 71629836 Feb 1 12:50 weed
; A( {6 D/ u; z% O$ m; {- t5 M比较上传前后卷空间大小变化,可以发现,卷空间增加的大小正好等于上传文件的大小
0 T- W% m" O+ `4 {' p; w" l0 q/ N1 O$ r. A5 K& s
[root@k8s weedfs_data]# du -sh *& |) l8 c- U; _
104K filer5 t. L+ S M( p: c' ?) W/ k
4.0K filermount8 G7 j$ p5 V" V4 F
44K master9 t' D3 D. z! M) g( c
76K vola
7 i- N8 r. Z, X3 a+ q4.0K volb
1 s9 ~6 d. u8 j' L6 g& L ^) ~" a8.0K volc R( m0 A+ ]5 I" N; L! a0 p
76K vold
/ t4 s5 B6 m2 x) x. n1 o4.0K vole
0 f# ~# Q6 g; B# _+ F: l0 s/ m4.0K volf) V$ w: M9 U6 E' s. w% i7 M
[root@k8s weedfs_data]# du -sh *
# N$ r2 t, c+ I t4 a+ S104K filer9 z; b U8 f( [
4.0K filermount7 N3 s/ r4 ?1 Z/ ^+ t0 J/ W5 U
44K master
8 V( w& r. f* Z( S* [288K vola3 R9 C2 K* u0 Y s
4.0K volb
' c4 q% i1 B$ G: s: g8 E& F& W8.0K volc* [! \9 P) g1 U2 k3 p
284K vold# O! q) M+ s1 T, n0 u9 C$ n! [
4.0K vole
5 h$ F: i6 z. @, v3 D! B4 M5 f5 b4.0K volf6 r4 v- e- |+ \ T
删除文件:( @/ z3 F( ~8 U0 K
因为weedfs对删除文件,磁盘空间释放需要额外的操作,这里做一下测试,验证一下
* R% L( Q8 U5 Y, g4 o. W2 i3 j调用删除api 删除刚刚上传的acme.sh.tar.gz0 P' E$ x3 h6 \* O; U2 g
8 D" O* q7 P9 \" q! P2 S
[root@k8s weedfs]# curl -X DELETE 127.0.0.1:8081/4,01c18104978 `6 M& |% t. z! s+ `8 R5 P. J2 B
{"size":205147}[roowget http://10.10.3.163:8081/4,01c1810497
$ P" L j) ?0 @( l+ m--2021-02-03 17:34:19-- http://10.10.3.163:8081/4,01c1810497
9 f) k% o0 K) j' ^ @Connecting to 10.10.3.163:8081... connected.
Q' _( s" }; _4 ~- ZHTTP request sent, awaiting response... 404 Not Found& Y7 e* G4 M# C/ G& Q# p
2021-02-03 17:34:19 ERROR 404: Not Found.
& W$ z, ] |" u# {* I. X: w删除在wget 404 说明已经删除,但是果然如官方所说,删除完以后,并不会释放磁盘空间
4 y/ i6 ]( T. y2 p$ I, s, U5 x2 f" L& B/ G
[root@k8s weedfs_data]# du -sh *
1 e3 G9 r9 [) P8 r5 u4 b& e" P, @104K filer6 ]. T4 G6 b0 Q: y' g3 C7 u! N
4.0K filermount
1 J! j- J5 t& i44K master0 H1 I- g" V% P
316K vola: g6 H) }. s( ]4 ?+ b
4.0K volb
9 A+ I3 W% t2 s9 i8.0K volc$ z: v% B5 F% I& C, ^) Z5 s" l
312K vold
5 S _4 Q# X( @" K# ^4.0K vole
8 A g) I0 g* |0 |* X: r0 i5 I7 A! K4.0K volf
! l7 f" A( ]' g/ V0 F v[root@k8s weedfs_data]#
) _, a" B# s4 u; f使用下面的api查看卷状态信息,可以看到,id为4的卷文件数目是1,因为我删除了id为4的卷上面的文件,所以下面id为4的卷信息显示"DeleteCount": 1。 (有个疑问是,replication为001的模式,为啥没有看到其他卷上面有删除记录) N# B" k7 s" O: e6 d
0 U* [; n1 S+ Z/ f: k" O' B[root@k8s weedfs]# curl "http://localhost:8081/status?pretty=y") L# M& J+ F- N
{6 y2 r; _4 q2 S$ s" ?+ w
"DiskStatuses": [
+ K- }3 y. L5 g7 |2 U& z( ?3 x0 ^2 G! G4 J {6 H( {3 G) Q; @& q
"dir": "/data/weedfs_data/vola",
; T/ ?8 ]- t% I/ M" Y "all": 214432849920,8 v& r P, L+ I0 v
"used": 5096587264,) n1 f& i/ [) H( c( Z
"free": 209336262656,) j& H. y7 t3 m0 {! d4 c# s
"percent_free": 97.62322,
; a0 O0 A; e- [/ n, e "percent_used": 2.3767755
& j3 H! f) I' G } W* V( Y. ? g+ R! E) y
],
7 Q* V1 _+ b. k# ~ "Version": "30GB 2.23 318a3d2",
0 Q7 ^' |/ l6 E& q; c9 c( d% k N w "Volumes": [- V: a( g, r0 [7 k3 h5 Y ?9 k
{) A$ a) c; f( y' b5 e
"Id": 1,
9 N9 t: G8 N1 c. m6 h "Size": 0,1 G& J6 N2 @( o3 h; t( i* s/ j
"ReplicaPlacement": {5 S& I1 ^8 Q+ {4 d! J' I/ c2 O, h
"SameRackCount": 1,( w) p/ p5 u5 g9 X3 H
"DiffRackCount": 0,
# Z1 l5 L# s" A( l5 M "DiffDataCenterCount": 00 I2 l# D3 j1 Y
},7 N5 p+ k7 ]0 y" G
"Ttl": {2 N- ~8 ^& \; M7 P$ s c
"Count": 0,
+ m+ K# U) F7 ] "Unit": 0
8 T9 O k* K; U },9 O/ x# h7 Y* [) L
"Collection": "",0 u+ ]9 D# N2 t
"Version": 3,) _: ~2 j9 C) O% p" ] }# o
"FileCount": 0,! n" R" \) I; i
"DeleteCount": 0,% h3 G, R* z1 C) ]3 |+ Y0 u, B
"DeletedByteCount": 0,
; o' h. g/ [# G) `- A( O W "ReadOnly": false,7 N; `+ l9 i" B- a
"CompactRevision": 0,) U4 {9 Z6 r X; A
"ModifiedAtSecond": 0,9 J7 N1 ]! t5 ~5 D! {% `& ~- i
"RemoteStorageName": "",# n7 r3 \7 t. N; \
"RemoteStorageKey": ""( m' C! t' |4 U0 b* R g" m* U
},$ g2 z; Q2 P: R, ^' r
{$ ]: w# U; S" B9 i) ^
"Id": 2,
9 i8 w, v0 H3 ?6 [! S( p "Size": 0,
# i) B- |% U& ^' y% X "ReplicaPlacement": {
5 a; r0 u; v) c5 G; k1 ] "SameRackCount": 1,, \- U/ N* {$ ]# p( \/ v
"DiffRackCount": 0,7 Q! M- v: n: Q, p* w
"DiffDataCenterCount": 0
. w1 y; b2 B# R6 M },
8 E0 b1 ]4 b; S( C0 ^4 C$ k, o- s "Ttl": {+ o1 Q& J3 l. [% |
"Count": 0,: B2 E; p/ ^0 }+ C, e4 W; {
"Unit": 03 {; H# e7 t% }1 K0 m. ^
},9 t3 P# h: M0 Z% A k; ~+ c
"Collection": "",
, O, w6 x' V' w$ _3 Y& k$ n "Version": 3,
; l3 P& S, D8 W "FileCount": 0,- d( K8 ]9 {# P/ n9 Z
"DeleteCount": 0,2 a( s- y# F6 T: c: Z( E
"DeletedByteCount": 0,
8 Z0 s" m, y2 t4 F "ReadOnly": false,# x' H) }! z1 z2 O
"CompactRevision": 0,
1 k ?( {$ b* j( L. h/ ^2 [ "ModifiedAtSecond": 0,
8 R Z0 P! e+ o2 @6 p, e "RemoteStorageName": "",
a U( K% p! l/ e( W "RemoteStorageKey": ""
9 d2 g M. O: N* q- q# D6 F },/ z" S0 Z' n/ R# n9 A- N( { c$ e
{
; F2 |$ Q0 o. `% v "Id": 3,9 P$ U' w/ `5 G
"Size": 0,
& R7 W2 y' k T, P0 x B( s2 _, ? "ReplicaPlacement": {
% Q% \8 x: ~' o& A, G3 v: J "SameRackCount": 1," H, G; M* W* M" g" W# y+ R
"DiffRackCount": 0,
2 X6 @( ]+ b6 s+ _7 R' @ "DiffDataCenterCount": 0! {4 ^8 D. D' p
},
0 |) W, e4 D1 Q, z+ a- r7 g! X "Ttl": {) q' O: G9 P) a P+ j/ j2 H& k
"Count": 0,, f- ]+ g3 R9 b! M. o1 X
"Unit": 0& f) {, Q; _+ N3 M! a: ?$ z4 G
},7 S- c2 V$ h" u- H/ A# d: S
"Collection": "",* a; A8 y- @4 s! s5 u
"Version": 3,
- {+ L$ l; g/ g% h( a4 w3 W+ v3 p "FileCount": 0,
! z$ A) e# g0 [ "DeleteCount": 0,
. u' o3 d8 C( u. p+ @9 x "DeletedByteCount": 0,
0 P$ v% D- z" {- E$ G- `- v6 K "ReadOnly": false,& v x" Z0 C, f# j
"CompactRevision": 0,; f/ m3 j" M8 E" g+ x$ W( G
"ModifiedAtSecond": 0,
6 {7 P R2 e9 x% B5 b- O& w o6 Z "RemoteStorageName": "",! } t5 L& {1 Z* Z5 w
"RemoteStorageKey": "": B4 p! R7 {) c! N% ?# Q
},( d8 C! C" F; ~- X
{
* o- N3 {* z; a) K# \' Q "Id": 4,. T4 ?( c! t5 q# D8 `
"Size": 205147,( ?0 g% C4 X% @0 U" i
"ReplicaPlacement": {
, l; q5 n$ c$ W7 u. k "SameRackCount": 1,$ i, H: ~& b9 Y6 H
"DiffRackCount": 0,
: c% U% ]$ n" R, a f "DiffDataCenterCount": 09 _# o/ i4 [$ D: c# p* @! }
}, L* l2 V' } u7 K
"Ttl": {
3 z# q3 l1 C; S }) ?- h( } "Count": 0,) {4 u. }( o) a; V0 k
"Unit": 0
% t8 k# _/ Z3 r% S! g: x* ]3 b },5 D$ S1 c) r4 i+ Q; ]; q. R/ O
"Collection": "",
6 i* H. ^. J# w( n. ?$ ^% i x, I "Version": 3,# K! H- L8 Y, x3 x: Y3 N$ }
"FileCount": 1, x$ A7 _. a4 b3 H5 i$ D
"DeleteCount": 1,
- n! J1 G. }2 U$ E3 J "DeletedByteCount": 205147,
( \% M' L4 k: J* } "ReadOnly": false,. E2 v* Q" F! e; g9 C
"CompactRevision": 0,7 u( s5 u, }1 a- S. ^; S
"ModifiedAtSecond": 0,
% @5 L- H2 g5 v! x "RemoteStorageName": "",2 U! e$ a; K! H: w$ h* ?
"RemoteStorageKey": ""
. ?" W( m+ M; m! w },
. v6 J! I* `$ o* I1 I) \5 I* _1 f( K7 e {$ @3 }6 y* b( H+ e4 J
"Id": 5,
& u; ?0 R# q) B/ N "Size": 0,
/ O; _! |) x# x1 U& b' W2 _6 s "ReplicaPlacement": {4 s4 G# Y# v3 M# B/ g' z* C1 U8 ?
"SameRackCount": 1,
1 m( I- B) a5 ~! S# Z, ? "DiffRackCount": 0,
1 w3 s* n+ p; M# m% U" h "DiffDataCenterCount": 0" K/ N, Z( ^) V& U6 I! z, [* h
},
' z# |' ~$ b$ a B6 N0 d- \, _- z "Ttl": {( z5 h9 u1 q# m5 W$ y
"Count": 0,
4 l. d5 Y$ v7 |7 I3 y' n1 C "Unit": 0; k5 s" u: `# f6 h9 C( o3 v, C
},- |$ v3 M( B( \) T2 x
"Collection": "",
, [' O* F- f1 I. {8 W# c: V) S4 j "Version": 3,
) ^5 _6 z* `3 Z "FileCount": 0,( ^4 V: ^2 @9 v
"DeleteCount": 0,2 g# _/ V2 U# M/ Y# [* m I& [
"DeletedByteCount": 0,, c) j) H7 d) r# [# j# [
"ReadOnly": false,. F0 A: f. `7 u: G7 T
"CompactRevision": 0,
4 s* X% H5 h' X' m "ModifiedAtSecond": 0,
* ~7 N6 n+ H3 p0 ]/ y& P( D "RemoteStorageName": "",1 G% }9 Z+ P: [3 N
"RemoteStorageKey": ""
: e7 V0 \1 q+ U$ I5 J },2 q3 \8 g: w; \! `
{) i! j! j% `! ?% o/ j7 E, ]
"Id": 6,
: T8 b+ Y' F- g$ c9 e# r "Size": 0,5 v( o8 S. d! H
"ReplicaPlacement": {* y- g! P% W, X. z2 C o
"SameRackCount": 1,
6 C; p8 V5 ]! o "DiffRackCount": 0,
- C) L, V# C, S "DiffDataCenterCount": 0
# n8 l0 h+ f: n/ r% O. E" w },# S: a5 [; g/ S1 `' S
"Ttl": {
; G6 w" H, d$ |: i1 ^0 c "Count": 0,# l4 \1 F, ^+ f. P2 R
"Unit": 0* R3 }: {6 G) y! p
},# d- f; v8 p" n% v$ H
"Collection": "",
. N% Z# C" C- W+ h# V6 r "Version": 3,
' \2 b8 c3 |* L/ U# J: l8 w9 r "FileCount": 0,
* d# u! c, R/ x "DeleteCount": 0,
6 P- E2 C* p& ^4 j "DeletedByteCount": 0,8 e. r+ i& b, K2 }
"ReadOnly": false, X: E; c7 s) b8 f A, [9 E4 d
"CompactRevision": 0,8 I5 D1 M4 i1 }$ G9 d! i
"ModifiedAtSecond": 0,0 b) o! P3 ^! \+ F% [* ?" J/ G5 p5 ?
"RemoteStorageName": "",
7 X* C# {# H$ a' ] "RemoteStorageKey": ""9 ^# i3 s A- W+ F4 U
}- a" l0 C( x ]1 x
]2 e2 B1 }& b/ A. o3 \
}+ P9 o0 T6 b' h3 E8 {9 `
既然空间没有释放出来,那么我们就按官网的说明,手动释放一下。
- }) `+ p G1 E6 s) ]! L% m8 b; `0 d2 Y/ {* `3 u
[root@k8s weedfs]# curl http://localhost:9333/vol/vacuum
: M6 v( g. y" g+ g& v{"Topology":{"DataCenters":[{"Free":36,"Id":"DefaultDataCenter","Max":48,"Racks":[{"DataNodes":[{"EcShards":0,"Free":2,"Max":8,"PublicUrl":"10.10.3.163:8081","Url":"10.10.3.163:8081","VolumeIds":"1-6","Volumes":6},{"EcShards":0,"Free":2,"Max":8,"PublicUrl":"10.10.3.163:8084","Url":"10.10.3.163:8084","VolumeIds":"1-6","Volumes":6}],"Free":4,"Id":"rack1","Max":16},{"DataNodes":[{"EcShards":0,"Free":8,"Max":8,"PublicUrl":"10.10.3.163:8082","Url":"10.10.3.163:8082","VolumeIds":"","Volumes":0},{"EcShards":0,"Free":8,"Max":8,"PublicUrl":"10.10.3.163:8085","Url":"10.10.3.163:8085","VolumeIds":"","Volumes":0}],"Free":16,"Id":"rack2","Max":16},{"DataNodes":[{"EcShards":0,"Free":8,"Max":8,"PublicUrl":"10.10.3.163:8086","Url":"10.10.3.163:8086","VolumeIds":"","Volumes":0},{"EcShards":0,"Free":8,"Max":8,"PublicUrl":"10.10.3.163:8083","Url":"10.10.3.163:8083","VolumeIds":"","Volumes":0}],"Free":16,"Id":"rack3","Max":16}]}],"Free":36,"Layouts":[{"collection":"","replication":"001","ttl":"","writables":[1,2,3,5,6,4]}],"Max":48},"Version":"30GB 2.23 318a3d2"}[root@k8s weedfs]#: Q+ G7 U5 y) f7 A" ^
前后对比
. ?* e' w" R! n9 G' f% T9 A, P/ T5 l7 u/ H2 B3 @+ Q8 O3 a2 w
[root@k8s weedfs_data]# du -sh *, B7 O) T& S u8 m5 g
104K filer
) E& }1 G4 C6 s. v% @. G4.0K filermount
% g7 V7 j# s6 w) N44K master
9 f. w1 q, r* @# J$ ^2 E316K vola
: U7 j* m6 C' [! p4.0K volb" q9 W1 P% J' D; s. U/ P6 l: f
8.0K volc( U, |, b/ c) b1 n
312K vold
9 M2 q, Y, W& z5 U8 j3 ^4.0K vole# j$ \4 K' h" N3 g# P0 t
4.0K volf- W) V$ O$ B7 ~ e- p( R
[root@k8s weedfs_data]# du -sh *
" M3 w ?$ l+ ]% W104K filer" Q: K7 i8 b8 S
4.0K filermount3 O. i, t3 j! ~# g( V
48K master
# ?$ A" w7 M+ j( u j6 V; b R180K vola5 {/ J5 T. S7 M6 |
4.0K volb
* X+ ]: ^! k; ? d8.0K volc
/ M7 h# \7 y* M# T% b176K vold) L% V Z$ h4 J
4.0K vole- j* f. r, J N9 k5 w
4.0K volf0 N, R- [1 k# V% k& x4 L
[root@k8s weedfs_data]#
2 B9 K) z9 h6 W, f2 `' y发现磁盘空间果然被释放了。这个时候再查看一个卷信息 P! C: a, \! |9 O: X# i8 r# A
! t- H. T/ y0 p- z, m[root@k8s weedfs]# curl "http://localhost:8081/status?pretty=y"; B7 E4 l1 H4 h+ M1 y" l, G p
{
8 Z6 M; h. w+ } "DiskStatuses": [& X4 D' R6 z& c( L
{- s6 l! _' P9 Q4 [* \
"dir": "/data/weedfs_data/vola",5 x. s; g# U; M% n0 S/ R
"all": 214432849920,
- x* W8 n' X9 c "used": 5096337408,2 w( q. n- b6 ]( \: _
"free": 209336512512,1 n; Z; ~' v3 L# B" Z% `& D" q' L* ]
"percent_free": 97.623344,, q: y% K& F3 i: N
"percent_used": 2.376659
: j9 y$ X" B' T% ~2 x }
- H* `) L1 p+ @ ],. `/ F0 D- Z, Y; A) S
"Version": "30GB 2.23 318a3d2",
& w1 p$ h. {, i2 U1 I0 f "Volumes": [' l4 W9 @) Y* |, H
{% p: Z7 J z- j2 c! \2 o u
"Id": 1,
' l# e! x) Y4 F5 c8 s' F! R "Size": 0,
8 V i* f1 i! `8 n3 {" g0 w "ReplicaPlacement": {+ B) }1 u# t% t% W: ]
"SameRackCount": 1,$ ^. ~! `1 f) }/ U
"DiffRackCount": 0,
% B1 {5 @3 R7 w( l "DiffDataCenterCount": 0
) v% }* h4 {) h7 x },
+ Z" Z5 L+ f7 {4 X4 e" n6 h7 o "Ttl": {
3 f% M8 n- U _: c( q$ I b "Count": 0,8 G! l m+ j ^7 i3 e2 D6 y
"Unit": 0
1 i) k, g( u( S* N. o. R3 \ },' v4 n) k0 r. B% a8 \, O
"Collection": "",
+ r" I7 F9 O6 I9 S/ U7 o8 j. k "Version": 3,
# D; K6 K/ N- L$ `3 s; o1 s "FileCount": 0,, y$ X' X& I/ J* W: t4 e: A
"DeleteCount": 0,
+ X( x9 B7 K, h( p! R0 G "DeletedByteCount": 0,
/ c* M; N. b- F% O0 s. Q# s "ReadOnly": false,
5 K8 a* |# i, L2 o* B" e% c "CompactRevision": 0,' z- y, \5 I* C5 Z
"ModifiedAtSecond": 0,+ H( M4 F1 J$ r- D) U
"RemoteStorageName": "",
+ _) t. V4 A# `; _5 W- d' T "RemoteStorageKey": ""
- x' @& \7 ~$ r- i3 r# y },
- Y* S& x( [2 M/ E3 m- o; M {
\9 p2 O4 j- g "Id": 2,
8 \3 }# q+ W1 o( k "Size": 0,9 {( \: P; V+ n8 j. L# K
"ReplicaPlacement": {7 |& G. J3 M: Y& u- u {2 k
"SameRackCount": 1,
" ~% E% u. U6 U8 g "DiffRackCount": 0,
. s' U! o! R# c "DiffDataCenterCount": 0
; H0 l1 k. v3 B) y9 g4 T, K },3 _! \- K/ E# t. I i
"Ttl": {) q5 d" q$ M( Y$ u7 `! G
"Count": 0,, o2 f+ l7 d' y& X9 ~4 k' t
"Unit": 0$ l& o; X' H) `& n
},
( I: b& a3 Q2 Y3 M, } "Collection": "",
' [, [ k9 E4 O# E( o "Version": 3,
`$ `. P7 L* t "FileCount": 0,# D/ b8 ?* K, R: f5 N: W
"DeleteCount": 0,
$ q1 } x8 z- D% n* K% N Z. Z "DeletedByteCount": 0,
3 q- P9 M3 g4 |" U+ Z "ReadOnly": false,, x' C, y5 ]0 l; z0 @
"CompactRevision": 0,6 E d, ~% x3 ~2 ^* a
"ModifiedAtSecond": 0,
9 V# I% H( D) V# G "RemoteStorageName": "",* l0 ^: S" P! y" T$ J
"RemoteStorageKey": ""
4 f# U8 ~) F" k3 p) ~ },( A6 L/ r( G' h8 X+ A
{& `! x* f3 r& I
"Id": 3,
' ~; J0 b D( p+ L "Size": 0,
! F; H; m5 [0 e6 Z "ReplicaPlacement": {* U3 ?) g' `5 V5 ]8 j! p
"SameRackCount": 1,
( B7 q0 y7 [1 U "DiffRackCount": 0,
* v, r! o1 q6 N$ K* P$ b6 Q f "DiffDataCenterCount": 0
; F7 G# E& T9 t/ c- `1 j( J },
; G# W& R: Q, X$ j- K" w5 E9 z "Ttl": {. S/ B8 J- b; E" X* c* i( l9 G
"Count": 0,
' P' H# V) y, r1 f) e0 u7 z$ r# p "Unit": 0& b1 u) G# `$ h& D' j
},
" q: m4 p$ h! n. X "Collection": "",; C _5 `- \3 H1 @
"Version": 3,6 U# I* {9 e8 l4 M, v
"FileCount": 0,
0 \& x2 G) R4 p2 K* Q8 Q "DeleteCount": 0,9 A, |7 y- N! {
"DeletedByteCount": 0,# N) R# ^9 K5 Z* P8 W
"ReadOnly": false,& t) i( Z7 a+ U
"CompactRevision": 0,! k4 w* r; W+ m% q$ Q
"ModifiedAtSecond": 0,
6 f+ Q2 n: g+ \) s( L" v "RemoteStorageName": "",! h* `* `9 O9 r c
"RemoteStorageKey": ""' f. D% p$ e+ w5 @" k
},) W# H+ p) C' M0 b
{
1 q: N' d/ {* D9 ` "Id": 4,
! ~; a$ e% f, \# d9 T+ c "Size": 0,
1 c1 m. S$ r* \% [. c: J "ReplicaPlacement": {6 Y9 g# v, M* Q# `
"SameRackCount": 1,9 B; ^( s# Y/ `
"DiffRackCount": 0,
. ^: w2 m9 }: L. v "DiffDataCenterCount": 0
& n Z- x: t7 s: Q },
$ p+ {' L5 _6 m* ]! G2 A "Ttl": {, O- `- f& w$ o7 A3 ^0 d0 Q
"Count": 0,
/ R4 b7 n! ~4 z "Unit": 0& p4 c# N, X0 b# i. H5 F5 s
},; h, N- \3 `9 b/ \) i8 `$ e' }$ F
"Collection": "",$ J& b$ }5 u3 M' A: Z
"Version": 3," H: n9 d2 `5 \, Z
"FileCount": 0,4 P! L7 i1 ]) C8 g1 _
"DeleteCount": 0,
6 v8 H0 E# N" @' k3 w) _ "DeletedByteCount": 0,
+ e3 _- e; @8 j2 p) F "ReadOnly": false,
: Y+ m$ I/ x9 f1 f* \ "CompactRevision": 1,* Z& j) j& f7 X
"ModifiedAtSecond": 0,
2 n Q' T6 ]; ] "RemoteStorageName": "",5 E$ f: o0 d! l# X' x8 E& r
"RemoteStorageKey": ""
& O1 C& p) Z1 P! L$ o8 W },
/ E+ z1 z" W& V: w7 k4 O, R. ^ {
; q; ?* t$ l7 Y$ i "Id": 5,
4 z6 c% ~6 A& d4 v; y! Z "Size": 0,
: o" t$ F) o5 y) y) [( o( c9 X "ReplicaPlacement": {- {8 T! `4 M3 S7 {7 [
"SameRackCount": 1,
8 _- o N5 C- I3 W+ F "DiffRackCount": 0,9 P3 x4 G8 N3 q( r& U' `5 F8 c
"DiffDataCenterCount": 0/ E7 r/ Z" M5 U3 B. V* V
},
' Z; N- {8 |# k! k5 ~* f9 Z "Ttl": {
' S8 d9 {! E& W; I4 q. g" ` "Count": 0,
7 H# F/ ?6 p5 R "Unit": 0
0 l+ f+ t' ?8 e% ?- |4 G },
# s% @$ ~9 ? I. {/ m8 S "Collection": "",* p0 _, P" C( G1 `/ b. r2 k
"Version": 3,2 z, b& k! U6 X2 B6 ^# |' C
"FileCount": 0,
6 ^& ~6 P$ {" J9 s! b' N; v "DeleteCount": 0,
9 V3 a8 p# `7 ]* @! K( u" I: r "DeletedByteCount": 0,0 v9 b2 s- S$ G9 ~5 J& [
"ReadOnly": false,
! v& O3 v1 N x' y' V# Z' \, ?9 M "CompactRevision": 0,
' l4 v ? r/ N* x "ModifiedAtSecond": 0,
. R7 ]7 H% T$ c9 P "RemoteStorageName": "",: n2 P0 M/ e, }
"RemoteStorageKey": ""
4 H0 k @+ d. d1 c },2 J- O6 M5 K' {% p, Y% S. G) d) }
{
# {- X0 p% a. }9 t- q; v! _ "Id": 6,
9 O! w4 @% H# E- _ "Size": 0,. q+ P& Z$ l" c
"ReplicaPlacement": {
# q1 w. w; p/ O+ p "SameRackCount": 1,9 `1 ^9 z/ B5 F+ Q: x
"DiffRackCount": 0,7 x6 P8 H5 K8 T& Y5 z1 `
"DiffDataCenterCount": 0# c" W8 C( K& k8 [, e8 }, s: _
},
' U) r8 R% d+ D+ a E) t0 h "Ttl": {
6 P& f5 ^2 A# G/ @# f% ~0 ] "Count": 0,& e% S* Q4 l8 `' Q, {3 a& O1 j
"Unit": 0* F4 _: g9 ?; o m. {7 v& S/ R# v& u
},
" V+ _" X% m& I S Q6 N% F+ k "Collection": "",
7 d$ b; h! q# R& [/ v0 ]* x "Version": 3,! G# w S2 G7 e+ s4 C
"FileCount": 0,
/ L' W9 J* X6 v5 ~% |8 c+ t) m "DeleteCount": 0,
' S5 h$ o7 K9 g' D2 C1 ^ "DeletedByteCount": 0,
6 F# u& H/ b, f: ^/ x2 j* L) o "ReadOnly": false,
! T) C# I2 j0 r4 u |& g, k' q "CompactRevision": 0,
( W* p6 q# X# K' z- t. m* Z "ModifiedAtSecond": 0,
- i W$ I# \3 d% |4 X1 X "RemoteStorageName": "",
3 ] S `3 ~+ H* Y' ~" Y "RemoteStorageKey": """ l0 T) | y$ v" q$ v
}
* _0 f7 n- m+ Q1 S# ~8 ] ]
! V. {( t# d+ p9 ~' K, {}[root@k8s weedfs]#5 i3 o) A& [! x& W3 E9 e
发现id为4的卷下的DeleteCount也变成了0了,验证了官网所说。
5 ~! B3 F: @' X% h; n! \* |7 s& _1 Z; F& n5 n5 O6 K4 L
常用api记录+ h0 z* Q4 R/ L$ ~
weedfs的使用$ x+ t% |( i, E6 t" L
master
& X. f# t& O, l申请volume信息:curl http://localhost:9333/dir/assign?replication=001 ###文件上传首先需要请求master, 去分配一个逻辑卷和fid/ ~. }6 i( Q+ I
查看集群信息:http://$IP:9333/cluster/status?pretty=y5 K) ~! `- N: I- c) Z- t7 u0 {
查看某个卷的上传信息:http://localhost:9333/dir/lookup?volumeId=3$ u/ u/ }/ J: T2 c
上传文件:curl -F file=@/home/chris/myphoto.jpg http://127.0.0.1:8080/3,01637037d6; o8 a; R0 f& Y; S1 P( N. K
请求一个上传了的文件: http://localhost:8080/3,01637037d6.jpg; Y% O6 D. Z. \6 V5 H9 ?
删除文件:curl -X DELETE http://127.0.0.1:8080/3,01637037d6& h m! _2 m& u4 c+ i
查看集群toplogy结构: curl “http://localhost:9333/dir/status?pretty=y”: V; T& z' L7 N/ v1 R2 p, t- L& G& d
上传一个目录:curl -F file=@/home/chris/myphoto.jpg http://localhost:9333/submit
- U7 ]5 t& [# s% I" ]+ \强制垃圾回收:curl “http://localhost:9333/vol/vacuum” curl “http://localhost:9333/vol/vacuum?garbageThreshold=0.4”* n5 p2 t# t. u; s/ ?2 _
给某个collection指定volume的数量:curl “http://localhost:9333/vol/grow?collection=staff&count=1”
Q# P% b Y5 d( A [1 }+ p. N% C% }
volume5 K( M" ^& H7 h) V5 m4 e8 L1 R
查看volume中某个大文件被分块的清单:curl http://127.0.0.1:8080/3,01637037d6?cm=false X+ l$ ~9 y3 L, s; o4 Z
查看卷信息:curl “http://localhost:8080/status?pretty=y” ##可以看到删除了多少文件,以及删除的大小。这个对调试还有多少空间没有释放很有帮助
% _$ `6 ^( | k+ _% r3 ?4 _6 i7 \2 f% G6 U
下面是使用filer的一些api
5 U0 K! A1 G5 a. ]9 l& ?8 q
- v) m+ B! `0 M+ O# POST a file and read it back1 r. j; p5 C: `6 Y1 f* @2 c1 V
curl -F "filename=@README.md" "http://localhost:8888/path/to/sources/"" e! v5 Z$ s6 w( _# w! v, k
curl "http://localhost:8888/path/to/sources/README.md"
: F1 N! ^/ b% `* T* s+ k' S
& h; L$ i, D8 O6 [7 n' ~. m b# POST a file with a new name and read it back
9 y( ?8 [' ?3 |5 }+ zcurl -F "filename=@Makefile" "http://localhost:8888/path/to/sources/new_name"
' y! e* t) q9 D F9 o A* \curl "http://localhost:8888/path/to/sources/new_name"
& f. y; v9 Y9 s1 \2 i$ x5 i9 l. D* i6 g' ~6 r O' \, ?
# list sub folders and files, use browser to visit this url: "http://localhost:8888/path/to/"8 d! b B( A+ T4 V
# To list the results in JSON:, ]" o5 J: g) l- Q2 j7 k
curl -H "Accept: application/json" "http://localhost:8888/path/to"* \( a( ~1 C9 X3 H' Y
# To list the results in pretty JSON; L- s% z2 z0 Y. W
curl -H "Accept: application/json" "http://localhost:8888/path/to?pretty=y"5 E8 Z9 U( A6 k* L; F# J
% _8 K- E6 C; X, d% b: H2 K
# The directory list limit is default to 100
i. m1 C6 U! G8 ?5 E* O# if lots of files under this folder, here is a way to efficiently paginate through all of them
/ M/ P' ^" U% Thttp://localhost:8888/path/to/sources/?lastFileName=abc.txt&limit=50+ c+ u: ^; _5 k d3 G" {1 v
+ G8 [- f3 m& b! w
- I; B3 H: i4 T) c: V |
|