seaweedfs版本:1.87 a6b59d5
原理图
master:9333
volume1:8080
volume2:8081
filer:8888
seaweed二进制文件
单节点自动化搭建脚本
文件结构:
/seaweedfs
├── log
│ ├── filer
│ ├── master
│ ├── mount
│ └── volume
├── master
├── mount
└── volume
集群自动化搭建脚本
文件结构:
/seaweedfs/
├── log
│ ├── filer
│ ├── master1
│ ├── master2
│ ├── master3
│ ├── mount
│ ├── volume1
│ ├── volume2
│ └── volume3
├── master
│ ├── mdir1
│ ├── mdir2
│ └── mdir3
├── mount
└── volume
├── data1
├── data2
└── data3
master节点必须奇数个 当filer与mount一起使用时,filer仅提供文件元数据检索,实际文件内容直接在mount和volume服务器之间读写,所以不需要多个filer
文件上传脚本
检测weed进程的脚本
keepalived配置文件,结合vip可以实现filer的高可用,并且可以起到监控weed进程的作用,根据实际情况进行配置参数的取舍即可。
> ./weed master
> ./weed volume -dir="/tmp/data1" -max=5 -mserver="localhost:9333" -port=8080 &
> ./weed volume -dir="/tmp/data2" -max=10 -mserver="localhost:9333" -port=8081 &
> ./weed filer -master="localhost:9333" -port=8888
要上传文件,请执行以下操作:首先,发送HTTP POST,PUT或GET请求/dir/assign以获取fid和卷服务器URL:
> curl http://localhost:9333/dir/assign
{"count":1,"fid":"3,01637037d6","url":"127.0.0.1:8080","publicUrl":"localhost:8080"}
其次,要存储文件内容,请url + '/' + fid从响应中发送HTTP多部分POST请求:
> curl -F file=@/home/chris/myphoto.jpg http://127.0.0.1:8080/3,01637037d6
{"name":"myphoto.jpg","size":43234,"eTag":"1cc0118e"}
# 上传文件,读取文件
curl -F file=@/root/test.txt http://localhost:8888/text/
curl "http://localhost:8888/text/test.txt"
# 以新的名称重命名上传后的文件
curl -F file=@/root/test.txt http://10.0.20.46:8888/text/new.txt
curl "http://localhost:8888/text/new.txt"
# 列表展示目录中的文件
visit "http://localhost:8888/path/to/sources/"
# 筛选目录中的文件
visit "http://localhost:8888/path/to/sources/?lastFileName=abc.txt&limit=50"
# 删除文件
curl -X DELETE "http://localhost:8888/text/new.txt"
# 递归删除路径下所有的文件以及目录
curl -X DELETE http://localhost:8888/path/to/dir?recursive=true
# 递归删除所有的文件以及目录,忽略递归错误
curl -X DELETE http://localhost:8888/path/to/dir?recursive=true&ignoreRecursiveError=true
参看single.sh
和cluster.sh
脚本注解
xyz | Meaning |
---|---|
000 | 不复制,只有一个副本,默认设置 |
001 | 在相同的机架上复制一份 |
010 | 在相同数据中心的不同的机架上复制一份 |
100 | 在另一个数据中心上复制一份 |
200 | 在其他两个不同的数据中心上复制两份 |
110 | 在不同的机架上复制一份,并在不同的数据中心上复制一份 |
列 | 含义 |
---|---|
x | number of replica in other data centers |
y | number of replica in other racks in the same data center |
z | number of replica in other servers in the same rack |
创建的物理副本数量等于X+Y+Z+1,XYZ数字取值范围为0,1,2。
在master上指定复制类型并启动之后,启动volume server的参数上指定datacenter
和rack
:
-dataCenter=dc1 -rack=rack1
可以使用keepalived的方式实现filer的负载均衡,保证每个局域网只有一个filer在工作,从而避免多个mount客户端数据不同步的问题。
详情:SeaweedFS Wiki-Filer Stores
文件存储名称 | 查找复杂度 | 文件夹中文件数目 | 可扩展性 | Renaming | TTL | 注意 |
---|---|---|---|---|---|---|
内存 | O(1) | 受内存限制 | 本地,快速 | 仅用于测试,没有持久性存储 | ||
leveldb | O(logN) | 无限制 | 本地,非常快 | 默认,可扩展 | ||
leveldb2 | O(logN) | 无限制 | 本地,非常快,比leveldb快 | 与leveldb相似,查找键的一部分是128位MD5,而不是较长的完整文件路径 | ||
Redis | O(logN) | 无限制 | 本地或分布式,最快 | 是 | 一个目录的子文件名存储在一个键值输入中 | |
Cassandra | O(logN) | 无限制 | 本地或分布式,非常快 | 是 | ||
MySql | O(logN) | 无限制 | 本地或分布式,快速 | 原子操作 | 易于管理 | |
Postgres | O(logN) | 无限制 | 本地或分布式,快速 | 原子操作 | 易于管理 | |
MemSql | O(logN) | 无限制 | 分布式,快速 | 原子操作 | 可扩展 | |
TiDB | O(logN) | 无限制 | 分布式,快速 | 原子操作 | 可扩展 | |
CockroachDB | O(logN) | 无限制 | 分布式,快速 | 原子操作 | 可扩展 | |
Etcd | O(logN) | 10GB左右 | 分布式,每秒10000次写入 | 没有SPOF。高可用 | ||
TiKV | O(logN) | 无限制 | 本地或分布式,快速 | 易于管理 |
切换数据存储
# first save current filer meta data
$ weed shell
> fs.cd http://filerHost:filerPort/
> fs.meta.save
...
total 65 directories, 292 files
meta data for http://localhost:8888/ is saved to localhost-8888-20190417-005421.meta
> exit
# now switch to a new filer, and load the previously saved metadata
$ weed shell
> fs.meta.load localhost-8888-20190417-005421.meta
...
total 65 directories, 292 files
localhost-8888-20190417-005421.meta is loaded to http://localhost:8888/
在所有的master节点命令后面添加-metrics.address=<prometheus_gateway_host_name>:<prometheus_gateway_port>
参数即可
需要额外安装prometheus pushgateway,之后在prometheus中配置gateway的metrics地址即可在grafana中看到性能数据