其他分享
首页 > 其他分享> > seaweedfs学习笔记

seaweedfs学习笔记

作者:互联网

==背景==

项目是私有化部署,有一些图片及文件需要存储,数量不多,单文件大小也不是很大,

目前只能放在linux下的绝对路径下面,有必要研究一下文件系统。

想找一个简单(不需要依赖其他组件,安装容易)易用(使用起来简单)的分布式文件系统的技术,

朋友介绍了seaweedfs这个结束,过来研究一下,并记录一下笔记。

 

==环境==

Linux CentOS7 (虚拟机)

 

==参考博客==

在整个验证之前,我看了两个比较好的博客。

https://www.cnblogs.com/townsend/p/11315348.html

https://blog.wangqi.love/articles/seaweedfs/seaweedfs%E6%90%AD%E5%BB%BA%E4%B8%8E%E4%BD%BF%E7%94%A8.html

 

==部署==

1、下载

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

我的操作系统选择的是linux centos8,选择了下载linux_amd64.tar.gz

 

 

 

2、上传并解压缩

tar -zxvf linux_amd64.tar.gz

 

 

 

可以先查看一下weed命令的支持参数

命令:weed -h

 

 

指令    说明
benchmark    测试seaweedfs的文件读写性能
backup    将volume备份到本地
compact    压缩volume文件
filer.copy    将一个或多个文件复制到filer目录下
fix    发生崩溃时修复索引文件
filer.replicate    将文件的修改复制到另一个目标
server    启动master服务、volume服务、filer和s3服务
master    启动master服务
filer    启动filer服务,指向一个或者多个master服务
s3    启动s3服务,前提是启动filer服务
upload    上传一个或多个文件
download    根据文件id下载文件
scaffold    生成基本的配置文件
shell    执行可交互的管理指令
version    打印seaweedfs的版本
volume    启动volume服务
export    列出或者输出volume中的文件
mount    将filer挂载成一个目录
webdav    启动webdav服务,前提是启动filer服务

 

 

3、启动master

命令:./weed master

nohup方式启动:nohup /home/radmin/soft/weed master whiteList=127.0.0.1,192.168.29.100 > /home/radmin/soft/weed.log &

 

 

 

4、创建并添加存储路径

创建两个路径:

/home/radmin/data/seaweedfs/volume1

/home/radmin/data/seaweedfs/volume2

 

 

 

添加存储节点目录。命令:

nohup /home/radmin/soft/weed volume -dir="/home/radmin/data/seaweedfs/volume1" -max=1000 -mserver="vm1:9333" -port=10001 whiteList=127.0.0.1,192.168.20.100 > /home/radmin/soft/volume1.log &

nohup /home/radmin/soft/weed volume -dir="/home/radmin/data/seaweedfs/volume2" -max=1000 -mserver="vm1:9333" -port=10002 whiteList=127.0.0.1,192.168.20.100 > /home/radmin/soft/volume2.log &

 

5、通过浏览器打开页面

地址:http://192.168.29.100:9333/

 

 

 

==文件存储==

1、首先获取一个文件id,以及volume服务的url

 

 

 

curl http://192.168.29.100:9333/dir/assign
{"fid":"3,01c226517c","url":"192.168.29.100:10001","publicUrl":"192.168.29.100:10001","count":1}

 

 

PS:关于文件ID

如上述的:3,01c226517c。可以通过/dir/assign来获取。

文件id分为3个部分。

第一部分:逗号左边的数字3表示volume id。是一个32位无符号整型

第二部分:逗号右边的01表示file key。是一个64为无符号整型

第三部分:剩下c226517c表示file cookie。是一个32位无符号整型,用来防止文件url被猜到。

 

 

2、根据url和fid来上传文件

 

 

 

curl -F file=@/home/radmin/soft/nice.jpg 192.168.29.100:10001/3,01c226517c
{"name":"nice.jpg","size":224273,"eTag":"96a0c7bbbceafae209d518bb6b192051"}

 

 

==文件获取==

1、首先要根据volume id查询访问volume的url

 

 

curl "http://192.168.29.100:9333/dir/lookup?volumeId=3"
{"volumeId":"3","locations":[{"url":"192.168.29.100:10001","publicUrl":"192.168.29.100:10001"}]}

 

 

2、通过url访问文件

http://192.168.29.100:10001/3,01c226517c

怎么样,看到个美女心情还是不错的吧。

 

 

 

==filer服务==

上面的一系列操作之后,文件是可以看到了,不过貌似还的通过文件id什么的搞,对于喜欢“路径及文件名”的人来说,实在是不爽。

filer服务就是为了解决这个问题而存在的。filer是一个在seaweedfs之上的服务,它保存路径与文件id的映射关系,最终还是使用文件id来访问文件。

 

1、filer配置文件样例

可以先运行以下命令来查看filer配置文件的样例。

命令:/home/radmin/soft/weed scaffold -config=filer

 

 

 

filer配置包括recursive_delete(是否递归删除),以及存储方式的选择。

filer服务支持多种数据库来保存路径与文件id的映射关系,包括:leveldb2、mysql、postgres、cassandra、redis、redis_cluster、etcd、tikv。

 

2、创建filer配置文件

我这里在weed同目录下创建了配置文件,并尝试使用mysql来保存映射关系。

文件名:filer.toml

路径:/home/radmin/soft

关键配置项:

 

另外,需要根据提示,在mysql中创建数据库及表。

数据库名字:seaweedfs

建表语句:

CREATE TABLE
IF
    NOT EXISTS filemeta (
    dirhash BIGINT COMMENT 'first 64 bits of MD5 hash value of directory field',
    NAME VARCHAR ( 1000 ) COMMENT 'directory or file name',
    DIRECTORY TEXT COMMENT 'full path to parent directory',
    meta LONGBLOB,
    PRIMARY KEY ( dirhash, NAME ) 
    ) DEFAULT CHARSET = utf8

 

 

3、启动filer服务

命令:/home/radmin/soft/weed filer -master="192.168.29.100:9333" -ip=192.168.29.100

后台启动:nohup /home/radmin/soft/weed filer -master="192.168.29.100:9333" -ip=192.168.29.100 > /home/radmin/soft/filer.log &

 

 

 

4、尝试通过路径来管理文件

上传:curl -F file=@/home/radmin/soft/nice2.jpg http://192.168.29.100:8888/beautygirl

注意:beautygirl是一个文件的名字,而不是文件夹的名字。

 

 

 

查看:curl "http://192.168.29.100:8888/beautygirl"

也可以通过浏览器查看:http://192.168.29.100:8888/beautygirl

 

删除文件

命令:curl -X DELETE "http://192.168.29.100:8888/beautygirl"

 

 

 

递归删除路径下所有的文件以及目录

命令:curl -X DELETE http://192.168.29.100:8888/path/to/dir?recursive=true

 

递归删除所有的文件以及目录,忽略递归错误

命令:curl -X DELETE http://192.168.29.100:8888/path/to/dir?recursive=true&ignoreRecursiveError=true

 

==目录挂载==

seaweedfs可以方便地挂载到本地,可以像普通文件一样操作其中的文件。

命令:/home/radmin/weed mount -filer=192.168.29.100:8888 -dir=/some/existing/dir -filer.path=/

 

==副本策略==

seaweedfs的副本机制是volume层面,而不是文件层面的。这意味着不同的节点存在相同的volume,其中的文件也是相同的。

volume启动时可以通过-dataCenter和-rack指定数据中心和机架。

seaweedfs的副本机制就是通过在不同的数据中心和机架创建相同的volume来实现的。

在master启动时可以指定副本的策略:

命令:/home/radmin/soft/weed master -defaultReplication=001

 

副本策略是xyz形式的数字,其含义如下:

x,y,z分别可以是0,1,2,因此有9种副本类型组合。每种副本类型都创建了x+y+z+1个文件。

 

==安全==

(未验证)

 

标签:filer,radmin,seaweedfs,192.168,学习,笔记,文件,home,29.100
来源: https://www.cnblogs.com/quchunhui/p/14086075.html