概要:
master 存储映射关系,文件和fid的映射关系 weed master
Node 系统抽象的结点,抽象为datacenter、rack、datanode
datacenter 数据中心,包含多个rack,类似一个机房
rack :属于一个datacenter,类似机房中的一个机架
datanode : 存储节点,存储多个volume,类似机架中的一个机器 weed volume
volume :逻辑卷,存储needle
needle: 逻辑卷中的object,对应存储的文件
collection:文件集,默认所有文件都属于""文件集。如果想给某些文件单独分类,可以在申请id的时候指定相同的文件集
filer :指向一个或多个master的file服务器,多个使用逗号隔开。weed filer
weed volume会创建一个 datanode ,可以指定所属的 datacenter rack和master ,会根据配置存储文件,默认一开始没有volume,当开始存储文件的时候才会创建一个volume,当这一个volume大小超过了volumeSizeLimitMB 就会新增一个volume,当volume个数超过了max则该datanode就不能新增数据了。那就需要在通过weed volume命令新增一个datanode。
1.assign接口返回节点固定,不能在集群内均匀分配
首次申请fid时,master会创建这个replica模式下的几个volume,采用随机指定node的方式,创建的这些volume内部记为writable
后续每次分配都从这些writable上分配fid,除非这些已经分配的volume都用满,不会主动分配新volume,此时看起来每次assign返回节点是固定的
如果新扩容volume,或想主动触发生成新volume,可以通过pre-allocate接口触发分配新volume
2.master api写入文件与mount方式写入文件无法互通:
mount通过filer rpc写入,filer通过master rpc申请fid,并把path到fid的映射关系存储在filer存储中
从filer存储中查到fid后可以直接从volume获取文件
自行往filer存储中写入path→fid关系,可以实现两种方式互通
关于读:
客户端读取文件元数据=>Weed Filer=>Weed Filer数据库(LevelDB、Cassandra、Redis、Mysql、Postgres等)
客户端读取文件块=>清除卷服务器
关于写:
客户端将数据上载到剔除卷服务器,并将大文件分成块。
客户端将元数据和块信息写入文件管理器,然后写入文件管理器数据库。
3.filer端口自定义:
-port可以自定义http端口,rpc端口为http端口+10000,rpc端口无法自行配置
- filer存储选型
目前只对比redis与mysql
list redis 0.094s 1w个文件
list mysql 0.099s 1w个文件
list redis 4.728s 10w个文件
list mysql 1.211s 10w个文件
write redis 49s 1w次
write mysql 118s 1w次
read redis 25s 1w次
read mysql 23s 1w次
对比可以看到10w量级的list,redis会比mysql慢4倍,但时长仍可接受
read性能差不多,write性能redis比mysql快2.5倍
- filer高可用
如通过proxy,要同时配置http和grpc proxy
- mount后显示容量
mount后显示容量仅统计已分配的volume,因此看起来会显得容量很少
- 通过mv操作数据内容异常
直接mv到mount后的文件夹内,文件内容会有一定概率异常,cp不会,原因尚待排查,估计有bug