FastDFS文件服务器扩容最佳实践

FastDFS扩容最佳实践-真实经历

团队正准备对当前生产文件服务器一块高效云盘进行自盘扩容时,发现如下提示:

经过查询资料确认,数据盘支持创建GPT分区和MBR分区,二者区别如下:

● GPT:能够识别大于2 TiB的分区,创建分区数量无限制。

● MBR:只能识别小于或等于2 TiB的分区,最多创建4个分区。

而我们目标扩容磁盘,正是MBR分区+EXT3文件系统,不改变分区格式情况下,无法通过增加数据盘空间来扩容。[捂脸哭]

需要调整方案,兵法两路,首先本地备份快照点后的差异数据,开始从fastdfs本身的扩容机制上下手的探索,查了半小时线上案例和官方资料,基本可确定实施方向,可以保证不影响线上数据且操作可回退!

第一步,购买一块新盘,然后手动格式化和挂载新分区到新的文件路径/mnt2,做为新存储路径,这块按照官方文档操作,亲测可行:https://help.aliyun.com/document_detail/25426.html

第二步,采用基于fastdfs多store_path机制的扩容方式:

核心原理就一句话:fastdfs在一台服务器支持多个store_path,每个store_path指向一个存储路径

1、确保文件tracker.conf的此配置项如下:


# the method of selecting group to upload files
# 0: round robin
# 1: specify group
# 2: load balance, select the max free space group to upload file
store_lookup=2

2、两个文件(storage.conf,mod_fastdfs.conf)共同修改配置:


# path(disk or mount point) count, default value is 1
store_path_count=2
# store_path#, based 0, if store_path0 not exists, it's value is base_path
# the paths must be exist
store_path0=/mnt/fdfs/storage
store_path1=/mnt2/fdfs/storage #新磁盘路径

3、nginx.conf配置修改如下:


location ~/group[0-9]/M00 {
     root /mnt/fdfs/storage/data;
     add_header Access-Control-Allow-Origin *;
     add_header Access-Control-Allow-Methods 'GET, OPTIONS';
     add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
     if ($request_method = 'OPTIONS') {
           return 204;
     }
     if ($arg_attname) {
          add_header Content-Disposition "attachment;filename=$arg_attname;filename*=utf-8''$arg_attname";
       }
     ngx_fastdfs_module;
 }
 # 新磁盘路径配置
 location ~/group[0-9]/M01 {
     root /mnt2/fdfs/storage/data; 
     add_header Access-Control-Allow-Origin *;
     add_header Access-Control-Allow-Methods 'GET, OPTIONS';
     add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
     if ($request_method = 'OPTIONS') {
        return 204;
     }
     if ($arg_attname) {
        add_header Content-Disposition "attachment;filename=$arg_attname;filename*=utf-8''$arg_attname";
       }
     ngx_fastdfs_module;
}

4、先关闭fastdfs再启动


/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf stop
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf stop
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
nginx -s reload

实操有用的参考文档:

https://blog.youkuaiyun.com/qq_41303447/article/details/121634918

https://wenku.baidu.com/view/133742db971ea76e58fafab069dc5022aaea46a3.html

https://www.cnbiancheng.com/?p=49670

总结原理分析:

参考文章https://www.cnblogs.com/wlandwl/p/fastdfsAdd.html

1、一个storage属于一个分组group,一个分组group对应的数据存储目录地址可一个或多个。(这一点保证了group的文件地址容量扩展)

2、一个group的一个目录存储地址最多可存储的文件个数为:256*256*1000=65536000。storage文件存储机制中,有小文件合并存储到一个大文件的机制。

3、一个storage可以配置多个tracker地址,同理一个tracker可以分配文件存储到多个storage上面。(这一点保证了服务器storage容量扩展)

4、当一个storage中有多个文件目录地址时,通过tracker.conf中的关键参数store_path,可以配置一个文件在存储时,多个对应存储目录地址的存储机制,如轮询或选择剩余空间大的文件目录。

5、当一个tracker对应的存储storage具有多个时,通过tracker.conf中的store_lookup,store_server,可以配置当文件上传时,对应多个storage服务器的存储机制,如轮询或选择空间大的服务器。

6、storage文件服务器默认存储空间配置时,当达到文件目录空间不足10%时,便不可以存储文件,可通过tracker.conf中的reserved_storage_space参数修改默认值。(我们配置的是50G,

一周30G增长量,一年1.5T)

7、多个storage可以属于一个组或多个组,当两个或多个storage属于一个组时,各个storage中的文件相互备份。这种机制的优点是保证了文件服务器的备份和负载均衡,缺点是两个storage的存储容量是两个中较小storage的存储容量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值