那首先我们来分析一下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. IE7及以下浏览器不支持json的解决方法

    在页面 alert(JSON);//大写 IE7及以下浏览器不支持json所以不会弹出object 解决方法打开json.org json的官网找到javascript的json2.js然后会转到gi ...

  2. Tag Helpers in forms in ASP.NET Core

    Tag Helpers in ASP.NET Core Tag Helpers in forms in ASP.NET Core HTML Form element ASP.NET Core buil ...

  3. 微服务架构与实践4_Docker

    构建Docker映像 定义Dockerfile=>Docker根据Dockerfile构建出映像 包含: 基础映像(父映像)信息 维护者信息 映像操作命令 容器启动命令 .net standar ...

  4. Long类型转json时前端js丢失精度解决方案

    一.问题背景 Java后端开发过程中,尤其是id字段,因数值太大,通过json形式传输到前端后,在js解析时,会丢失精度. 如果对精度丢失没有什么概念,可以看一个知乎的帖子,来感受一下:https:/ ...

  5. Ubuntu14.04下 升级 cmake

    参考: How to install cmake 3.2 on ubuntu 14.04? Ubuntu14.04下升级cmake 1.通过PPA安装: $ sudo apt-get install ...

  6. C#题目及答案(1)

    1. 简述 private. protected. public. internal 修饰符的访问权限. 答 . private : 私有成员, 在类的内部才可以访问. protected : 保护成 ...

  7. mybatis+spring boot, mapper 提示Could not autowire. No beans of … type found

    工具及背景: IntelliJ IDEA 2016.1.3 Ultimate.spring boot, maven项目,利用mybatis 注解的方式查询mysql. 业务逻辑关系:controlle ...

  8. BZOJ 4826 【HNOI2017】 影魔

    题目链接:影魔 这道题就是去年序列的弱化版啊…… 我们枚举最大值的位置\(i\),找出左边第一个比\(a_i\)大的位置\(l\),右边第一个比\(a_i\)大的位置\(r\),然后我们分开考虑一下\ ...

  9. LCA 模板

    关于LCA: LCA 指树上两点的公共祖先. 如何 “暴力” 找两点的 LCA : 可以先 DFS 一遍求出每个点的 dep (深度).然后从深度大的点先往上跳,跳到与另一个点相同的深度,如果还没有到 ...

  10. idea中git pull push需要反复输入密码

    在使用idea开发的过程中,在终端terminal中git pull和git push时遇到一个问题,一个是 每次提交都需要输入用户名和密码,,从网上找了下解决方案,记录一下. 解决: 打开git终端 ...