SeaweedFS是一个简单并且高度可扩展的分布式文件系统,可以存储数十亿的文件并且快速获得文件,特别适合于有效处理小文件,这里我们简称为weed,weed的主节点不管理文件元数据而是仅管理文件卷,这些文件卷服务器各自管理各自的元数据,所以这样在高并发的情况下减少了主节点的压力和网络通信,同时定位文件也更迅速.

weed的每个文件元数据最多只有40字节的磁盘开销,并且读取磁盘的速度为O(1)级别的,因此性能非常高,weed的主要应用场景是存储海量的图片信息并且可以快读定位.

weed是使用Go语言开发的,github主页为:https://github.com/chrislusf/seaweedfs,使用weed可以通过源码编译,需要提前安装Go环境;也可以使用编译好的二进制包,不依赖Go环境直接执行,这里为了方便配置直接使用编译好的二进制文件,下载地址是:https://github.com/chrislusf/seaweedfs/releases/tag/0.90,目前最新版是0.90,下面有不同平台的包以及源码可以根据需要下载:

我这里是64位linux,所以下载的是linux_amd64.tar.gz这个包,下载之后执行解压: tar -xvzf linux_amd64.tar.gz 解压之后直接在当前目录有一个weed可执行文件,没错就是这么简单,可以把这个二进制文件复制到任何地方.

下面看一下帮助: ./weed help ,然后再看一下master的帮助: ./weed help master 注意不要写反了,这里会列出master启动的相关参数,查看卷启动参数可以使用 /weed help volume ,其他的根据需要来.

现在启动一个master: ./weed master  默认绑定端口为9333可以通过-port指定,默认绑定ip为localhost和0.0.0.0,这个也可以指定,现在是在前台执行,实际环境可以使用nohup放到后台.  特别注意一点是,当单机启动不同的master来管理多个存储时,一定要使用-mdir参数指定master服务元数据目录,如果不指定默认是/tmp,当多个实例分开时就会出现交叉的情况,当请求其中一个master时,会返回另外master管理的volume,引起很多问题,所以单节点部署多master一定要注意.

然后我们启动第一个volume服务:

nohup ./weed volume -dir="/data/weed" -max= -mserver="127.0.0.1:9333" -port= > /var/log/weed.log >& &

volume端口默认不指定为8080,-max指定是最大的卷个数,即这一个服务管理5个卷.

然后我们再启动第二个volume服务:

nohup ./weed volume -dir="/data/weed" -max= -mserver="127.0.0.1:9333" -port= > /var/log/weed2.log >& &

这里我们是在同一个服务器节点做的伪分布式,实际的分布式配置和上面完全一样,很简单.

然后可以做一个简单上传图片测试:

首先向master发送请求获取fid和卷服务器url:

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

这里本机写127.0.0.1其他服务器要写实际的master地址,然后返回如下:

这里fid为8,06ca4883a0:8为卷id,是无符号的32位整数;后面的06为文件密钥,是64位无符号整数,以16进制编码;然后后面的ca4883a0是文件cookie,32位无符号整数,这里用的4组16进制字符串表示长度为8,主要是防止url猜测.

这个fid需要我们自己存储,第一种方式可以按照结构拆分为整数类型存储,最多占用4 + 8 + 4 = 16个字节;另一种方式我们直接可以存储这个串,字符串长度最多也就是是8 + 1 + 16 + 8 = 33,所以一个char 33的数组就够了,并且通常也没有卷编号能够达到2的32次方;这里是两种常用的存储方式,可以根据需要选择.

然后可以根据卷返回的url上传文件的,这里8对应的是8081端口这个服务,下面可以上传文件:

curl -X PUT -F file=@/root/test.jpg http://127.0.0.1:8081/8,06ca4883a0

上传成功之后会返回文件名和大小,现在就上传成功了,原来的文件名不需要记录.

然后读取方法如下:

首先根据fid的卷编号获得卷对应的服务器地址: curl http://127.0.0.1:9333/dir/lookup?volumeId=8

返回的是一个列表,可能之前volume和现在启动方式不同会出现这种情况,当然尽量不要这样,这里拿到ip后可以访问图片了,这里weed做的很人性化,下面的url都是可以的:

http://192.168.4.205:8081/8,06ca4883a0
http://192.168.4.205:8081/8,06ca4883a0.jpg
http://192.168.4.205:8081/8/06ca4883a0
http://192.168.4.205:8081/8/06ca4883a0.jpg
http://192.168.4.205:8081/8/06ca4883a0/xxxxx
http://192.168.4.205:8081/8/06ca4883a0/xxxxx.jpg

具体ip改成实际的ip,可以看到上面做这些地址都是可以的,可以根据需要设计,最后的xxxxx可以是任意的字符串

另外还可以对图片做简单的处理如调整尺寸: http://192.168.4.205:8081/8/06ca4883a0.jpg?height=200&width=200 ,只指定一个参数按比例缩放,另外更多参数可以参考文档.

最后删除图片可以使用: curl -X DELETE http://127.0.0.1:8081/8/06ca4883a0.jpg

可以看出,当删除成功是返回实际的大小,文件不存在时返回0

知道了上面的这些基本操作,我们就可以在程序中实现图片的存储,访问和删除了,这些基本操作在github首页介绍的已经很详细了,我这里只是叙述一遍而已.

以上就是weed的基本配置和使用,实际使用中weed还支持分布式多主和跨数据中心管理等,操作都比较简单,并且任何的卷挂掉之后,写入仍然可以写入剩余正常的而不受影响,读取正常的卷上面的文件也不受影响,甚至主节点挂了如果知道对应的卷地址,访问图片仍然不受影响,这样生产环境的使用弹性就非常好.

SeaweedFS的配置使用的更多相关文章

  1. seaweedfs安装配置使用

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

  2. CentOS 7安装SeaweedFS

    1.从GitHub下载编译好的SeaweedFS 地址:https://github.com/chrislusf/seaweedfs/releases 选择linux_amd64.tar.gz的压缩包 ...

  3. seaweedFS

    那首先我们来分析一下seaweedfs是什么?seaweedfs是一个非常优秀的由 golang 开发的分布式存储开源项目.它是用来存储文件的系统,并且与使用的语言无关,使得文件储存在云端变得非常方便 ...

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

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

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

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

  6. 配置android sdk 环境

    1:下载adnroid sdk安装包 官方下载地址无法打开,没有vpn,使用下面这个地址下载,地址:http://www.android-studio.org/

  7. Android Studio配置 AndroidAnnotations——Hi_博客 Android App 开发笔记

    以前用Eclicps 用习惯了现在 想学学 用Android Studio 两天的钻研终于 在我电脑上装了一个Android Studio 并完成了AndroidAnnotations 的配置. An ...

  8. react-router 组件式配置与对象式配置小区别

    1. react-router 对象式配置 和 组件式配置    组件式配置(Redirect) ----对应---- 对象式配置(onEnter钩子) IndexRedirect -----对应-- ...

  9. 总结:Mac前端开发环境的搭建(配置)

    新年新气象,在2016年的第一天,我入手了人生中第一台自己的电脑(大一时好友赠送的电脑在一次无意中烧坏了主板,此后便不断借用别人的或者网站的).macbook air,身上已无分文...接下来半年的房 ...

随机推荐

  1. appium---第三个脚本,进入评论页,发表评论

    #进入编辑页,点击编辑框,固定光标 #com.xxx.xxx:id/edit__content drive.find_element_by_id('/edit_content').click(); t ...

  2. POJ1459 Power Network 网络流 最大流

    原文链接http://www.cnblogs.com/zhouzhendong/p/8326021.html 题目传送门 - POJ1459 题意概括 多组数据. 对于每一组数据,首先一个数n,表示有 ...

  3. SSM知识点与整合之Spring知识点(pom.xml需要依赖的jar或者plugin)

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  4. P1101 单词方阵 简单dfs

    题目描述 给一n \times nn×n的字母方阵,内可能蕴含多个“yizhong”单词.单词在方阵中是沿着同一方向连续摆放的.摆放可沿着 88 个方向的任一方向,同一单词摆放时不再改变方向,单词与单 ...

  5. 052 kafka对topic的增删改查操作

    一:create 1.开始使用命令 2.创建 bin/kafka-topics.sh --create --topic beifeng --zookeeper linux-hadoop01.ibeif ...

  6. 为什么分布式一定要有Redis?

    这篇文档是读了一个公众号的文章后修改后复制,以前的学习深度不够,现在还是理解不够,以后再写文档,继续加深. 一:说明 1.说明 考虑到绝大部分写业务的程序员,在实际开发中使用 Redis 的时候,只会 ...

  7. Python编译安装遇到的问题

    1.python在make时候报错 Python build finished, but the necessary bits to build these modules were not foun ...

  8. 搭建JMETER+ANT自动化接口测试环境步骤(一)

    一.环境准备: 1.JDK    下载            地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html ...

  9. HDU 1054 Strategic Game (最小点覆盖)【二分图匹配】

    <题目链接> 题目大意:鲍勃喜欢玩电脑游戏,特别是战略游戏,但有时他无法找到解决方案,速度不够快,那么他很伤心.现在,他有以下的问题.他必须捍卫一个中世纪的城市,形成了树的道路.他把战士的 ...

  10. UVA136 Ugly Numbers【set】【优先队列】

    丑数 丑数是指不能被2,3,5以外的其他素数整除的数.把丑数从小到大排列起来,结果如下: 1,2,3,4,5,6,8,9,10,12,15,… 求第1500个丑数. 提示:从小到大生成各个丑数.最小的 ...