SeaweedFS简单部署
seaweedfs是一个开源的’文件服务器‘(我只能这样形容了,有点类似数据库),项目在GitHub上有仓库。根据项目介绍它的性能非常不错,今天我们就来尝试部署一下。
系统我这里使用Debian11 bullseye,安装为VirtualBox虚拟机,宿主为Windows10。你问为什么不HyperV?HyperV爆炸的时候连带橄榄了Docker的HyperV后端,你说我敢不敢用了?windows也是可以部署的,部署的步骤也非常简单,但是要想真正玩透还是需要一点时间的。
首先就是把二进制文件下载到再解压到你想要的位置,由于我是想让seaweedfs独占整个虚拟机,所以我使用 chmod 777 weed 授权seaweedfs的二进制文件。注意不要随便给任何程序777的权限,可以 +x 或者755。
在运行之前我们先来看一下seaweedfs的三个部分,master server、volume server和filer。
master server的用途是追踪每一个volume server中每个volume(“卷”)的位置,有点类似网络中的DNS服务器。volume的信息是动态更新的,不会长期储存。master server可以部署到不同机器上并集群,主要master server通过选举产生(有mongodb那味了),如需集群需要master server的个数为奇数以获得最佳保障。
volume server则用于管理自己所有的volume,volume server可以部署到不同机器上并连接到同一个(集群的也可)master server来统一访问。
filer则比较类似API。volume中的文件需要通过文件id来直接访问而不是文件名,这有时会带来一些麻烦,因为文件id远没有文件名好记。这时filer让这一切变得更简单,允许用户以类似访问真正的文件系统一样使用目录和文件名访问文件。filer也可以集群,或者说水平扩展以减轻单个filer负载。
接下来就是分别启动这些服务了,首先启动master server
./weed master
对,就这么简单,如果你想要稍微设置一点那可以添加下面的参数。

然后是volume server

有了这两个服务,就可以开始往里面倒点文件了,使用 ./weed upload -dir=<目标文件路径> 来往里面添加文件,可以使用 -mserver <string> 来指定master server。
如何访问文件呢?在upload之后会返回导入文件的一些信息,比如这个返回

然后我们就可以通过访问提供的url来访问文件。注意这里是访问volume server而不是master server。
同样你也可以通过http访问volume server发送GET等请求来操作文件,最简单的方式是使用Postman,或者它的开源替代Postwoman(现已更名Hoppscotch)


filer的设置略复杂,需要用到一个数据库来存储id和文件路径的映射。Cassandra, MySQL, Postgres, Redis, SQLite等都可以使用。在 ./weed scaffold -config=filer 中还可以看到 leveldb、rocksdb、hbase、etcd、mongodb的示例。这里由于文档给的不是很详细,我就不使用filer来转换id到路径了,因为对于我的应用来说本来就会有一个API(还有点像兼容层)来处理这些访问,再加一层导致的访问延迟*可能*会更大。在这里我就不搞这玩意了。

