3.58
,当前服务器芯片为 x86,安装包为:seaweedfs-3.58-amd64.tar.gz
,对于 ARM64 环境请安装带 aarch64
标识的版本。当前安装 SeaweedFS 的架构是每个机器一个 master 和多个 volume,不属于严格的分布式方式安装。如果是多个机器安装则每个机器部署一套独立的即可,在存储时采用负载均衡的方式存储到每一个独立的节点。纯分布式的安装是指部署多个 master,通常是奇数个节点,例如 3 个或 5 个,节点之间采用 Raft 协议选举一个 Leader 节点,然后将所有机器的 volume 服务都注册到这一批 masters 上面从而形成集群。
将 SeaweedFS 部署包解压并执行安装:
# AMD64 芯片执行
tar -xvzf seaweedfs-3.58-amd64.tar.gz
cd seaweedfs-3.58-amd64
# ARM64 芯片执行
tar -xvzf seaweedfs-3.58-aarch64.tar.gz
cd seaweedfs-3.58-aarch64
然后执行安装:
./install.sh
安装过程会提示是否开启 JWT 认证,如果开启请输入 Y
,否则请输入 n
。开启 JWT 认证后访问 volume 服务进行上传、更新以及删除文件时需要添加 JWT Header 才可以正常操作,但是读取不需要认证。
执行脚本后就将二进制文件以及服务文件安装到系统中了
SeaweedFS 的配置文件目录在:/etc/seaweedfs
,接下来我们需要将配置创建到这个目录下面。
每个磁盘挂载的目录需要对应运行一个 volume 的服务,这些服务都将指向同一个 master,当前节点有两块硬盘,分别挂载在 /data1 和 /data2 两个目录,我们分别创建 master 和 volume 的数据目录:
# 创建 master 数据目录
mkdir -p /data/seaweedfs/master
# 创建第一个 volume 的数据目录
mkdir -p /data1/seaweedfs/volume
# 创建第二个 volume 的数据目录
mkdir -p /data2/seaweedfs/volume
然后我们创建配置文件,操作如下:
# 创建 SeaweedFS master 启动参数
# 注意都是多行命令
cat > /etc/seaweedfs/master <<EOF
ARG='master -mdir /data/seaweedfs/master --port 9333'
EOF
# 创建 SeaweedFS 第一个 volume 的配置文件, IP 修改为当前机器 IP
cat > /etc/seaweedfs/volume1 <<EOF
ARG='volume -dir=/data1/seaweedfs/volume -mserver=192.168.1.1:9333 -ip 192.168.1.1 -port 9080 -port.grpc 19080 -publicUrl http://192.168.1.1:9080/ -max=128'
EOF
# 创建 SeaweedFS 第二个 volume 的配置文件
# 注意如果是在同一个节点部署多个 volume server,需要修改 port, port.gprc 以及 publicUrl 中的端口,避免端口冲突
cat > /etc/seaweedfs/volume2 <<EOF
ARG='volume -dir=/data2/seaweedfs/volume -mserver=192.168.1.1:9333 -ip 192.168.1.1 -port 9081 -port.grpc 19081 -publicUrl http://192.168.1.1:9081/ -max=128'
EOF
上面通常 -ip 和 -publicUrl 指定的 IP 地址是相同的,如果在复杂的网络环境下比如过了路由做端口映射等场景,需要根据实际要访问的 IP 和端口配置 -publicUrl 参数。
另外上面指定卷的个数是 128 个,实际情况下应该按照盘实际的存储大小来指定,按照每个卷 30GB
来计算整体卷的个数,然后再配合上 TTL 和 collection 等参数不同的冗余情况进行设置,可以简单按照下面的公式来初步估算。
设磁盘大小为:S,计算时单位要换算为 GB,卷的个数设置为 M,则计算如下:
比如磁盘大小是 4T,则得到 N = 4096/30 = 137,因为 137 小于 1000,则设置卷大小为 1000 个。再比如磁盘大小是 50T,则得到 N = 1707,由于 1707 大于 1000,则设置卷大小为 1707。
最后如果安装时开启了 JWT 认证,则需要编辑配置文件 /etc/seaweedfs/security.toml
设置 JWT 的密钥和过期时间:
[jwt.signing]
key = "8336959f80f7aacc"
expires_after_seconds = 60 # seconds
生成随机密钥可以使用下面的命令:
# 生成 8 字节密钥,16 进制表示的长度为 16 位
openssl rand -hex 8
启动命令参数和我们刚创建的配置文件名称保持一致,即:
systemctl start weed@{配置文件名}
当前配置了 1 个 master 和 2 个 volume,具体服务启动如下:
systemctl start weedfs@master
systemctl start weedfs@volume1
systemctl start weedfs@volume2
启动后查看服务状态:
systemctl status weedfs@master
systemctl status weedfs@volume1
systemctl status weedfs@volume2
如果需要开机启动可以设置:
systemctl enable weedfs@master
systemctl enable weedfs@volume1
systemctl enable weedfs@volume2
查看服务日志:
journalctl -u weedfs@master
journalctl -u weedfs@volume1
journalctl -u weedfs@volume2
如果有清理 SeaweedFS 历史文件的需要,比如磁盘满了但是卷的 TTL 还没到期或者没有设置 TTL 的情况,这时候想快速释放一部分空间可以使用工具 seaweedfs-historical-file-cleanup
删除指定天数之前的数据,清理操作执行完毕并且等待 15 分钟后磁盘空间即可释放。
/etc/seaweedfs
中的参数配置错误会导致无法启动,注意结合报错仔细检查配置是否有问题。