SeaweedFS深度解析(四):裸金属单机部署之配置文件启动master服务
#作者:闫乾苓
接上篇,链接: link
3.1.2.1以配置文件启动master服务
[master] 部分为基础配置
[master.replication]
treat_replication_as_minimums = false(直译:“将复制数当作最小值来对待”)
- 默认是 false,意思是复制策略(replication)要求的是精确的副本数,写入时必须满足该复制策略才算成功。
- 如果设置为 true,则把复制策略当作“最小副本数”来看待,只要达到这个数量就认为写入成功,可以比这个副本数多,但不会因缺少某些副本就拒绝写入。
- 如果是单机架单数据中心,且对数据安全要求非常高,可以保持默认 false
[master.maintenance]
scripts字段:维护脚本执行序列,每轮执行完上述所有维护命令后,休眠17 分钟,然后再次执行。这是个固定周期循环。
推荐启用方案(渐进式)
在生产环境中希望逐步启用自动维护机制,建议:
- 初期仅开启“安全操作”
推荐保留以下脚本:
scripts = """lockvolume.fix.replicationunlock
"""
- 这些操作是“非破坏性的修复型命令”;
- 不会引起数据再分布或删除;
- 可以提升集群健康度。
- 后期启用EC、balance、delete 等命令
前提是你了解EC 编码机制,并已开启volumeServer -enableErasureCoding=true:
scripts = """lockec.encode -fullPercent=95 -quietFor=1hec.rebuild -forceec.balance -forcevolume.fix.replicationunlock
"""
不要一开始就启用volume.deleteEmpty,因为该命令会删除已创建的volume。
问题:如果我设置了002的复制策略,volume 使用率超过95%,是否会自动转为纠删码(Erasure Coding)?
不会自动转换成EC(Erasure Coding)策略,除非该Volume 是专门为EC 创建的类型(volume id > 10000)。
原因详解:
ec.encode命令的作用
ec.encode -fullPercent=95 -quietFor=1h
这条命令的含义是:
- 查找当前使用率超过95%,并且在过去1 小时内没有写入操作的普通Volume;
- 将这些Volume 的内容编码为EC 分片格式,并迁移到新的EC Volumes 中;
- 原有Volume 转为只读,并逐步回收空间(不是立即删除);
- 前提:SeaweedFS 启用了EC 功能(volume 启动时使用-enableErasureCoding=true)。
注意:EC Volume 与复制策略互斥:
设置了replication = “002”(即每个数据块保留3个副本)表示使用副本机制;
-
EC(纠删码)是一种完全不同的数据冗余机制,不与副本共存;
-
EC 转换只对非副本类型的数据生效:
- SeaweedFS 不会自动对已有的002 副本Volume 执行ec.encode;
- 即使你写了ec.encode这段命令,它也会忽略已经使用副本存储的数据块
-
要启用EC 的前提:
推荐的做法(混合策略)
这样你可以在SeaweedFS 中实现: -
热数据三副本保护;
-
冷数据节省空间通过EC 编码(节省高达50–60% 存储空间);
[master.volume_growth]
控制当可写卷不足时系统如何自动创建新卷
配置参数解析
这些配置参数定义在 中的默认策略结构中,并在 中被加载到系统配置中。
copy_1 = 7(单副本策略)
当复制策略为单副本(如 “000”)时,系统会创建 7 个逻辑卷。由于是单副本,每个逻辑卷对应 1 个物理卷,所以总共创建 7 个物理卷。
copy_2 = 6(双副本策略)
当复制策略为双副本(如 “001” 或 “010”)时,系统会创建 6 个逻辑卷。由于是双副本,每个逻辑卷需要 2 个物理副本,所以总共创建 12 个物理卷。
copy_3 = 3(三副本策略)
当复制策略为三副本(如 “020”、“002”、“011”)时,系统会创建 3 个逻辑卷。由于是三副本,每个逻辑卷需要 3 个物理副本,所以总共创建 9 个物理卷。
copy_other = 1(其他副本数)
对于其他副本数配置,系统默认只创建 1 个逻辑卷。
threshold = 0.9(触发阈值)
当卷的使用率达到 90% 时,触发卷增长机制。
实际应用机制
卷增长的具体逻辑在 中实现,这个函数根据副本数量返回应该创建的逻辑卷数量。
系统会定期检查卷的状态,如 所示。当检测到可写卷不足或使用率超过阈值时,会触发自动增长。
配置的实际意义
这种设计的优势在于:
- 批量创建:避免频繁的单个卷创建操作
- 副本感知:根据不同的复制策略调整创建数量
- 资源平衡:通过阈值控制避免过度创建
- 可配置性:允许根据集群规模和使用模式调整参数
通过合理配置这些参数,可以在保证存储可用性的同时,优化资源利用率和系统性能。
Master服务启动时会按照如下顺序搜索toml配置文件:
".", "$HOME/.seaweedfs/", "/usr/local/etc/seaweedfs/", or "/etc/seaweedfs/"
使用了配置文件启动服务的命令非常简短:
/opt/seaweedfs/sbin/weed master
但生产环境更推荐使用systemd管理启动服务
vim /etc/systemd/system/weed-master.service[Unit]
Description=SeaweedFS Master Service
After=network.target[Service]
Type=simple
ExecStart=/opt/seaweedfs/sbin/weed master
Restart=on-failure
User=weed
LimitNOFILE=1048576
ExecReload=/bin/kill -HUP $MAINPID[Install]
WantedBy=multi-user.target
说明:
启动流程
# 加载服务配置
~# sudo systemctl daemon-reexec
~# systemctl daemon-reload# 启动并设置为开机启动
~# systemctl enable --now weed-master# 查看运行状态
~# sudo systemctl status weed-master