概述

seaweedfs是一个分布式的文件系统。

下面这段引用是官方github主页对其总的介绍

SeaweedFS is a simple and highly scalable distributed file system to store and serve billions of files fast! SeaweedFS object store has O(1) disk seek, transparent cloud integration, and SeaweedFS Filer supports Kubernetes, POSIX, S3 API, encryption, Erasure Coding for warm storage, FUSE mount, Hadoop, WebDAV.

seaweedfs支持集群模式,通过raft协议来保证数据的强一致性。

集群的节点有master, volume, filer等角色。
我只用到了master(存储数据元数据映射的节点, 如volume1的数据在哪个volume server上), volume(存储数据的节点)。

利用 docker启动一个seaweedfs集群

为了快速看到效果, 用docker在单机上启动一个集群看看

# pull weed镜像
docker pull chrislusf/seaweedfs:1.85 # 创建docker volume
docker volume create weed-master
docker volume create weed-volume1
docker volume create weed-volume2    # 启动master server, 两个volume server
docker run -p 9333:9333 --name weed-master -v weed-master:/data -d chrislusf/seaweedfs:1.85 masterdocker run -p 8081:8080 --name weed-volume1 -v weed-volume1:/data \--link weed-master:weed-master -d chrislusf/seaweedfs:1.85 \volume -fileSizeLimitMB=128 -mserver="weed-master:9333" -port=8080docker run -p 8082:8080 --name weed-volume2 -v weed-volume2:/data \--link weed-master:weed-master -d chrislusf/seaweedfs:1.85 \volume -fileSizeLimitMB=128 -mserver="weed-master:9333" -port=8080

其中-fileSizeLimitMB=128选项指定了上传文件时最大不能超过128M

其中部分端口说明如下:
9333: master的http服务默认监听端口
8080: volume的http服务默认监听端口

http接口使用

为了方便演示, 建立了两个文件,大小分别为12字节和129M

root@gl-test: ~ # ls -l                                                                                                   [13:44:16]
total 6148
-rw-r--r-- 1 root root                 12 Jul 18 13:40 a.txt
-rw-r--r-- 1 root root 135266304 Jul 18 13:43 largefile
  • 直接上传

    root@gl-test: ~ # curl -F file=@./a.txt http://localhost:9333/submit
    {"eTag":"28b81996","fid":"5,09dff3964d","fileName":"a.txt","fileUrl":"172.17.0.3:8080/5,09dff3964d","size":12}#
    
  • 先分配fileId再上传

    root@gl-test: ~ # curl http://localhost:9333/dir/assign
    {"fid":"7,0b93c620ad","url":"172.17.0.4:8080","publicUrl":"172.17.0.4:8080","count":1}# # 直接用上面返回的url来作为上传地址
    root@gl-test: ~ # curl -F file=@./a.txt http://172.17.0.4:8080/7,0b93c620ad
    {"name":"a.txt","size":12,"eTag":"f0ff7292","mime":"text/plain"}#
    

    这种先分配fileId再上传有什么好处呢?难道不是按我们一般的做法,直接上传好一些吗?
    肯定是有好处的, 比如可以指定dataCenter, 复制策略等。
    可以查看https://github.com/chrislusf/seaweedfs/wiki/Master-Server-API来获取更多参数。
    其实submit也可以指定一些参数, 不过没有assign可指定的参数多,而且在官方wiki中也没
    找到submit的参数(我看代码知道的)

  • 查找

    root@gl-test: ~ # curl http://localhost:9333/dir/lookup\?fileId\=7,0b93c620ad
    {"volumeId":"7","locations":[{"url":"172.17.0.4:8080","publicUrl":"172.17.0.4:8080"}]}#
    

    可以找出某个fileId对应的文件在哪个volume server上(返回的url, publicUrl根据情况使用)

  • 下载

    root@gl-test: ~ # curl -i  http://172.17.0.4:8080/7,0b93c620ad                                                            [13:56:27]
    HTTP/1.1 200 OK
    Accept-Ranges: bytes
    Content-Disposition: inline; filename="a.txt"
    Content-Length: 12
    Content-Type: text/plain
    Etag: "f0ff7292"
    Last-Modified: Sat, 18 Jul 2020 05:48:04 GMT
    Date: Sat, 18 Jul 2020 05:56:30 GMThello world
    

    注意:

    • 下载地址可通过lookup的url 或者 publicUrl来指定
    • 返回的Header中有Content-Disposition: inline; filename="a.txt"; inline是说尽可能直接显示
      比如这个请求,在浏览器中的话会直接显示文件内容。
      如果无法直接显示(比如zip文件), 才会下载, 参考https://stackoverflow.com/questions/1395151/content-dispositionwhat-are-the-differences-between-inline-and-attachment。

总结

seaweedfs启动时还有很多别的参数,可以从官方wiki中学习。
后续会写一个简单的http客户端来操作(主要是上传下载)

参考

  • https://stackoverflow.com/questions/1395151/content-dispositionwhat-are-the-differences-between-inline-and-attachment
  • https://github.com/chrislusf/seaweedfs/wiki

(完)

seaweedfs学习相关推荐

  1. SeaWeedfs学习总结

    SeaWeedfs学习总结 1 架构 2.基本原理 3 基本使用 3.1 上传文件(Write File) 3.2 修改文件(Write File) 3.3 删除文件(Write File) 3.4 ...

  2. 史上最全的“大数据”学习资源

    2019独角兽企业重金招聘Python工程师标准>>> 资源列表: 关系数据库管理系统(RDBMS) 框架 分布式编程 分布式文件系统 文件数据模型 Key -Map 数据模型 键- ...

  3. 干货丨不可错过的大数据学习资源推荐

    今天为大家推荐一些翻译整理的大数据相关的非常棒的学习资源,希望能给大家一些帮助. 关系数据库管理系统(RDBMS) MySQL:世界最流行的开源数据库: PostgreSQL:世界最先进的开源数据库: ...

  4. 最全的“大数据”学习资源

    关系数据库管理系统(RDBMS) 框架 分布式编程 分布式文件系统 文件数据模型 Key -Map 数据模型 键-值数据模型 图形数据模型 NewSQL数据库 列式数据库 时间序列数据库 类SQL处理 ...

  5. 大数据学习资源最全版本(收藏)

    资源列表: 关系数据库管理系统(RDBMS) 框架 分布式编程 分布式文件系统 文件数据模型 Key -Map 数据模型 键-值数据模型 图形数据模型 NewSQL数据库 列式数据库 时间序列数据库 ...

  6. 史上最全大数据学习资源整理

    史上最全大数据学习资源整理 ----------------------------------------------------------------------------------- 转载 ...

  7. 最全的大数据学习资料整理

    资源列表: 关系数据库管理系统(RDBMS) MySQL:世界最流行的开源数据库; PostgreSQL:世界最先进的开源数据库; Oracle 数据库:对象-关系型数据库管理系统. 框架 Apach ...

  8. 最全大数据学习资源整理

    关系数据库管理系统(RDBMS) MySQL:世界最流行的开源数据库; PostgreSQL:世界最先进的开源数据库; Oracle 数据库:对象-关系型数据库管理系统. 框架 Apache Hado ...

  9. 2019最全大数据学习资源整理(值得收藏)

    关系数据库管理系统(RDBMS) MySQL:世界最流行的开源数据库; PostgreSQL:世界最先进的开源数据库; Oracle 数据库:对象-关系型数据库管理系统. 框架 Apache Hado ...

  10. 整理最全的“大数据”学习资源

    资源列表: 关系数据库管理系统(RDBMS) 框架 分布式编程 分布式文件系统 文件数据模型 Key -Map 数据模型 键-值数据模型 图形数据模型 NewSQL数据库 列式数据库 时间序列数据库 ...

最新文章

  1. 安全退出调用多个Activity的Application
  2. 文巾解题 5. 最长回文子串
  3. mysql当数据改变时_MySQL中,当update修改数据与原数据相同时会再次执行吗?
  4. 测试一体机ASM failgroup的相关问题处理
  5. 系统封装接口层 cmsis_os
  6. 解决LInux更新慢的问题, 更换国内软件源
  7. 3dmax:3dmax三维VR渲染设置(VR间接照明GI栏、【VR间接(全局)照明】发光贴图、光子贴图、BF算法、灯光贴图、灯光缓存)之详细攻略(切记收藏!)
  8. java怎么打印课程表_自明排课系统如何打印?教你打印课表的方法
  9. Nginx支持ipv6
  10. JAVA练习216-整数的英语表示
  11. android 播放流媒体_30个最佳和免费的Android媒体播放器
  12. 2017.9.29 红红火火恍恍惚惚
  13. python三引号作用是什么_python中三引号的作用(逗号的两点总结)
  14. Flash CS4网页中Flash背景透明
  15. 基于OpenCV实现二维码发现与定位
  16. 19年程序员薪酬报告:平均年薪超70万,40岁后普遍遭遇收入天花板
  17. arduino使用晶联讯jlx12864
  18. Android 关于Android权重的真正理解
  19. 控制工程实践(5)——线性控制系统的稳态误差(之二)
  20. 产品经理可以考哪些证书提升自己?一篇文章回答你

热门文章

  1. xlsxwriter进度条php,PHP_XLSXWriter
  2. 遇到from playsound import playsoundModuleNotFoundError: No module named ‘playsound‘解决办法
  3. 工作中使用到的单词(软件开发)_2022_0815备份
  4. 版式设计——网页排版
  5. python绘图——图片大小设置figsize
  6. 关于Eclipse安装ArchStudio 5插件出现An error occurred while collecting items to be installed......的解决方法
  7. js实现,同域名下pc,移动网站模板切换跳转
  8. 项目管理手记(七)--DRP系统的文化输出与营销
  9. 怎么样利用栅格数据分类后的结果以行政区域统计各个地类的面积
  10. 开发如何转型做项目管理