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.csdn.net/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的存储容量。

在 CentOS 7 上搭建 FastDFS 文件服务器的步骤如下: 1. 安装必要的依赖库: ``` yum install -y gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel wget ``` 2. 下载 FastDFS 源码: ``` wget https://github.com/happyfish100/fastdfs/archive/V6.06.tar.gz ``` 3. 解压源码并编译安装: ``` tar zxvf V6.06.tar.gz cd fastdfs-6.06/ ./make.sh ./make.sh install ``` 4. 配置 Tracker 服务器: 在 Tracker 服务器上创建一个 tracker.conf 配置文件,并添加以下内容: ``` # 配置 Tracker 服务器的 IP 和端口号 port=22122 bind_addr=192.168.0.1 # 配置存储服务器的组名和存储服务器的 IP 和端口号 group_name=group1 group_count=1 group0_ip=192.168.0.2 group0_port=23000 # 配置日志文件的路径和级别 log_level=info log_filename=/var/log/fdfs/trackerd.log ``` 5. 启动 Tracker 服务器: ``` /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart ``` 6. 配置 Storage 服务器: 在 Storage 服务器上创建一个 storage.conf 配置文件,并添加以下内容: ``` # 配置 Tracker 服务器的 IP 和端口号 tracker_server=192.168.0.1:22122 # 配置存储服务器的 IP 和端口号 port=23000 bind_addr=192.168.0.2 # 配置存储服务器的组名和容量 group_name=group1 store_path_count=1 store_path0=/data/fastdfs/storage # 配置心跳时间和同步文件的时间 heart_beat_interval=30 sync_wait_msec=600 # 配置日志文件的路径和级别 log_level=info log_filename=/var/log/fdfs/storaged.log ``` 7. 启动 Storage 服务器: ``` /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart ``` 8. 测试上传和下载文件: 在客户端机器上安装 FastDFS 客户端工具: ``` yum install -y libfastcommon wget https://github.com/happyfish100/fastdfs/archive/V6.06.tar.gz tar zxvf V6.06.tar.gz cd fastdfs-6.06/ ./make.sh ./make.sh install ``` 上传文件: ``` /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /path/to/local/file ``` 下载文件: ``` /usr/bin/fdfs_download_file /etc/fdfs/client.conf group1 M00/00/00/xxx /path/to/local/file ``` 以上就是在 CentOS 7 上搭建 FastDFS 文件服务器的步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值