seaweedfs可以依赖FUSE 文件系统,将Filer服务当成目录,挂载到指定的系统路径下,这样就可以使用基础系统命令对文件进行touch、cp、rm、mv等操作了。同样,在JAVA程序中也像操作本地目录一样对文件进行操作,文件本身的fid、分布式存储相关信息,就隐藏起来了。
一、 安装FUSE
linux(CentOS 7),直接yum 安装即可
yum install -y fuse
...
Installed:
fuse.x86_64 0:2.9.2-11.el7
Complete!
MacOS,需要安装OSXFUSE,官网地址:https://osxfuse.github.io
下载后直接安装即可使用。
二、 启动Seaweed相关基础服务
- master
#start_master.sh
#!/bin/bash
nohup /seaweedfs/sbin/weed master -defaultReplication=000 -mdir=seaweedfs/data/master -port=9333 -ip=127.0.0.1 -peers=127.0.0.1:9333 > seaweedfs/logs/master.log 2>&1 &
- volume
#start_volume.sh
#!/bin/bash
nohup /seaweedfs/sbin/weed volume -dataCenter=dataCenter1 -rack=rack1 -dir=/seaweedfs/data/volume -ip=127.0.0.1 -port=9040 -max=1 -mserver=127.0.0.1:9333 > /seaweedfs/logs/volume.log 2>&1 &
- filer
#start_filer.sh
#!/bin/bash
nohup /seaweedfs/sbin/weed filer -master=127.0.0.1:9333 -ip=127.0.0.1 -port=8888 -defaultReplicaPlacement=000 > /seaweedfs/logs/filer.log 2>&1 &
三、启动mount
#start_mount.sh
#!/bin/bash
nohup /seaweedfs/sbin/weed mount -filer=127.0.0.1:8888 -dir=/seaweedfs/mount -filer.path=/filer/mount/ > /seaweedfs/logs/mount.log 2>&1 &
注意观察日志是否有异常。
-dir:需要事先创建一个空目录,用于挂载
-filer.path: 指定filer的路径,完整挂载可以写“/”,也可以指定一个filer路径
四、取消挂载
上一次挂载没有清理完成,有可能会导致重新挂载失败,顺序尝试以下命令,直到生效为止。
// on mac
sudo umount /the/mounted/dir
diskutil unmount force /the/mounted/dir
sudo umount -f /the/mounted/dir
sudo umount -l /the/mounted/dir
// on linux
sudo umount -f /the/mounted/dir
sudo umount -l /the/mounted/dir
官网地址:https://github.com/chrislusf/seaweedfs/wiki/FUSE-Mount
注意:
- 有时候seaweed跟挂载目录并不在一个服务器上,则需要保证目录所在服务器可以访问seaweed服务器的8888端口和18888端口,看日志实际RPC调用是走的18888端口。
- 尽量保证两个节点的weed版本一致。
- MacOS和CentOS的架构不同,如果把服务端的weed直接拷贝到mac上执行是肯定会报错的,需要在官网下载对应版本(CentOS 使用Linux_amd64,MacOS使用darwin_amd64)