当前位置: 首页 > news >正文

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,或者其他值,需要考虑的因素:
  1. 磁盘空间利用率
  • 固定值设置:适合明确知道存储需求的场景
  • 自动计算:适合希望最大化磁盘利用率的场景
  1. 性能考虑
    内存使用
  • 每个 volume 需要维护索引文件在内存中
  • Volume 数量过多会增加内存消耗
  • 需要平衡存储容量和内存使用

I/O 性能

  • Volume 数量影响并发读写性能
  • 过少的 volume 可能成为性能瓶颈
  • 过多的 volume 可能增加管理开销
  1. 高可用性考虑
    复制和分布
  • 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/
在这里插入图片描述

http://www.dtcms.com/a/341158.html

相关文章:

  • Java 集合超详细教程
  • 循环神经网络(RNN)、LSTM 与 GRU (一)
  • 基于深度学习的订单簿异常交易检测与短期价格影响分析
  • 【深度学习】PyTorch中间层特征提取与可视化完整教程:从零开始掌握Hook机制与特征热力图
  • lua入门以及在Redis中的应用
  • 【ElasticSearch实用篇-03】QueryDsl高阶用法以及缓存机制
  • Java程序启动慢,DNS解析超时
  • 基于STM32的APP遥控视频水泵小车设计
  • K8S-Pod资源对象——标签
  • 【AI学习100天】Day08 使用Kimi每天问100个问题
  • 【指纹浏览器系列-绕过cdp检测】
  • 数据预处理:机器学习的 “数据整容术”
  • nginx-下载功能-状态统计-访问控制
  • 【数据结构】线性表——顺序表
  • 循环神经网络(RNN, Recurrent Neural Network)
  • Effective C++ 条款52:写了placement new也要写placement delete
  • 使用acme.sh自动申请AC证书,并配置自动续期,而且解决华为云支持问题,永久免费自动续期!
  • Spring Boot 定时任务与 xxl-job 灵活切换方案
  • 层在init中只为创建线性层,forward的对线性层中间加非线性运算。且分层定义是为了把原本一长个代码的初始化和运算放到一个组合中。
  • B站 韩顺平 笔记 (Day 24)
  • C++ std::optional 深度解析与实践指南
  • 当 AI 开始 “理解” 情绪:情感计算如何重塑人机交互的边界
  • linux报permission denied问题
  • Advanced Math Math Analysis |01 Limits, Continuous
  • uniapp打包成h5,本地服务器运行,路径报错问题
  • PyTorch API 4
  • 使数组k递增的最少操作次数
  • 路由器的NAT类型
  • 确保测试环境一致性与稳定性 5大策略
  • AI 效应: GPT-6,“用户真正想要的是记忆”