目录
SeaWeedFS简介
Seaweedfs是一个简单,高扩展性的分布式文件系统,它的两个目标分别是:存储数十亿级的文件,快速响应文件。Seaweedfs选择以键值对(key->file)的实现方式,这有点像“NoSQL",你可以陈其为”NoFS“。
Seaweedfs的中心节点(center master)并不会管理所有文件的元数据而仅仅管理文件卷(file volmume),文件及其元数据的管理是由volume server实现的。这可以缓解center master的并发压力,并且将文件元数据分配到volume server可以实现更快的文件访问(只需一次磁盘读取操作)。
SeaWeedfs安装与启动
Linux安装SeaWeedFS
mkdir -p /myapp/seaweedfs
cd /myapp/seaweedfs
访问Releases · seaweedfs/seaweedfs · GitHub下载linux_amd64.tar.gz文件,使用XShell工具下载到/myapp/seaweedfs路径。
解压tar.gz 文件:
tar -xzvf linux_amd64.tar.gz
生成一个weed可执行文件,用于操作master和volume等。 创建数据卷根目录以及各个数据卷目录、master数据目录和filter目录
mkdir -p /myapp/seaweedfs/data/master
mkdir -p /myapp/seaweedfs/data/vola
mkdir -p /myapp/seaweedfs/data/volb
mkdir -p /myapp/seaweedfs/data/volc
mkdir -p /myapp/seaweedfs/data/vold
mkdir -p /data/weedfs_data/filer
SeaWeedfs启动
启动SeaWeedfs可使用nohup命令进行后台运行并且将日志输出到文件中。
启动mster,-defaultReplication="001"表示相同机架存储一份副本,而且如果一个卷服务器没在相同的rack开启一个vol就会报错:
nohup ./weed -v=3 master -mdir=/myapp/seaweedfs/data/master -defaultReplication="001" >> /myapp/seaweedfs/data/master/wdfsmaster.log &
启动volume,两个卷服务器放在同一个机架:
nohup ./weed -v=3 volume -port=8081 -dir=/myapp/seaweedfs/data/vola -mserver=localhost:9333 -rack=rack1 >> /myapp/seaweedfs/data/vola/wefsvola.log &
nohup ./weed -v=3 volume -port=8082 -dir=/myapp/seaweedfs/data/volb -mserver=localhost:9333 -rack=rack2 >> /myapp/seaweedfs/data/volb/wefsvolb.log &
nohup ./weed -v=3 volume -port=8083 -dir=/myapp/seaweedfs/data/volc -mserver=localhost:9333 -rack=rack3 >> /myapp/seaweedfs/data/volc/wefsvolc.log &
nohup ./weed -v=3 volume -port=8084 -dir=/myapp/seaweedfs/data/vold -mserver=localhost:9333 -rack=rack1 >> /myapp/seaweedfs/data/vold/wefsvold.log &
开启filer服务器:
nohup ./weed -v=3 filer -port=8888 -master=localhost:9333 >> /myapp/seaweedfs/data/filer/filer.log &
开启挂载服务器:
nohup ./weed mount -filer=localhost:8888 -dir=/myapp/seaweedfs/data/filermount/data -filer.path=/ >> /myapp/seaweedfs/data/filermount/wefsmount.log &
SeaWeedfs的master模式操作
上传下载文件
获取master委派的fid和publicUrl,请求master,利用curl来获取fid是什么,设置备份属性,来进行上传文件:
curl http://localhost:9333/dir/assign?replication=001
结果显示:
可通过获取的fid进行上传文件,file指定文件的位置,通过fid和url来进行上传文件,文件上传到vola和vold:
curl -F file=@./666.txt http://localhost:8081/2,01ddbfaf58c1
通过wget下载文件,路径2,01ddbfaf58c1是获取到的fid
wget http://localhost:8081/2,01ddbfaf58c1
所在目录会出现下载的文件,结果显示:
上传文件可供选择的参数:
SeaWeedfs的filer模式
Filer模式上传文件
Filer模式上传文件原理:
filer服务器默认端口是8888,上传大文件filer服务器先把大文件分成一个一个大约5m的小文件,然后通过master主服务器获取小文件的fid和对应的卷服务器,每一个fid对应着目录,然后把小文件存到对应的卷服务器上。
filer模式通过http请求上传文件,指定文件的目录是test。上传一个500M+的大文件:
访问地址ip:8888/test可以进入Filer可视化界面可以看到上传的文件:
filer模式查看大文件的chunks,可以看到分片的具体信息:
Filer模式下载文件:
filer模式下载文件原理:
用户先通过如http://ip:8888/test/test.md 这样的请求去请求文件,然后filer服务器拿到对应的文件目录,去请求master服务器,解析文件目录拿到对应的所有分片的fid,每个分片有offset,master将每个分片合成一个大文件再返回给用户。
发送如http://ip:8888/test/test.txt 这样以目录形式的http请求就可获得文件信息:
Filer模式删除文件:
filer模式删除文件原理:
-
删除文件只需要指定指定文件路径使用delete请求删除即可,并且filermount挂载的文件也会被删除,但是卷服务器里面的数据是被逻辑删除的,真实数据还没有进行删除,要进行清除回收站才能完成磁盘删除。
-
目前,垃圾收集在 master 中被硬编码为每 15 分钟运行一次。
-
如果您的系统有多次删除,被删除文件的磁盘空间不会被同步回收。有一个后台作业来检查卷磁盘使用情况。如果空白空间超过阈值,默认为 0.3,即 30%,则真空作业将使卷只读,创建仅包含现有文件的新卷,并打开新卷。
Delete请求删除:
清空回收站:
Filer模式更改文件:
更改文件里面的内容:
只需要post相同文件名的文件就能实现文件更改,并且同步到filermount目录和卷服务器。
Psot请求更改文件数据:
移动文件和目录:
POST请求: http://ip:8888/path/to/dst_file?mv.from=/path/to/src_file
Filer模式append追加文件:
Filer模式Append文件机制 相当于将一个文件里面的主句追加到另一个文件尾部,如果目标文件不存在就自动创建,并且同步到filermount目录和卷服务器,属性加上op=append。
Post请求append文件:
Filer模式查看目录下的文件列表
curl -H "Accept: application/json" http://ip:8888/test/?pretty=y
或者利用参数条件查询,支持通配符模糊查询:
curl -H "Accept: application/json"
"http://ip:8888/javascript/?pretty=y&lastFileName=jquery-2.1.3.min.js&limit=2"
Filer模式filermount挂载机制:
-
Filermount里面的data目录挂载了所有通过filer模式上传的文件,开启filer,mount,volumeServer这三个服务就能实现mount里面的挂载数据与卷服务器里的数据同步。也就是说直接往mount传文件再开启卷服务器也能实现数据同步。
-
任何通过上传,下载,更改,删除的操作都能实现mount的同步更新。
-
不开启mount服务器也能使用filer模式。