seaweedfs学习笔记
作者:互联网
==背景==
项目是私有化部署,有一些图片及文件需要存储,数量不多,单文件大小也不是很大,
目前只能放在linux下的绝对路径下面,有必要研究一下文件系统。
想找一个简单(不需要依赖其他组件,安装容易)易用(使用起来简单)的分布式文件系统的技术,
朋友介绍了seaweedfs这个结束,过来研究一下,并记录一下笔记。
==环境==
Linux CentOS7 (虚拟机)
==参考博客==
在整个验证之前,我看了两个比较好的博客。
https://www.cnblogs.com/townsend/p/11315348.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 在相同机架,不同服务器的副本数量
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