在一个大型的集群中,增加/下线/替换Volume服务器都是很常见的操作。这些操作会带来volume副本的丢失,或者Volume副本数量的不平衡。
1. 修复丢失的Volume
当某个Volume server挂掉时,其中的volume副本丢失,其他在线的Volume副本可以提供只读的服务。
修复的方式是找到一个健康的Volume副本,把它复制到其他的Volume server,当满足replication的要求时(如001,同一个机架不同服务器有两个副本),volume id会被标记为可写的状态。在weed shell
中执行volume.fix.replication
可以实现这个效果。可以启动一个crontab job周期性的运行volume.fix.replication
来保证SeaweedFS的健康运行。
2. 平衡Volumes
在weed shell
中执行volume.balance
会生成一个平衡计划,volume.balance -force
会执行平衡计划,移动Volumes。
3. 配置Volume管理脚本
在Master配置文件(master.toml
)中,在master.maintenance
部分可以配置scripts
,如:
[master.maintenance]
# periodically run these scripts are the same as running them from 'weed shell'
scripts = """
ec.encode -fullPercent=95 -quietFor=1h
ec.rebuild -force
ec.balance -force
volume.balance -force
volume.fix.replication
"""
sleep_minutes = 17 # sleep minutes between each script execution
每17分钟,执行一下该脚本,该脚本可修复和平衡Volume。