FastDFS集群与Http访问部署详解

一、部署环境

系统&软件版本
VMware Workstation15 Pro
CentOS7.6.1810
fastdfs6.07
fastdfs-nginx-module1.22
libfastcommon1.0.48
nginx1.18.0
Xshell7
Xftp7

二、可能用到的命令

# 修改本机ip
vim /etc/sysconfig/network-scripts/ifcfg-ens33
# 重启网络服务
service network restart

三、单机部署

首先将 fastdfs-6.07.tar.gzfastdfs-nginx-module-1.22.tar.gzlibfastcommon-1.0.48.tar.gznginx-1.18.0.tar.gz 安装包上传至服务器 /home/fastDFS 目录下

1、安装编译环境

yum install git gcc gcc-c++ make automake vim wget libevent -y

2、安装 libfastcommon 基础库

# 当前目录 /home/fastDFS
# 解压 fastDFS 通用安装库
tar -zxvf libfastcommon-1.0.48.tar.gz
cd libfastcommon-1.0.48
./make.sh && ./make.sh install

3、安装 FastDFS

# 当前目录 /home/fastDFS
tar -zxvf fastdfs-6.07.tar.gz
mv fastdfs-6.07 fastdfs
cd fastdfs
./make.sh && ./make.sh install

# 准备配置文件
cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
cp /home/fastDFS/fastdfs/conf/http.conf /etc/fdfs/
cp /home/fastDFS/fastdfs/conf/mime.types /etc/fdfs/
vim /etc/fdfs/tracker.conf
# 需要修改的内容如下
port=22122
base_path=/home/fastDFS
vim /etc/fdfs/storage.conf
# 需要修改的内容如下
port=23000
base_path=/home/fastdfs # 数据和日志文件存储根目录
store_path0=/home/fastdfs # 第一个存储目录
tracker_server=192.168.32.102:22122
http.server_port=8888 # http访问文件的端口(默认8888,看情况修改,和nginx中保持一致)

4、启动 FastDFS

# 启动:start   停止:stop   重启:restart
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
# 查看所有运行的端口
netstat -ntlp

5、测试上传

vim /etc/fdfs/client.conf
# 需要修改的内容如下
base_path = /home/fastDFS
tracker_server = 192.168.32.102:22122
# 开始测试。返回ID表示成功 如:group1/M00/00/00/xxx.png
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /home/fastDFS/fastdfs/conf/anti-steal.jpg
# 返回结果:group1/M00/00/00/wKggZmBVdK2AFMxDAABdreSfEnY954.jpg
# 该文件可在 /home/fastDFS/data/00/00 路径下看到

6、安装 fastdfs-nginx-module

# 当前操作目录 /home/fastDFS
tar -zxvf fastdfs-nginx-module-1.22.tar.gz
cd /home/fastDFS/fastdfs-nginx-module-1.22/src
vim config
# 将 ngx_module_incs(第 6 行)和 CORE_INCS(第 15 行)的值做如下修改
ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
cp mod_fastdfs.conf /etc/fdfs/
vim /etc/fdfs/mod_fastdfs.conf
# 需要修改的内容如下
tracker_server=192.168.32.102:22122
url_have_group_name=true
store_path0=/home/fastDFS
mkdir -p /var/temp/nginx/client

7、安装 nginx

cd /home/fastDFS/
tar -zxvf nginx-1.18.0.tar.gz
cd nginx-1.18.0
yum -y install pcre-devel openssl openssl-devel
# 添加 fastdfs-nginx-module 模块
./configure --add-module=/home/fastDFS/fastdfs-nginx-module-1.22/src

在这里插入图片描述

# 编译安装
make && make install
# 查看模块是否安装上
/usr/local/nginx/sbin/nginx -V

在这里插入图片描述

vim /usr/local/nginx/conf/nginx.conf
# 添加如下配置
server {
    listen 8888;
    server_name localhost;
    location ~/group[0-9]/ {
    	ngx_fastdfs_module;
    }
}

在这里插入图片描述

8、启动 Nginx

/usr/local/nginx/sbin/nginx

在这里插入图片描述

9、下载测试

# 关闭防火墙 (如果防火墙为开启状态会导致无法下载)
systemctl stop firewalld
http://192.168.32.102:8888/group1/M00/00/00/wKggZmBVdK2AFMxDAABdreSfEnY954.jpg

在这里插入图片描述

四、集群部署

1、 FastDFS集群架构设置

192.168.32.101192.168.32.102192.168.32.103
trackertrackertracker
storage(group1)storage(group1)storage(group2)
nginxnginxnginx

Tips:按照之前的单机方式完成三台服务器的安装后再进行后面部分的操作

2、配置 tracker 集群 三台相同

vim /etc/fdfs/tracker.conf
# 需要修改的内容如下(生产环境中通常使用 2,这里为了测试集群效果先采用轮询方式)
store_lookup=0 # 0是轮询,1是指定组,2是剩余存储空间多的group优先

3、配置 storage 集群

vim /etc/fdfs/storage.conf
# 需要修改的内容如下
group_name=group1 #注意组名 192.168.32.103 配置是 group2
port=23000 #storage 的端口号,同一个组的 storage 端口号必须相同
tracker_server=192.168.32.101:22122
tracker_server=192.168.32.102:22122
tracker_server=192.168.32.103:22122

在这里插入图片描述

4、查看 storage 日志和 tracker 集群信息

cat /home/fastDFS/logs/storaged.log

5、查看存储集群信息

/usr/bin/fdfs_monitor /etc/fdfs/storage.conf

在这里插入图片描述

6、测试上传

# 选择任意一台单机进行上传测试即可
vim /etc/fdfs/client.conf
# 需要修改的内容如下
tracker_server=192.168.32.101:22122
tracker_server=192.168.32.102:22122
tracker_server=192.168.32.103:22122
# 分别进入三台服务器,删除之前单机测试上传时的数据
rm -f /home/fastDFS/data/00/00/*
# 执行上传(为了对后续功能进行验证,这里仅执行一次即可,请勿多次上传)
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /home/fastDFS/fastdfs/conf/anti-steal.jpg
# 返回结果:group1/M00/00/00/wKggZWBVzh6AFn9GAABdreSfEnY049.jpg
# 分别进入三台服务器存储目录中查看上传结果
cd /home/fastDFS/data/00/00
ll

在这里插入图片描述

Tips

  1. 由于 192.168.32.101192.168.32.102 这两台服务器在同一组 group1 中,所以这两台机器中都存有本次上传的图片。
  2. 由于 192.168.32.103 属于 group2 分组,所以这台服务器上没有本次上传的图片。

7、 Nginx 结合 FastDFS 集群

vim /etc/fdfs/mod_fastdfs.conf
# 需要修改的内容如下
tracker_server=192.168.32.101:22122
tracker_server=192.168.32.102:22122
tracker_server=192.168.32.103:22122
group_name=group1 # 注意组名 如果是group2 则一定要改

8、下载测试

http://192.168.32.101:8888/group1/M00/00/00/wKggZWBVzh6AFn9GAABdreSfEnY049.jpg
http://192.168.32.102:8888/group1/M00/00/00/wKggZWBVzh6AFn9GAABdreSfEnY049.jpg
http://192.168.32.103:8888/group1/M00/00/00/wKggZWBVzh6AFn9GAABdreSfEnY049.jpg

Tips:由于现在的 FastDFS 为集群模式,所以即使 192.168.32.103 服务器上没有本次上传的图片,也可以进行数据访问。

五、FastDFS配置优化

1、 最大连接数设置

配置文件:tracker.conf 和 storage.conf
参数名:max_connections
缺省值:256

说明:FastDFS为一个连接分配一个task buffer,为了提升分配效率,FastDFS采用内存池的做法。FastDFS老版本直接事先分配 max_connections 个buffer,这个做法显然不是太合理,在max_connections 设置过大的情况下太浪费内存。v5.04对预分配采用增量方式,tracker一次预分配1024个,storage一次预分配256个。

#define ALLOC_CONNECTIONS_ONCE 1024

总的task buffer初始内存占用情况测算方法如下:
改进前:max_connections * buffer_size
改进后:max_connections和预分配的连接中那个小 * buffer_size

使用v5.04及后续版本,可以根据实际需要将 max_connections 设置为一个较大的数值,比如 10240 甚至更大。

注意:如果此时FastDFS server启动报错,则需要将一个进程允许打开的最大文件数调大到超过max_connections。

vim /etc/security/limits.conf (在文件最后即 # End of file 上一行添加,重启系统生效)

* soft nofile 65535

* hard nofile 65535

另外,对于32位系统,请注意使用到的内存不要超过3GB

2、 工作线程数设置

配置文件:tracker.conf 和 storage.conf
参数名: work_threads
缺省值:4

说明:为了避免CPU上下文切换的开销,以及不必要的资源消耗,不建议将本参数设置得过大。为了发挥出
多个CPU的效能,系统中的线程数总和,应等于CPU总数。

对于tracker server,公式为:
work_threads + 1 = CPU数
对于storage,公式为:
work_threads + 1 + (disk_reader_threads + disk_writer_threads) * store_path_count = CPU数

3、storage 目录数设置

配置文件: storage.conf
参数名:subdir_count_per_path
缺省值:256

说明:FastDFS采用二级目录的做法,目录会在FastDFS初始化时自动创建。存储海量小文件,打开了 trunk 存储方式的情况下,建议将本参数适当改小,比如设置为32,此时存放文件的目录数为 32 * 32 = 1024。假如trunk文件大小采用缺省值64MB,磁盘空间为2TB,那么每个目录下存放的trunk文件数均值为:

​ 2TB/(1024 * 64MB) = 32个

4、storage磁盘读写线程设置

配置文件: storage.conf
参数名:disk_rw_separated:磁盘读写是否分离
参数名:disk_reader_threads:单个磁盘读线程数
参数名:disk_writer_threads:单个磁盘写线程数
如果磁盘读写混合,单个磁盘读写线程数为读线程数和写线程数之和,对于单盘挂载方式,磁盘读写线程分别设置为 1 即可
如果磁盘做了RAID,那么需要酌情加大读写线程数,这样才能最大程度地发挥磁盘性能

5、 storage同步延迟相关设置

配置文件: storage.conf
参数名:sync_binlog_buff_interval:将binlog buffer写入磁盘的时间间隔,取值大于0,缺省值为 60s
参数名:sync_wait_msec:如果没有需要同步的文件,对binlog进行轮询的时间间隔,取值大于0,缺省值为200ms
参数名: sync_interval:同步完一个文件后,休眠的毫秒数,缺省值为 0

如果磁盘读写混合,单个磁盘读写线程数为读线程数和写线程数之和,对于单盘挂载方式,磁盘读写线程分别设置为 1 即可
如果磁盘做了RAID,那么需要酌情加大读写线程数,这样才能最大程度地发挥磁盘性能

6、 storage同步延迟相关设置

配置文件: storage.conf
参数名:sync_binlog_buff_interval:将binlog buffer写入磁盘的时间间隔,取值大于0,缺省值为 60s
参数名:sync_wait_msec:如果没有需要同步的文件,对binlog进行轮询的时间间隔,取值大于0,缺省值为200ms
参数名: sync_interval:同步完一个文件后,休眠的毫秒数,缺省值为 0

为了缩短文件同步时间,可以将上述3个参数适当调小即可

源码

相关软件(免费)
配置示例(免费)

--------------------------------------- 人生没有如果,你想要的,请握紧。 ---------------------------------------

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
fastdfs基于http协议的分布式文件系统源码,基于go和js,它具有高性能、高可靠、无中心、免维护等优点。 ### 大家担心的是这么简单的文件系统,靠不靠谱,可不可以用于生产环境?答案是肯定的,正因为简单所以高效,因为简单所以稳定。 注意:使用 - 支持curl命令上传 - 支持浏览器上传 - 支持HTTP下载 - 支持多机自动同步 - 支持断点下载 - 支持配置自动生成 - 支持小文件自动合并(减少inode占用) - 支持秒传 - 支持跨域访问 - 支持一键迁移(搬迁) - 支持异地备份(特别是小文件1M以下) - 支持并行体验 - 支持断点续传([tus](https://tus.io/)) - 支持docker部署 - 支持自监控告警 - 支持图片缩放 - 支持google认证码 - 支持自定义认证 - 支持集群文件信息查看 - 使用通用HTTP协议 - 无需专用客户端(支持wget,curl等工具) - 类fastdfs - 高性能 (使用leveldb作为kv库) - 高可靠(设计极其简单,使用成熟组件) - 无中心设计(所有节点都可以同时读写) # 优点 - 无依赖(单一文件) - 自动同步 - 失败自动修复 - 按天分目录方便维护 - 支持不同的场景 - 文件自动去重 - 支持目录自定义 - 支持保留原文件名 - 支持自动生成唯一文件名 - 支持浏览器上传 - 支持查看集群文件信息 - 支持集群监控邮件告警 - 支持小文件自动合并(减少inode占用) - 支持秒传 - 支持图片缩放 - 支持google认证码 - 支持自定义认证 - 支持跨域访问 - 极低资源开销 - 支持断点续传([tus](https://tus.io/)) - 支持docker部署 - 支持一键迁移(从其他系统文件系统迁移过来) - 支持异地备份(特别是小文件) - 支持并行体验(与现有的文件系统并行体验,确认OK再一键迁移) - 支持token下载 token=md5(file_md5+timestamp) - 运维简单,

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值