那首先我们来分析一下seaweedfs是什么?seaweedfs是一个非常优秀的由 golang 开发的分布式存储开源项目。它是用来存储文件的系统,并且与使用的语言无关,使得文件储存在云端变得非常方便。seaweedfs也是一个非常优秀的开源项目,Seaweedfs的设计原理是基于 Facebook 的一篇图片存储系统的论文Facebook-Haystack。一听就感觉作者很NB,有兴趣的可以去看一看Seaweedfs的源码,本文就讲解seaweedfs的搭建和简单应用。

seaweedfs的特点: 
1 可以成存储上亿的文件(根据你硬盘大小变化) 
2 速度刚刚的

接下来,便让我们开始进入正文。

一、seaweedfs的搭建

seaweedfs可以编译安装(需要VPN,网络环境不好,最好不用该方法安装),也可以下载释放版本镜像安装。

1、安装GO环境

(1)、下载go语言包,go语言包地址
wget 地址

比如:

wget https://golangtc.com/static/go/1.9.2/go1.9.2.linux-amd64.tar.gz
(2)、解压到指定目录,并添加环境变量
sudo tar -C /usr/local -xzf go1.9.2.linux-amd64.tar.gz

添加环境变量

#工作目录
export GOPATH=/opt/go
#解压目录
export GOROOT=/usr/local/go
export GOARCH=386
export GOOS=linux
export GOBIN=$GOROOT/bin
export GOTOOLS=$GOROOT/pkg/tool/
export PATH=$PATH:$GOBIN:$GOTOOLS
(3)、安装git、mercurial
sudo apt-get install git
suod apt-get install mercurial
(4)、安装seaweedfs

如果要编译安装运行下面命令,没有VPN,可以忽略下面命令:

go get github.com/chrislusf/seaweedfs/go/weed 

下载安装:seaweedfs地址

wget  https://github.com/chrislusf/seaweedfs/releases/download/0.76/linux_amd64.tar.gz

sudo tar -zxvf linux_amd64.tar.gz
(5)、配置运行seaweedfs

进入解压目录,以守护进程启动seaweedfs的主服务及集群

nohup ./weed master -mdir=/data/fileData -port=9333 -defaultReplication="001" -ip="ip地址" >>/data/fileData/server_sfs.log &

nohup ./weed volume -dir=/data/t_v1 -max=5 -mserver="ip地址:9333" -port=9080 -ip="ip地址" >>/data/t_v1_sfs.log &

nohup ./weed volume -dir=/data/t_v2 -max=5 -mserver="ip地址:9333" -port=9081 -ip="ip地址" >>/data/t_v2_sfs.log &

nohup ./weed volume -dir=/data/t_v3 -max=5 -mserver="ip地址:9333" -port=9082 -ip="ip地址" >>/data/t_v3_sfs.log &

将上面的ip地址换为具体的ip即可,默认可设为localhost。volume多少可以根据自己的情况添加。mdir、dir是指定文件存储路径。

一个 MasterServer 对应三个 VolumeServer ,设置复制模式为 “001” , 也就是在相同 Rack 下复制副本为一份,也就是总共有两份。如下:

更多的其他配置可以查看文档

二、seaweedfs的文件应用

访问服务器ip地址:9333,可以看到如下界面

(1)获取fid,使用GET或POST访问路径http://localhost:9333/dir/assign,获取fid和上传文件地址,seaweedfs会返回json的结果。

如下:

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

得到结果:

{"fid":"1,08e684f060","url":"1ocalhost:9080","publicUrl":"localhost:9080","count":1}

fid就是上传的标志。 
使用url或者publicUrl加上fid,就是文件上传的地址。如下:

 http://localhost:9080/1,08e684f060

接着就可以发起一个PUT或POST请求到上面的地址,把文件上传上去。

curl -X PUT -F file=@/home/back.png http://localhost:9080/1,08e684f060

结果如下:

{
"name": "back.png",
"size": 64300
}

(2)如果要更新一个文件,直接发起POST或者PUT请求到url+fid的地址即可。fid就是保存图片使用的fid。

(3)删除图片发起一个DELETE请求即可。

curl -X DELETE http://localhost:8080/1,08e684f060

(4)查看文件,需要fid。就是刚刚上传图片得到的fid。可以将其保存在数据库当中,查找文件时再调用。 
当有多个Volume集群时,可以通过参数指定查看某个卷。

curl http://localhost:9333/dir/lookup?volumeId=2

得到具体的地址:

{"volumeId":"2","locations":[{"url":"localhost:9081","publicUrl":"localhost:9081"}]}

然后访问具体的路由:

http://localhost:9081/fid

比如:http://localhost:9081/1,08e684f060 
可以带后缀,也可以不带。 
http://localhost:9081/1,08e684f060.jpg 
还可以带一些限定参数: 
http://localhost:9081/1,08e684f060.jpg 
http://localhost:9081/1,08e684f060.jpg?height=200&width=200 
http://localhost:9081/1,08e684f060.jpg?height=200&width=200&mode=fit 
http://localhost:9081/1,08e684f060.jpg?height=200&width=200&mode=fill

其实刚刚上传的是在9080的volume1,9081是volume2。但是通过fid加上具体的volume端口,依旧可以访问到图片的地址。

三、seaweedfs客户端使用

seaweedfs的使用与语言无关,都可以方便进行封装。github上也有一些开放的client。比如这个java的客户端。作者把线程分配、HTTP请求、文件操作进行了封装,更加方便。但是目前作者没怎么更新了,还有些问题。

我把客户端的java代码进行了重新覆写,上传到github了,seaweedfs-java-client欢迎大家start。

这里还有一些其他语言的客户端,大家也可以去学习更改一下:

java-client:https://github.com/Shuyun123/seaweedfs-java-client

php-client:https://github.com/micjohnson/weed-php

node-client:https://github.com/cruzrr/node-weedfs

python-client:https://github.com/darkdarkfruit/python-weed

scala-client:https://github.com/chiradip/WeedFsScalaClient

四、扩展

除了seaweedfs,还有一些其他的文件存储,比如:bfs(支撑Bilibili的小文件存储系统),github地址 bfs。感兴趣的读者可以去学习一下。 
还有比如阿里的https://github.com/alibaba/tfs,百度的https://github.com/baidu/bfs,fastdfs:https://github.com/happyfish100/fastdfs等。

作者:Anumbrella

链接: https://blog.csdn.net/Anumbrella/article/details/78585937

seaweedFS的更多相关文章

  1. SeaweedFS的配置使用

    SeaweedFS是一个简单并且高度可扩展的分布式文件系统,可以存储数十亿的文件并且快速获得文件,特别适合于有效处理小文件,这里我们简称为weed,weed的主节点不管理文件元数据而是仅管理文件卷,这 ...

  2. SeaweedFS上手使用指南

    SeaweedFS是基于go语言开发的高可用文件存储系统,主要特性 1.成存储上亿的文件(最终受制于你的硬盘大小)2.速度快,内存占用小 上手使用比fastDFS要简单很多,自带Rest API. S ...

  3. Seaweed-FS综合使用测试(转)

    2016-03-16 12:17:48   Seaweed-FS综合使用测试 参考信息 https://github.com/chrislusf/seaweedfs/ https://bintray. ...

  4. 分布式存储Seaweedfs源码分析

    基于源码版本号 0.67 , [Seaweedfs以前旧版叫Weedfs]. Seaweedfs 是一个非常优秀的由 golang 开发的分布式存储开源项目, 虽然在我刚开始关注的时候它在 githu ...

  5. seaweedfs 源码笔记(一)

    seaweedfs中的名词:master: 存储文件和fid映射关系volumn:实际存储文件datacenter: 数据中心rack: 机架.一个机架属于特定的数据中心,一个数据中心可以包含多个机架 ...

  6. seaweedfs安装配置使用

    Saeweedfs是一个由golang语言开发的分布式对象存储系统,很适合做图片服务器,性能很好,安装操作都很简单,并且可兼容挂载提供路径访问的方式,可以较为便捷的将nginx+nfs此类的文件服务器 ...

  7. seaweedfs文件存储服务器搭建

    官方网站: https://github.com/chrislusf/seaweedfs/wiki/Getting-Started 概述 seaweedfs是一个非常优秀的由 golang 开发的分布 ...

  8. seaweedfs使用记录

    搭建seaweedfs 在github上面clone,然后cd到docker目录使用docker-compose up -d就可以启动seaweedfs 启动以后通过xxx:9333可以看到效果 上传 ...

  9. SeaweedFS在.net core下的实践方案(续一)

    前言 我们之前已经完成了SeaweedFS在.net core下的使用了,但是说实话,还是不够,于是,我的目光盯住了IApplicationBuilder的扩展方法UseStaticFiles 这个可 ...

随机推荐

  1. (转) Supercharging Style Transfer

      Supercharging Style Transfer Wednesday, October 26, 2016 Posted by Vincent Dumoulin*, Jonathon Shl ...

  2. ie 支持字体大小继承

    今天需要实现字体大小继承这个效果.是这样的,在公用类里 .box 中的 .box1 的字体进行了修改.但是我的页面里不需要修改.我需要让他和 .box 一样.所以想到使用继承.但是想到继承这个属性兼容 ...

  3. Linux学习之用户与root

    因为想要建立建立一个目录,但是发现权限不够,因为没用root登陆,所以学习了一下普通用户与root之间如何切换以及如何创建用户的一些知识. 1.pwd命令可以查看当前用户 $这个符号代表的就是普通用户 ...

  4. latex建立参考文献的超链接

    在Latex生成的pdf文档中建立超链接(如从正文到参考文献,从目录到相应内容,从页码编号到实际页面等),有利于读者快速定位当前阅读的信息. 如何在生成的pdf文件中包含超链接呢?需要注意一下两点: ...

  5. File操作-将txt里的内容写入到数据库表

    package com.Cristin.File;//将txt里的内容写入到数据库表 import com.Cristin.MySQL.AddDataToDB;import org.testng.an ...

  6. 【Mysql】【环境配置】Mac

    参看:http://www.cnblogs.com/chenmo-xpw/p/6102933.html     一.下载dmg包安装 1.下载MySQL dmg 包, 从官网 : http://www ...

  7. 学习笔记28—Python 不同数据类型取值方法

    1.array数据类型 1)-------> y[i,] 或者 y[i] 2.遍历目录下所有文件夹: def eachFile(filepath):     pathDir =  os.list ...

  8. js常见知识点1.ajax相关

    一. javascript中的typeof返回哪些数据类型? 建议回复: typeof 运算符把类型信息当作字符串返回.typeof 返回值有六种可能: number, string, boolean ...

  9. svn上传和下载项目

    上传:到项目文件的svn文件夹下——>右键——>SVN Commit...——>输入提交代码备注信息,以便同事查看时,是属于什么内容.这里可以选择哪些文件是要提交到代码仓库上, 下载 ...

  10. PHP添加Memcached扩展

    1.下载memcached扩展 https://pecl.php.net/package/memcache 2.tar -xzvf memcache-2.2.7.tgz    #解压memcached ...