文章目录
- 1. 介绍
- 2. 用法
- 2.1 生成配置文件
- 2.2 启动 filer
- 3. 读写流程
- 3.1 读取流程
- 3.2 写入流程
- 4. Filer Store
- 4.1 复杂度
- 4.2 Filer的使用场景
- 5. 数据加密
- 5.1 对Volume server的数据进行加密
1. 介绍
文件系统,一般都离不开目录和文件,当我们把SeaweedFS与Linux FUSE、Hadoop搭配使用时,这是必不可少的。
2. 用法
2.1 生成配置文件
./weed scaffold -config=filer -output="."
该命令会在当前目录生成配置文件,filer.toml,主要用于配置filer store。
默认的filer store配置是:
[leveldb2]
enabled = true
dir = "." # directory to store level db files
2.2 启动 filer
./weed filer -ip=192.168.56.101 -port=8888 -master=192.168.56.101:9333
# POST a file and read it back
curl -F "filename=@README.md" "http://192.168.56.101:8888/path/to/sources/"
curl "http://192.168.56.101:8888/path/to/sources/README.md"# POST a file with a new name and read it back
curl -F "filename=@Makefile" "http://192.168.56.101:8888/path/to/sources/new_name"
curl "http://192.168.56.101:8888/path/to/sources/new_name"# list sub folders and files, use browser to visit this url: "http://localhost:8888/path/to/"
# To list the results in JSON:
curl -H "Accept: application/json" "http://192.168.56.101:8888/path/to"
# To list the results in pretty JSON
curl -H "Accept: application/json" "http://192.168.56.101:8888/path/to?pretty=y"# The directory list limit is default to 100
# if lots of files under this folder, here is a way to efficiently paginate through all of them
http://192.168.56.101:8888/path/to/sources/?limit=50
3. 读写流程
3.1 读取流程
- Filer 从 FilerStore 读取元数据信息(fileId, Volume信息),FilerStore可选择组件:Cassandra/Mysql/Postgres/Redis/LevelDB/etcd/Sqlite。
- Filer 从Volume Server读取数据并返回
3.2 写入流程
- 客户端把数据写到Filer
- Filer把数据上传到Volume Server, 如果大文件的话切成多个块
- Filer把元数据和块信息写入到Filer store
4. Filer Store
4.1 复杂度
对于文件读取,取决于Filer Store的实现方式,基于LSM tree 后者 Btree 的实现,元数据查找的复杂度为O(logN),N指的是已存在的所有条目,基于Redis的实现,复杂度为O(1)。
文件重命名,复杂度为O(1),只需删除旧的元数据和新增元数据,无需修改Volume server中的文件内容。
目录重命名,复杂度为O(N), N为待修改目录下的所有文件和子目录个数,这些条目都需要更新元数据,同样,也修改Volume server中的文件内容。
4.2 Filer的使用场景
Filer有两种使用场景。
一种是用于上传和下载文件,Filer需要处理文件以及读写元数据,负载比较重,建议部署多台Filer server 。
另一种是用与“weed mount”,Filer仅提供元数据的读取,实际的文件读取和写入是通过"weed mount",这种情况Filer的负载比较轻。
5. 数据加密
对于Filer来说,元数据存储在Filer store,实际的数据存储在Volume server, 有些Volume server是用本地的物理机器,有些Volume server是在云上,云上的Volume server被黑客侵入,后果不堪设想。
5.1 对Volume server的数据进行加密
weed filer -encryptVolumeData
提供对Volume server加密的选项。
加密的key是在写入数据时随机生成的,不同的文件有不同的key。这些key存储在filer store。
以此来实现对Volume server的数据进行加密,只要filer store不暴露,不可能猜到所有文件的加密 key。
Volume server实际并不知道哪些数据是加密的,哪些数据是没有加密的。