一、部署环境
系统&软件 | 版本 |
---|---|
VMware Workstation | 15 Pro |
CentOS | 7.6.1810 |
fastdfs | 6.07 |
fastdfs-nginx-module | 1.22 |
libfastcommon | 1.0.48 |
nginx | 1.18.0 |
Xshell | 7 |
Xftp | 7 |
二、可能用到的命令
# 修改本机ip
vim /etc/sysconfig/network-scripts/ifcfg-ens33
# 重启网络服务
service network restart
三、单机部署
首先将 fastdfs-6.07.tar.gz
、fastdfs-nginx-module-1.22.tar.gz
、libfastcommon-1.0.48.tar.gz
、nginx-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.101 | 192.168.32.102 | 192.168.32.103 |
---|---|---|
tracker | tracker | tracker |
storage(group1) | storage(group1) | storage(group2) |
nginx | nginx | nginx |
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:
- 由于
192.168.32.101
和192.168.32.102
这两台服务器在同一组group1
中,所以这两台机器中都存有本次上传的图片。 - 由于
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个参数适当调小即可
源码
--------------------------------------- 人生没有如果,你想要的,请握紧。 ---------------------------------------