SeaweedFS 全解析:从入门到集群部署,横向对比与核心原理一网打尽(中)
#作者:闫乾苓
文章目录
- 3、裸金属单机和集群部署
-
- 3.1 裸金属单机部署
-
- 3.1.1安装 SeaweedFS
- 3.1.2 以Master模式启动
- 3.1.3 以volume服务模式启动
- 3.1.4 测试 SeaweedFS
- 3.1.5 快速启动多个服务
- 3.2 裸金属集群部署
-
- 3.2.1前提条件
- 3.2.2 设置对象存储
3、裸金属单机和集群部署
3.1 裸金属单机部署
3.1.1安装 SeaweedFS
从https://github.com/seaweedfs/seaweedfs/releases下载最新的官方版本。
-rw-r–r–. 1 root root 44870713 5月 26 10:17 linux_amd64_full.tar.gz
解压下载的文件。你只会找到一个可执行文件,在大多数系统上是“weed”,在 Windows 上是“weed.exe”。
建议为服务创建最小权限的专用系统账户,以遵循最小权限原则,避免因使用 root 用户带来过大的安全风险。
~# useradd weed
~# passwd weed
为 seaweedfs创建相关的目录
~# mkdir /opt/seaweedfs/{sbin,master-data}
将文件“weed”放到/opt/seaweedfs/sbin/下, 并设置weed账户的权限
~# mv weed /opt/seaweedfs/sbin
~# chown -R weed:weed /opt/seaweedfs/
使用以下命令查看下载安装是否正常。
~# /opt/seaweedfs/sbin/weed -h
3.1.2 以Master模式启动
启动方法:
~# su - weed
~$ ./weed master -mdir=“.” -ip=xxx.xxx.xxx.xxx
mdir: 用于配置一个文件夹,保存生成的卷 ID 的最大值。
IP: 指定服务启动后网络监听端口绑定的IP,不指定默认会绑定127.0.0.1和自动探测到的IP。
示例:
~$ /opt/seaweedfs/sbin/weed master -mdir=“/opt/seaweedfs/master-data” -ip=“192.168.61.71”
查看监听的端口
$ ss -ntlp |grep 9333
LISTEN 0 4096 127.0.0.1:9333 0.0.0.0:* users:((“weed”,pid=2183,fd=9))
LISTEN 0 4096 192.168.61.71:9333 0.0.0.0:* users:((“weed”,pid=2183,fd=8))
LISTEN 0 4096 127.0.0.1:19333 0.0.0.0:* users:((“weed”,pid=2183,fd=12))
LISTEN 0 4096 192.168.61.71:19333 0.0.0.0:* users:((“weed”,pid=2183,fd=11))
3.1.3 以volume服务模式启动
通常,卷服务器分布在不同的计算机上。它们可能拥有不同的磁盘空间,甚至不同的操作系统。
查看帮助:
./weed volume -h
命令格式:
./weed volume -max=100 -mserver=“localhost:9333” -dir=“./data”
-max:
- 参数指定了该 volume 服务器可以创建的最大 volume 数量,每个volume的默认大小为30GB。如果指定为0,seaweedfs根据指定的磁盘空间自动计算volume的数量。如果不指定该参数值,默认为:8
- 指定max为0,或者其他值,需要考虑的因素:
- 磁盘空间利用率
- 固定值设置:适合明确知道存储需求的场景
- 自动计算:适合希望最大化磁盘利用率的场景
- 性能考虑
内存使用
- 每个 volume 需要维护索引文件在内存中
- Volume 数量过多会增加内存消耗
- 需要平衡存储容量和内存使用
I/O 性能 - Volume 数量影响并发读写性能
- 过少的 volume 可能成为性能瓶颈
- 过多的 volume 可能增加管理开销
- 高可用性考虑
复制和分布
- Volume 数量影响数据分布策略
- 需要考虑跨机器、跨机架的分布
- 影响故障恢复能力
-mserver:指定Master服务器的IP和端口
-dir:指定数据的存储目录
如果在同一台服务器上同时部署Master,volume服务,请为volume服务指定存储数据的专用目录,建议使用单独的磁盘,以提高IO性能。
~# mkdir -p /data/seaweedfs/vol_data
~# chown -R weed:weed /data/seaweedfs/vol_data
启动volume服务示例:
/opt/seaweedfs/sbin/weed volume -max=0 -mserver=“192.168.61.71:9333” -dir=“/data/seaweedfs/vol_data/”
3.1.4 测试 SeaweedFS
可用使用如下命令将大量文件导入系统,此命令将递归上传所有文件
./weed upload -dir=“/some/big/folder”
或者,您可以指定要包含的文件。
./weed upload -dir=“/some/big/folder” -include=*.txt
上传文件示例1:
~$ /opt/seaweedfs/sbin/weed upload -dir=\"/home/weed/seaweedfs_upload_test\"[{\"fileName\":\"erlang-23.3.4.18-1.el7.x86_64.rpm\",\"url\":\"192.168.61.71:8080/5,52726c8683\",\"fid\":\"5,52726c8683\",\"size\":20357484}][{\"fileName\":\"grafana-11.4.0.linux-amd64.tar.gz\",\"url\":\"192.168.61.71:8080/5,5811f8e730\",\"fid\":\"5,5811f8e730\",\"size\":132819399}][{\"fileName\":\"jdk-8u421-linux-x64.tar.gz\",\"url\":\"192.168.61.71:8080/5,795eb55537\",\"fid\":\"5,795eb55537\",\"size\":146729827}]
上传文件示例2:
$ /opt/seaweedfs/sbin/weed upload -dir=\"/home/weed/seaweedfs_upload_test\" -include=*.txt[{\"fileName\":\"test.txt\",\"url\":\"192.168.61.71:8080/5,9df8d1dbe5\",\"fid\":\"5,9df8d1dbe5\",\"size\":20357484}]
3.1.5 快速启动多个服务
(建议在开发或测试环境使用,不推荐在生成环境使用)
执行以下命令即可运行一个主服务器、一个卷服务器、一个文件服务器和一个 S3 API 服务器。
~$ /opt/seaweedfs/sbin/weed server -filer -s3 -ip=\"192.168.61.71\" -volume.max=0 -master.volumeSizeLimitMB=1024 -dir=\"/data/seaweedfs/vol_data/\"
weed server 是 SeaweedFS 的一体化启动模式,这个命令可以同时启动 master、volume、filer 和 S3 网关服务。
参数详解
-filer
个参数启用 filer 服务器,用于提供文件系统接口和元数据管理。
-s3
启用 S3 兼容的 API 网关,允许通过 S3 协议访问 SeaweedFS。
-ip=xx.xx.xx.xx
定服务器的 IP 地址,用作服务标识符。如果不指定,系统会使用 util.DetectedHostAddress() 自动检测。
-volume.max=0
设置 volume 服务器的最大 volume 数量为 0,这意味着系统会根据可用磁盘空间自动计算最大 volume 数量。
-master.volumeSizeLimitMB=1024
设置单个 volume 的大小限制为 1024MB(1GB),而不是默认的 30GB
3.2 裸金属集群部署
生成环境一般使用多个服务器组成的集群,请按以下步骤自下而上地逐一进行设置。
- 设置对象存储
- 设置主控
- 添加卷服务器
- 设置文件存储
- 选择文件存储
- 设置文件管理器
- 然后,选择要设置的组件
- 设置 S3
- 设置 FUSE 安装座
- 集群维护
3.2.1前提条件
确保防火墙以下端口已放开
如果有个多宿主服务器(多个 IP 地址和接口),请确保 SeaweedFS 使用正确的 IP 进行集群通信。请附加 -ip=xx.xx.xx.xx以指定适当的地址。
如果希望使用不同的 IP 地址来提供面向用户的服务,那么使用-ip.bind=yy.yy.yy.yy进行设置。
3.2.2 设置对象存储
3.2.2.1 启动Master服务器
使用一个Master
如果有两台机器,就无法达成共识。所以不必设置多个主服务器。
即使对于大型集群,只有一个主服务器也完全没问题。主服务器的负载非常轻,不太可能宕机。由于它只保存从卷服务器收集的软状态,因此您可以随时重启它。
设置多个Master启动
Seaweedfs默认为前台启动,建议设置为后台启动运行。
所有master节点创建日志目录
~$ mkdir /opt/seaweedfs/master-data/logs~$ chown -R /opt/seaweedfs/master-data/logs
比如3台服务器上运行master
Master1(192.168.61.71):~$ nohup /opt/seaweedfs/sbin/weed master -mdir=\"/opt/seaweedfs/master-data\" --peers=192.168.61.71:9333,192.168.61.72:9333,192.168.61.73:9333 -ip=192.168.61.71 >> /opt/seaweedfs/master-data/logs/master.log 2>&1 &Master2(192.168.61.72):~$ nohup /opt/seaweedfs/sbin/weed master -mdir=\"/opt/seaweedfs/master-data\" --peers=192.168.61.71:9333,192.168.61.72:9333,192.168.61.73:9333 -ip=192.168.61.72 >> /opt/seaweedfs/master-data/logs/master.log 2>&1 &Master3(192.168.61.73):~$ nohup /opt/seaweedfs/sbin/weed master -mdir=\"/opt/seaweedfs/master-data\" --peers=192.168.61.71:9333,192.168.61.72:9333,192.168.61.73:9333 -ip=192.168.61.73 >> /opt/seaweedfs/master-data/logs/master.log 2>&1 &
浏览器访问:
3.2.2.2 启动volume服务器
对于只有一个磁盘的机器使用,运行此命令进行设置:
weed volume -mserver=ip1:9333,ip2:9333,ip3:9333 -dataCenter=dc1 -rack=rack1 -dir=/data/seaweedfs/volume -ip=xxx.xxx.xxx.xxx -max=0
对于具有多个磁盘的机器
配置-dir为以逗号分隔的目录列表,并设置-max相应的目录,假设它们/data/seaweedfs/volume[x]位于不同的磁盘上。
请勿在同一磁盘上使用多个目录。自动卷计数限制会使容量计算翻倍。
weed volume -mserver=ip1:9333,ip2:9333,ip3:9333 -dataCenter=dc1 -rack=rack1 -ip=xxx.xxx.xxx.xxx -dir=/data/seaweedfs/volume1,/data/seaweedfs/volume2,/data/seaweedfs/volume3 -max=0,0,0
强烈建议在同一服务器不同的端口上创建多个卷服务器。这样可以更轻松地更换磁盘。
背后逻辑(为何这么做)
SeaweedFS 通常以 Volume Server 负责存储,Master 只负责管理元数据。在实际部署中:
如果一个节点挂多块硬盘(例如 /mnt/disk1, /mnt/disk2),你有两个选择:
示例部署图(多服务器,多磁盘,多端口)
物理服务器 IP:192.168.61.71,192.168.61.72,192.168.61.73
挂载磁盘:
/hdd1 -> 8081
/hdd2 -> 8082
每个磁盘绑定一个 volume server 实例:
192.168.61.71:nohup /opt/seaweedfs/sbin/weed volume -mserver=192.168.61.71:9333,192.168.61.72:9333,192.168.61.73:9333 -dataCenter=dc1 -rack=rack1 -ip=192.168.61.71 -dir=/hdd1 -port=8081 -max=0 >> /opt/seaweedfs/volume/logs/volume_8081.log 2>&1 &nohup /opt/seaweedfs/sbin/weed volume -mserver=192.168.61.71:9333,192.168.61.72:9333,192.168.61.73:9333 -dataCenter=dc1 -rack=rack1 -ip=192.168.61.71 -dir=/hdd2 -port=8082 -max=0 >> /opt/seaweedfs/volume/logs/volume_8082.log 2>&1 &192.168.61.72:nohup /opt/seaweedfs/sbin/weed volume -mserver=192.168.61.71:9333,192.168.61.72:9333,192.168.61.73:9333 -dataCenter=dc1 -rack=rack1 -ip=192.168.61.72 -dir=/hdd1 -port=8081 -max=0 >> /opt/seaweedfs/volume/logs/volume_8081.log 2>&1 &nohup /opt/seaweedfs/sbin/weed volume -mserver=192.168.61.71:9333,192.168.61.72:9333,192.168.61.73:9333 -dataCenter=dc1 -rack=rack1 -ip=192.168.61.72 -dir=/hdd2 -port=8082 -max=0 >> /opt/seaweedfs/volume/logs/volume_8082.log 2>&1 &192.168.61.73:nohup /opt/seaweedfs/sbin/weed volume -mserver=192.168.61.71:9333,192.168.61.72:9333,192.168.61.73:9333 -dataCenter=dc1 -rack=rack1 -ip=192.168.61.73 -dir=/hdd1 -port=8081 -max=0 >> /opt/seaweedfs/volume/logs/volume_8081.log 2>&1 &nohup /opt/seaweedfs/sbin/weed volume -mserver=192.168.61.71:9333,192.168.61.72:9333,192.168.61.73:9333 -dataCenter=dc1 -rack=rack1 -ip=192.168.61.73 -dir=/hdd2 -port=8082 -max=0 >> /opt/seaweedfs/volume/logs/volume_8082.log 2>&1 &
浏览器访问http://192.168.61.71:9333/