环境准备
1、背景
在大多数业务场景中,往往需要为FastDFS存储的文件提供http下载服务,而尽管FastDFS在其storage及tracker都内置了http服务, 但性能表现却不尽如人意。
作者余庆在后来的版本中增加了基于当前主流web服务器的扩展模块(包括nginx/apache),其用意在于利用web服务器直接对本机storage数据文件提供http服务,以提高文件下载的性能。
2、架构
使用FastDFS整合Nginx的参考架构如下所示
说明: 在每一台storage服务器主机上部署Nginx及FastDFS扩展模块,由Nginx模块对storage存储的文件提供http下载服务, 仅当当前storage节点找不到文件时会向源storage主机发起redirect或proxy动作。
注:图中的tracker可能为多个tracker组成的集群;且当前FastDFS的Nginx扩展模块支持单机多个group的情况。
更多内容:
3、为什么要使用Nginx的扩展模块来访问存储的文件
(1)如果进行文件合并,那么不使用FastDFS的nginx扩展模块,是无法访问到具体的文件的,因为文件合并之后,多个小文件都是存储在一个trunk文件中的,在存储目录下,是看不到具体的小文件的。
(2)如果文件未同步成功,那么不使用FastDFS的nginx扩展模块,无法正常访问到指定的文件的,而使用了FastDFS的nginx扩展模块之后,如果要访问的文件未同步成功,那么会解析出来该文件的源存储服务器ip ,然后将该访问请求转发或者重定向到源存储服务器中进行访问。
4、安装与配置FastDFS的nginx模块
在tracker上安装nginx
在每个tracker上安装nginx,的主要目的是做负载均衡及实现高可用。如果只有一台tracker可以不配置nginx。
一个tracker对应多个storage,通过nginx对storage负载均衡;
在storage 上安装FastDFS的nginx模块
在storage 上安装FastDFS的nginx模块,即在storage服务器(192.168.1.110与192.168.1.111)上安装FastDFS的nginx模块。
(1)到GitHub下载fastdfs-nginx-module的压缩包
https://github.com/happyfish100/fastdfs-nginx-module/releases
(2)上传 fastdfs-nginx-module压缩包 到Centos服务器上
(3)解压 fastdfs-nginx-module压缩包到 /app目录下
tar -zxvf fastdfs-nginx-module-1.20.tar.gz -C /app
(4)修改配置文件(特别关键的一步)
cd /app/fastdfs-nginx-module-1.20/src
vi config
注意修改了6行和15行
对比做修改
ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
(5)拷贝mod_fastdfs.conf配置文件到 /etc/fdfs 下
cd /app/fastdfs-nginx-module-1.20/src
cp mod_fastdfs.conf /etc/fdfs/
(6)修改/etc/fdfs/路径下的mod_fastdfs.conf文件
cd /etc/fdfs/
vi mod_fastdfs.conf
(7)拷贝/usr/lib64下的libfdfsclient.so.so到/usr/lib下(新版本不需要)
(8)创建nginx/client目录
mkdir -p /var/temp/nginx/client
5、安装Nginx
(1)从官网下载nginx的压缩包
(2)上传 nginx压缩包到Centos服务器上;
(3)解压 nginx压缩包到 /usr/local目录下;
tar zxvf nginx-1.16.0.tar.gz -C /app
(4)安装nginx的依赖库
yum install pcre
yum install pcre-devel
yum install zlib
yum install zlib-devel
yum install openssl
yum install openssl-devel
(5)进入nginx解压的目录下
cd /app/nginx-1.16.0/
(6)执行configure配置
./configure \
--prefix=/app/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--add-module=/app/fastdfs-nginx-module-1.20/src
注意:prefix=/app/nginx红的/app/nginx指的是要安装的nginx的路径。
add-module=/app/fastdfs-nginx-module-1.20/src中的路径指的是fastdfs-nginx-module模块的解压缩路径。
(7)创建临时目录
上面执行的configure命令,设置了一些配置参数,其中的一些参数指定的目录一定要存在。
mkdir /var/temp/nginx/ -p
(8)编译并安装
make && make install
可以通过./nginx -V
查看nginx都安装了哪些模块。
(9)修改nginx配置文件
cd /app/nginx/conf/
vi nginx.conf
location /group1/M00/{
ngx_fastdfs_module;
}
注意:location /group1/M00/:group1为nginx 服务FastDFS的分组名称,M00是FastDFS自动生成编号,对应store_path0=/fastdfs/storage,如果FastDFS定义store_path1,这里就是M01。
(10)nginx的启动
cd /app/nginx/sbin/
./nginx
(11) 设置fastdfs 和 nginx 服务的开机自启动
6、在浏览器中访问上传到fastDFS的图片
http://192.168.1.110/group1/M00/00/00/wKgBblzGBcSAVaeZAAfp4VPue6c997_b