SeaweedFS深度解析(五):裸金属集群部署(上)
接上篇《SeaweedFS深度解析(四):裸金属单机部署之配置文件启动master服务》:链接: link
#作者:闫乾苓
文章目录
- 3.1.3 以volume服务模式启动
- 3.1.4 测试 SeaweedFS
- 3.1.5 快速启动多个服务
- 3.2 裸金属集群部署
- 3.2.1前提条件
- 3.2.2 设置对象存储
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/"
生成环境建议配置systemd管理的服务
vim /etc/systemd/system/weed-volume.service
[Unit]
Description=SeaweedFS Volume Server
After=network.target[Service]
Type=simple
ExecStart=/opt/seaweedfs/sbin/weed volume -max=0 -mserver="192.168.61.21:9333" -dir="/data/seaweedfs/volume1"
Restart=on-failure
User=weed
LimitNOFILE=1048576
ExecReload=/bin/kill -HUP $MAINPID[Install]
WantedBy=multi-user.target
启动服务:
~# systemctl daemon-reload
~# systemctl enable --now weed-volume
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/