seaweedfs使用记录

seaweedfs中的名词:
master: 存储文件和fid映射关系
volumn:实际存储文件
datacenter: 数据中心
rack: 机架。一个机架属于特定的数据中心,一个数据中心能够包含多个机架。
collection: 一组volume的集合。若是在存储文件的时候没有指定collection,那么使用默认的""html

weed-fs提供了若干种replication策略(rack – 机架,一个逻辑上的概念):
000 no replication, just one copy
001 replicate once on the same rack
010 replicate once on a different rack in the same data center
100 replicate once on a different data center
200 replicate twice on two other different data center
110 replicate once on a different rack, and once on a different data centerapi

二,删除文件
向master发起/delete操做,URL参数是fid。
master:
1)对每一个fid,根据fid找出它所在的volume的信息(主要是url),而后经过向volume_server的URL的/delete发起删除文件的操做,发起删除的操做由一组goroutine并发执行
2)将删除结果返回给客户端并发

volume:
1)从该volume的needleMap中删除这个file
2)将空的索引信息(key=id, offset=0, size=0)append到索引文件末尾
2)将空文件的信息append到dat文件末尾app

能够看到,volume在删除文件的时候,根本没有动原来的文件,只是在needleMap中将这个文件删除。curl

三,volume上的碎片回收
两种途径:1)master集群中的leader进程定时(15分钟)作一次回收;2)经过向master发送/vol/vacuum的HTTP请求来回收
回收步骤:
master:
1)对每一个Collection中的每一个VolumeLayout,每一个volumeLayout中的每一个volume,经过向相应的volume_server的/admin/vacuum/check发起HTTP请求来批量监测它的是否须要回收,若是须要回收,到2),不然退出
2)将要compact的volume_id的状态变成不可写
3)经过向相应的volume_server的/admin/vacuum/compact发起HTTP请求来让volume_server执行回收操做,若是回收操做成功,到4),不然退出
4)向相应的volume_server的/admin/vacuum/commit发起HTTP请求来提交本次回收操做,获得成功的响应后,将该volume_id的状态变成可写分布式

volume:
1)收到/admin/vacuum/check发过来的监测是否回收的指令后,若是 碎片大小/总大小 < URL参数中的garbageThreshold,则返回false说明不须要回收,不然返回true说明须要回收
2)收到/admin/vacuum/compact发过来的压缩指令后,在本目录下面建立新文件vid.cpd和vid.cpx,分别表明压缩后的数据文件和索引文件,接着扫描原来的vid.dat文件,将仍然使用的数据写入到vid.cpd中,并将索引信息写入到vid.cpx中,返回成功。须要注意的是,在扫描原来的vid.dat文件时,遇到一个文件若是它不在旧的needleMap中,说明这个文件已经被删除了,不会将它写入到新的vid.cpd文件中。
3)收到/admin/vacuum/commit发过来的提交压缩指令后,用vip.cpd覆盖vip.dat,vid.cpx覆盖vip.idx,接着用vid.cpx中的内容更新内存中该volume的needleMapide

 

一致性:
在分布式系统中,“一致性”是永恒的难题。weed-fs支持replication,其多副本的数据一致性须要保证。
weed-fs理论上采用了是一种“强一致性”的策略,即:
weedfs的replication的设计原则是由接受上传的volume server 来作数据复制。
上传文件时,会在本地写完后,经过master获取副本的其余volume server,而后本机发起向其余volume serer写副本文件的操做。
删除文件时,会在本地删除完成后,经过master获取副本的其余volume server,而后本机向其余volume server发起删除副本的操做。

测试

数据迁移url

weed-fs提供数据迁移命令spa


上传流程
1,向http://master/dir/assign发送HTTP请求,获取该文件的fid,url,publicUrl等信息
2,批量上传文件时,第一个文件fid是fid,其他的id是fid_1, fid_2, fid_3...
3,随后向http://master/fid发起POST请求,将文件上传至master。

#测试上传图片

#curl -X POST http://localhost:9333/dir/assign

#curl -X POST -F file=../i.jpg 地址

seaweedfs简单使用

记录一下平常使用,比较重要的api。

1.处处指定volume中的文件名,在master节点下执行获取seaweedfs指定volumeid下的文件名称:
weed export -dir=/data/data/weed_volume_vaccum -volumeId=116

2.seaweedfs上的数据执行delete以后不会直接清除,而是从needlemap文件中删除,须要经过紧缩操做清除碎片;指定master节点ip和port执行

volume紧缩:
curl "http://masterserver:9333/vol/vacuum"
curl "http://masterserver:9333/vol/vacuum?garbageThreshold=0.4"


3.获取volume的状态,指定volume的server ip和port获取volume状态:
curl "http://volumeserver:8089/status?pretty=y"


4.在指定的volume server下挂载或卸载volume,在进行volume迁移时颇有效:
curl "http://volumeserver:8080/admin/volume/unmount?volume=volumeId"


5.和2的操做同样,想master节点发出的vacuum操做最后会向各个volume server发送check、compact和commit请求;这里只是指定volume server进行vacuum操做。
向指定volumeserver发check/compact/commit请求
curl "http://volumeserver:8082/admin/vacuum/check?volume=50&;garbageThreshold=0.0"
curl "http://volumeserver:8082/admin/vacuum/compact?volume=50"
curl "http://volumeserver:8082/admin/vacuum/commit?volume=50"


这里的garbageThreshold参数是指当volume的磁盘碎片率大于该指以后是否执行vacuum进行碎片回收。至于紧缩的详细过程某blog聊得很清楚,可是紧缩的时候也是很是有用,感谢!

本文参考http://www.cnblogs.com/cobbliu/p/4972603.htm

https://www.aliyun.com/jiaocheng/123342.html

Weed-FS 接口 master、volume 服务接口

http://it.51xw.net/opensource/1000n0.html

相关文章
相关标签/搜索