概述

seaweedfs是一个非常优秀的由 golang 开发的分布式存储开源项目。它是用来存储文件的系统,并且与使用的语言无关,使得文件储存在云端变得非常方便。

对应的流程图如下:

同步过程

流程图如下

下载过程

流程图如下

在逻辑上Seaweedfs的几个概念:

Node 系统抽象的节点,抽象为DataCenter、Rack、DataNode
DataCenter 数据中心,对应现实中的不同机房
Rack 机架,对应现实中的机柜
Datanode 存储节点,用于管理、存储逻辑卷
Volume 逻辑卷,存储的逻辑结构,逻辑卷下存储Needle
Needle 逻辑卷中的Object,对应存储的文件
Collection 文件集,可以分布在多个逻辑卷上

所有包含模块

模块 模块说明
Weed master 开启一个master服务器
Weed volume 开启一个volume 服务器
Weed filer 开启一个指向一个或多个master服务器的file服务器
Weed upload 上传一个或多个文件
Weed server 启动一个服务器,包括一个volume服务器和自动选举一个master服务器
模块的参数说明及使用说明
Weed master
参数 类型 说明
-cpuprofile String Cpu profile输出文件
-defaultReplication String 如果没有指定默认备份类型。默认”000”
-garbageThreshold String 清空和回收空间的阈值(默认”0.3”)
-ip String Master 服务器ip地址(默认”localhost”)
-ip.bind String 需要绑定的ip地址(默认”0.0.0.0”)
-maxCpu Int 最大cpu数量。0表示所有可用的cpu
-mdir String 存储元数据的数据目录(默认”/tmp”)
-memprofile String 内存配置文件输出文件
-peers String 逗号分隔所有主节点ip:端口列表,示例127.0.0.1:9093,127.0.0.1: 9094
-port Int http监听端口(默认9333)
-pulseSeconds Int 心跳检测的时间间隔单位为秒(默认5)
-secure.secret String 加密json web token方法
-volumePreallocate 无 为volumes预先分配磁盘空间
-volumeSizeLimitMB Uint Master停止指向过量的volumes写的限定(默认30000)
-whiteList string 逗号分隔具有写权限的Ip地址。如果是空的,没有限制。即白名单

说明
defaultReplication
000 不备份, 只有一份数据
001 在相同的rackj里备份一份数据
010 在相同数据中心内不同的rack间备份一份数据
100 在不同的数据中心备份一份数据
200 在两个不同的数据中心各复制2次
110 在不同的rack备份一份数据, 在不同的数据中心备份一次
如果数据备份类型是 xyz形式
各自的意义
x 在别的数据中心备份的份数
y 不相同数据中心不同的racks备份的份数
z 在别的服务器相同的rack的备份份数

Weed volume
参数 类型 说明
-cpuprofile string Cpu profile输出文件
-dataCenter string 当前volume服务的数据中心名称
-dir string 存储数据文件的目录dir[,dir]…(默认”/tmp”)
-idleTimeout Int 连接空闲时间秒数(默认30)
-images.fix.orientation (true/false) 上传时调整jpg方向
-index string 选择内存~性能平衡模式[memory|leveldb|boltdb|btree]。(默认”memory”)
-ip string Ip地址或服务器名称
-ip.bind string 需要绑定的ip地址(默认”0.0.0.0”)
-max string Volumes的最大值,count[,count]…(默认”7”)
-maxCpu Int 最大cpu数量。0表示所有可用的cpu
-memprofile string 内存配置文件输出文件
-mserver string 用逗号分隔的master服务器列表(默认”localhost:9333”)
-port Int http监听端口号(默认8080)
-port.public Int 端口对外开放
-publicUrl string 公开访问地址
-pulseSeconds Int 心跳之间的秒数,必须小于或等于master 服务器设置(默认5)
-rack string 当前volume服务器的rack 名称
-read.redirect (true/false) 重新定向转移或非本地 volumes
-whiteList string 逗号分隔具有写权限的Ip地址。如果是空的,没有限制。

Weed filer
参数 类型 说明
collection String 所有数据将存储在这个集合中
dataCenter String 首选在此数据中心写入volumes
defaultReplicaPlacement String 如果没有指定默认复制类型(默认“000”)
dirListLimit Int 限制子目录列表大小
disableDirListing 无 关闭目录清单
ip String Filter服务器http监听ip地址
master String 用逗号分隔的master服务器(默认“localhost:9333”)
maxMB Int 分割文件大于限制(默认32)
port Int Filer服务器htp监听端口(默认8888)
port.grpc Int Filer grpc服务器监听端口,默认为 http的端口+10000
port.public Int 对外开放的端口
redirectOnRead 无 在文件GET请求期间是代理还是重定向到volumes服务器
secure.secret String 加密Json Web令牌(JWT)的密钥

Weed upload
参数 类型 说明
collection string 可选的集合名称
dataCenter String 可选的数据中心名称
debug 无 显示debug信息
dir String 如果指定,则递归地上传整个文件夹。
include String 需要上传的文件,跟-dir配合使用,例如*.pdf,*.html,ab?d.txt等
master String Seaweedfs master服务器地址(默认”localhost:9333”)
maxMB Int 如果文件超过指定大小则进行分割
replication String 备份类型
secure.secret String 加密Json Web令牌(JWT)的密钥
ttl string 存活时间 1m,1h,1d,1M,1y

以上是maset volume upload filer 的所有参数说明。是主要的功能。

使用接口
申请一个fid
curl http://localhost:9333/dir/assign
上传文件
curl -F file=@/home/chris/myphoto.jpg http://127.0.0.1:8080/3,01637037d6
删除文件
curl -X DELETE http://127.0.0.1:8080/3,01637037d6
申请带存活时间的fid
curl http://localhost:9333/dir/assign?ttl=3m

安装git mercurial

yum install -y mercurial git

安装seaweedfs

  1. 下载
cd /soft/download

打开网站 :

 https://github.com/chrislusf/seaweedfs/releases/

选择对应的版本下载:

wget https://github.com/chrislusf/seaweedfs/releases/download/1.79/linux_amd64.tar.gz
  1. 解压
tar -zxvf linux_amd64.tar.gz
  1. ./weed -h 查看帮助

  1. 创建运行需要的目录
/usr/software/seaweedfs/master/data
/usr/software/seaweedfs/master/logs
/usr/software/seaweedfs/volume/vol
/usr/software/seaweedfs/volume/logs

方案一、设置一台master服务器和一台volume服务器

  1. 配置运行master
nohup /usr/software/seaweedfs/weed master -mdir=/usr/software/seaweedfs/master/data -port=9333 -ip="172.21.0.7" -volumeSizeLimitMB=30 &>> /usr/software/seaweedfs/master/logs/master.log &
  1. 配置运行volume
nohup /usr/software/seaweedfs/weed volume -dir=/usr/software/seaweedfs/volume/vol -max=3 -mserver="172.21.0.7:9333" -port=8080 -ip="172.21.0.7"  &>>/usr/software/seaweedfs/volume/logs/vol.log &
  1. 上传文件测试
    文件上传首先需要请求master, 去分配一个逻辑卷和fid
curl http://172.21.0.7:9333/dir/assign

返回结果

{"fid":"7,02d41f9f6b","url":"172.21.0.7:8080","publicUrl":"172.21.0.7:8080","count":1}

使用返回的url和fid上传文件

curl -F file=@/usr/software/seaweedfs/ww1.JPG http://172.21.0.7:8080/7,02d41f9f6b
{"name":"ww1.JPG","size":93533,"eTag":"1ae02c89"}

可以这么理解, 上传文件, 首先请求master分配volume和fid, 然后将文件上传到某个卷下

wget http://172.21.0.7:8080/7,02d41f9f6b

可以将该图片文件下载下来,

也可以在浏览器直接访问

http://172.21.0.7:8080/7,02d41f9f6b

或者

http://172.21.0.7:8080/7/02d41f9f6b

也可以直接上传文件

curl -F file=@/usr/software/seaweedfs/phx.mp4 http://172.21.0.7:9333/submit
{"eTag":"9cc46572","fid":"7,0572e19181","fileName":"phx.mp4","fileUrl":"172.21.0.7:8080/7,0572e19181","size":941529}
  1. 开启filer
nohup /usr/software/seaweedfs/weed filer -ip=XXX X -port=8882 -master=XXXX:9333 -collection=test &>>/usr/software/seaweedfs/filer/logs/filer.log &

设置多台master服务器和多台volume服务器

SeaweedFS 架构描述
在 SeaweedFS 在运行中分为两种角色:Master Server 和普通 Volume Server。

Master Server:用于管理普通 Volume Server, master会存储集群中 Volume Server 的状态,并且会负责接收 Client 的请求,并将具体的 URL 地址返回给客户端,master 之间通过 Raft 协议来保证一致性,在主节点崩溃的情况下会自动在从节点中选举中新的 master。
Volume Server:管理具体的存储目录,其工作包括写入、查询、删除数据,并会进行数据的压缩工作。
架构图如下:


搭建框架图
在 的单机中搭建 SeaweedFS,框架图如下:

存储系统由一个 master 进程和三个 volume 组成。

我们启动一个master,并设置一些参数,参数有很多都是默认的,可以不设置
# mdir 存储元数据的数据目录
# port 监听端口
# peers 主节点ip:端口
# defaultReplication 备份策略
# ip 服务器ip
# garbageThreshold 清空和回收空间的阈值
# maxCpu 最大cpu数量,0是所有
# pulseSeconds 心跳检测的时间间隔单位为秒
# ip.bind 绑定ip
# volumeSizeLimitMB volumes超载量,最大30G,即一个卷可以存多少数据,当然一个卷不代表一个磁盘,/root/weed master -mdir=/data/seaweedfs -port=9333 -peers=172.16.100.107:9333,172.16.100.111:9333,172.16.100.106:9333
-defaultReplication="000" -ip="172.16.100.107" -garbageThreshold=0.3 -maxCpu=0 -pulseSeconds=5 -ip.bind=0.0.0.0 -volumeSizeLimitMB=30000 >>/root/master.out &
./weed -logdir=master/log master -mdir=master/data -port=9333 -peers=172.18.91.2:9333,172.18.91.3:9333,172.18.91.4:9333  -ip=172.18.91.2 -port=9333 -defaultReplication="010" -volumeSizeLimitMB=30000 -defaultReplication=011 &
./weed -logdir=master/log master -mdir=master/data -port=9333 -peers=172.18.91.2:9333,172.18.91.3:9333,172.18.91.4:9333  -ip=172.18.91.3 -port=9333 -defaultReplication="010" -volumeSizeLimitMB=30000 -defaultReplication=011 &
./weed -logdir=master/log master -mdir=master/data -port=9333 -peers=172.18.91.2:9333,172.18.91.3:9333,172.18.91.4:9333  -ip=172.18.91.4 -port=9333 -defaultReplication="010" -volumeSizeLimitMB=30000 -defaultReplication=011 &
  1. 配置运行volume
# dir 存储数据文件的目录,刚才的挂载点
# mserver master服务器列表
# port 监听端口
# ip 服务器ip
# max 本机volumes的最大值,在master上我们定义的每个卷为30G,可是我们的磁盘不可能就这么点,而max的作用就是表示这个磁盘上可以分多少个卷,默认是7,也就是30G * 7 = 210G,很明显磁盘被浪费了很多空间,因此我们需要指定一个大max值,保证volumeSizeLimitMB * max >= 磁盘容量,当然你可以直接100,简单粗暴
# dataCenter 机房
# rack 机架
# idleTimeout 连接空闲时间秒数
# images.fix.orientation 上传时调整jpg方向
# ip.bind 监听ip
# maxCpu 最大cpu数量
# read.redirect 重新定向转移非本地volumes/root/weed volume -dir=/data/seaweedfs/volume1 -mserver=172.16.100.107:9333,172.16.100.111:9333,172.16.100.106:9333 -ip="172.16.100.136" -max=100 -dataCenter=zw -rack=openstack-bj-zw-bgp5 -idleTimeout=30 -images.fix.orientation=true -ip.bind=0.0.0.0 -maxCpu=0 -port=8081 -read.redirect=true >>/root/volume1.out &
/root/weed volume -dir=/data/seaweedfs/volume2 -mserver=172.16.100.107:9333,172.16.100.111:9333,172.16.100.106:9333 -ip="172.16.100.136" -max=100 -dataCenter=zw -rack=openstack-bj-zw-bgp5 -idleTimeout=30 -images.fix.orientation=true -ip.bind=0.0.0.0 -maxCpu=0 -port=8082 -read.redirect=true >>/root/volume2.out &
./weed -logdir=volume/log volume -dir=volume/data  -mserver=172.18.91.2:9333,172.18.91.3:9333,172.18.91.4:9333 -ip=172.18.91.2 -port=8080 -publicUrl=124.126.120.19:8080 -max=20 -dataCenter=dc -rack=rack2-4 -images.fix.orientation=true -read.redirect=true &
./weed -logdir=volume/log volume -dir=volume/data  -mserver=172.18.91.2:9333,172.18.91.3:9333,172.18.91.4:9333 -ip=172.18.91.3 -port=8080 -publicUrl=124.126.120.19:8080 -max=20 -dataCenter=dc -rack=rack2-4 -images.fix.orientation=true -read.redirect=true &
./weed -logdir=volume/log volume -dir=volume/data  -mserver=172.18.91.2:9333,172.18.91.3:9333,172.18.91.4:9333 -ip=172.18.91.4 -port=8080 -publicUrl=124.126.120.19:8080 -max=20 -dataCenter=dc -rack=rack2-4 -images.fix.orientation=true -read.redirect=true &
./weed -logdir=volume/log volume -dir=volume/data  -mserver=172.18.91.2:9333,172.18.91.3:9333,172.18.91.4:9333 -ip=172.18.91.5 -port=8080 -publicUrl=124.126.120.19:8080 -max=20 -dataCenter=dc -rack=rack5-7 -images.fix.orientation=true -read.redirect=true &
./weed -logdir=volume/log volume -dir=volume/data  -mserver=172.18.91.2:9333,172.18.91.3:9333,172.18.91.4:9333 -ip=172.18.91.6 -port=8080 -publicUrl=124.126.120.19:8080 -max=20 -dataCenter=dc -rack=rack5-7 -images.fix.orientation=true -read.redirect=true &
./weed -logdir=volume/log volume -dir=volume/data  -mserver=172.18.91.2:9333,172.18.91.3:9333,172.18.91.4:9333 -ip=172.18.91.7 -port=8080 -publicUrl=124.126.120.19:8080 -max=20 -dataCenter=dc -rack=rack5-7 -images.fix.orientation=true -read.redirect=true &

另一种配置分布式环境

启动一个测试集群:2 filer(8801-8802) + 3 master(9331-9333) + 3 volume(8081-8083)

下载seaweedfs:

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

先创建所需要目录

启动master

xuliang@xuliang-PC:/data/seaweedfs$ cat start_master.sh
./weed -logdir=log/master1 master -mdir=master1 -peers=192.168.11.103:9331,192.168.11.103:9332,192.168.11.103:9333 -ip=192.168.11.103 -port=9331 -defaultReplication=001 &
./weed -logdir=log/master2 master -mdir=master2 -peers=192.168.11.103:9331,192.168.11.103:9332,192.168.11.103:9333 -ip=192.168.11.103 -port=9332 -defaultReplication=001 &
./weed -logdir=log/master3 master -mdir=master3 -peers=192.168.11.103:9331,192.168.11.103:9332,192.168.11.103:9333 -ip=192.168.11.103 -port=9333 -defaultReplication=001 &
xuliang@xuliang-PC:/data/seaweedfs$

启动volume

xuliang@xuliang-PC:/data/seaweedfs$ cat start_volume.sh
./weed -logdir=log/volume1 volume -dir=volume/data1 -max=300 -mserver=192.168.11.103:9331,192.168.11.103:9332,192.168.11.103:9333 -ip=192.168.11.103 -port=8081 &
./weed -logdir=log/volume2 volume -dir=volume/data2 -max=300 -mserver=192.168.11.103:9331,192.168.11.103:9332,192.168.11.103:9333 -ip=192.168.11.103 -port=8082 &
./weed -logdir=log/volume3 volume -dir=volume/data3 -max=300 -mserver=192.168.11.103:9331,192.168.11.103:9332,192.168.11.103:9333 -ip=192.168.11.103 -port=8083 &
xuliang@xuliang-PC:/data/seaweedfs$

使用weed scaffold -config filer -output="." 在当前目录生成配置文件

查看帮助信息知道

The configuration file “filer.toml” is read from “.”, “$HOME/.seaweedfs/”, or “/etc/seaweedfs/”, in that order.

配置文件要放在当前目录或"$HOME/.seaweedfs/", or "/etc/seaweedfs/

修改存储元数据信息默认[leveldb2]

[leveldb2]
£ local on disk, mostly for simple single-machine setup, fairly scalable
£ faster than previous leveldb, recommended.
enabled = true
dir = “.”

修改为redis

[redis]
enabled = true
address  = "localhost:6379"
password = ""
database = 0

启动命令:

xuliang@xuliang-PC:/data/seaweedfs$ cat start_filer.sh
./weed -logdir=./log/filer1 filer -port=8801 -master=192.168.11.103:9331,192.168.11.103:9332,192.168.11.103:9333 -ip=192.168.11.103 -defaultReplicaPlacement=001 &
./weed -logdir=./log/filer2 filer -port=8802 -master=192.168.11.103:9331,192.168.11.103:9332,192.168.11.103:9333 -ip=192.168.11.103 -defaultReplicaPlacement=001 &
xuliang@xuliang-PC:/data/seaweedfs$

挂载:

xuliang@xuliang-PC:/data/seaweedfs$ cat start_mount.sh
./weed mount -filer=192.168.11.103:8801 -dir=/mnt -filer.path=/

xuliang@xuliang-PC:/data/seaweedfs$

SeaWeedFS文件存储服务器搭建相关推荐

  1. 文件服务器搭建_小型企业文件存储服务器的搭建四部曲

    随着科技的发展,越来越多的企业都选用了服务器,但是很多企业为了节省成本,购买存储服务器并不是最好的选择,所以这就使得很多企业自己私底下就搭建了企业文件存储服务器.今天小编就给大家带来这四个步骤: 使用 ...

  2. 企业文件存储服务器规划,企业文件存储服务器

    企业文件存储服务器 内容精选 换一换 鲲鹏BoostKit分布式存储使能套件特性清单 云硬盘(Elastic Volume Service,EVS)可以为裸金属服务器提供高可靠.高性能.规格丰富并且可 ...

  3. 树莓派 文件服务器,树莓派安装配置NFS文件存储服务器

    前言 树莓派有一个非常好的优点就是功耗特别低,大概只有3W的样子.因此如果在树莓派上搭建一个NFS家庭文件服务器是非常理想的设备,因为树莓派功耗底所以没有风扇等机械结构自然也就没有噪音等困扰,可以说是 ...

  4. 文件存储服务器英文,文件存储服务器

    文件存储服务器 内容精选 换一换 本文档所述Demo在提供服务的过程中,可能会涉及个人数据的使用,建议您遵从国家的相关法律采取足够的措施,以确保用户的个人数据受到充分的保护.本文档所述Demo仅用于功 ...

  5. ftp服务器不能双向传输文件,实现文件双向传输搭建FTP服务器

    考试大编辑整理:实现文件双向传输 搭建FTP服务器 FTP(File Transfer Protocol),是文件传输协议的简称.用于Internet上的控制文件的双向传输.同时,它也是一个应用程序( ...

  6. 【愚公系列】2022年01月 MinIO文件存储服务器-客户端创建和桶操作(Python版)

    文章目录 一.python对接MinIO 1.首先执行命令安装包 2.创建客户端 3.桶操作 3.1 创建桶 3.2 查询桶 3.2.1 查询桶和判断桶是否存在 3.2.2 列出桶的对象信息 3.3 ...

  7. es文件浏览器web服务器,es文件浏览器 搭建ftp服务器

    es文件浏览器 搭建ftp服务器 内容精选 换一换 简要介绍WordPress简称WP,最初是一款博客系统,后逐步演化成一款免费的CMS(内容管理系统/建站系统).语言:PHP一句话描述:一款免费的C ...

  8. 星际无线服务器,蜗牛星际变身文件存储服务器

    蜗牛星际变身文件存储服务器 2019-04-29 10:30:00 9点赞 64收藏 77评论 在岸上徘徊了一个多月,终于忍不住下海入手了台蜗牛星际,左思右想,订了台A单千兆.原因很简单,A款下面有四 ...

  9. 文件存储服务器启动不了,一步步带你用 FastDFS 搭建文件管理系统 详细的不得鸟...

    文章目录 FastDFS概述 FastDFS 中的三个角色 FastDFS 三个角色的关系 FastDFS集群 FastDFS 架构说明 FastDFS 安装 安装 FastDFS 依赖包 安装 Fa ...

  10. 分布式文件系统研究-搭建图片服务虚拟主机

    搭建图片虚拟主机 在storage上安装Nginx 在 storage server 上安装 nginx 的目的是对外通过 http 访问 storage server 上的文 件.使用 nginx ...

最新文章

  1. KernelIoControl和OEMIoControl的分析和使用(作者:wogoyixikexie@gliet)
  2. 网络编程学习笔记(套接口超时)
  3. jQuery动态操作表单
  4. 4月13日学习笔记——jQuery动画
  5. A Simple Problem with Integers
  6. fortran subroutine_Fortran:派生数组与数组传递进子程序耗费时间比较
  7. 一步步使SSH连接您的github仓库
  8. 前端遮罩层实现_css遮罩层怎么做?
  9. ZooKeeper学习第七期--ZooKeeper一致性原理
  10. 干货 | ZooKeeper 源码和实践揭秘
  11. android 漩涡动画,使用P5.js构造漩涡动画特效
  12. android 视频标签,android--------WebView实现 Html5 视频标签加载
  13. zabbix 监控项自动发现过滤_Zabbix使用javascript+jsonpath预处理动态生成监控项
  14. [转载]计算机端口详解
  15. Win10 去掉桌面快捷方式小箭头
  16. BlackBerry 模拟器上网
  17. java通过代理使用redis,redis自动关闭连接,释放资源
  18. 【超级干货】Delphi轮播视频和图片程序(用于双屏显示程序)
  19. 齿轮振动信号的数字滤波处理-Matlab源代码
  20. 7-6 7-7 7-8 7-9 7-10

热门文章

  1. ubuntu opencv 安装
  2. 周遭心理学的应用-什么是心理学?
  3. 获取抖音无水印视频地址
  4. MakeApie 将于 2月15号开始暂停服务
  5. 蓝桥杯题库及答案python版_蓝桥杯试题库的历届真题版.doc
  6. c语言矩阵键盘控制四个led灯,51单片机矩阵键盘与左右流水灯控制C程序
  7. php美颜滤镜,美颜滤镜的虚幻不如一支玻尿酸来的真实
  8. KVM vCPU创建过程
  9. 毕业论文答辩技巧及注意事项(附答辩自述模板)~
  10. 极点五笔的一些快捷键