happyfish100 / fastdfs

FastDFS is an open source high performance distributed file system (DFS). It's major functions include: file storing, file syncing and file accessing, and design for high capacity and load balance. Wechat/Weixin public account (Chinese Language): fastdfs
GNU General Public License v3.0
8.97k stars 1.98k forks source link

多个store_path时的分配问题及阈值问题 #660

Open lystormenvoy opened 11 months ago

lystormenvoy commented 11 months ago

多个store_path时的分配问题及阈值问题

版本6.9.4

配置类似:

store_path_count=4
store_path0=/nfs1
store_path1=/nfs2
store_path2=/nfs3
store_path3=/nfs4

问题1: 阈值是10%,不同path的容量不同。 按目前fastdfs的设计,是轮流传到4个store_path里。 假设 store_path1 的容量接近阈值了,比如差1GB到达阈值,那么我在上传2GB的文件的时候,会因为超过阈值而中断上传,报错Connection reset by peer: socket write error。但是当我后续再上传其他文件,又轮到传store_path1的时候,还是循环出现这样的问题。不知道是否能有什么配置或机制,让 store_path 在达到阈值后暂时被剔除出可用store_path里。

[2023-09-22 11:55:57] ERROR - file: storage_service.c, line: 4377, no space to upload file, free space: 2192 MB is too small, file bytes: 915535261, reserved space: 2047 MB(10.00%)
[2023-09-22 11:55:58] ERROR - file: storage_service.c, line: 8155, client ip: 192.168.22.38, unkown cmd: 1

image

问题2: 阈值是10%,不同path的容量不同。 按目前fastdfs的设计,是轮流传到4个store_path里。 假设store_path1的容量达到或超过阈值了,那么目前fastdfs永远都传store_path0,直到store_path0达到阈值,才会传到store_path2或store_path3里。是否有什么配置项或机制可以优化这种情况呢?

heshc commented 9 months ago

阈值可以配置具体大小值,不一定非得配置百分比

lystormenvoy commented 9 months ago

阈值可以配置具体大小值,不一定非得配置百分比

这个问题应该和配置类型无关。

我配置阈值是1G的话,这时候剩余1.5G,但传一个2G的文件,不也是有问题?

heshc commented 9 months ago

1、配置项上传方式有多种模式,轮询、指定storage、剩余空间最大 2、使用上传模式为剩余空间最大时,是哪个空间大往哪传

which path (means disk or mount point) of the storage server to upload file

0: round robin

2: load balance, select the max free space path to upload file

store_path = 2 根据这个配置项,你问题1不存在了。 至于问题2 不同path容量不同,设置阈值是1G,肯定是一直往最大剩余空间传。假如剩余1.5G,你传2g的文件,肯定提示空间不足,这时候该考虑扩容了

lystormenvoy commented 9 months ago

1、配置项上传方式有多种模式,轮询、指定storage、剩余空间最大 2、使用上传模式为剩余空间最大时,是哪个空间大往哪传

which path (means disk or mount point) of the storage server to upload file

0: round robin

2: load balance, select the max free space path to upload file

store_path = 2 根据这个配置项,你问题1不存在了。 至于问题2 不同path容量不同,设置阈值是1G,肯定是一直往最大剩余空间传。假如剩余1.5G,你传2g的文件,肯定提示空间不足,这时候该考虑扩容了

但我们需要用轮询

heshc commented 9 months ago

用轮询模式,就一开始设计布局合理,比如path大小保持一致。 即使使用剩余空间最大模式,后续使用过程中跟轮询模式也差不多。这个会保障每个path逐渐均匀增加