项目背景
- 用例场景,企业或个人认证,涉及到大量图片资料上传。
- 当前是将用户的图片上传到项目的中的一个文件夹下
存在的问题
- 图片存储路径位于项目路径下,导致每次发版时,需格外小心注意该文件夹的数据迁移
- 图片没有分目录存储,导致一个目录中图片数量太大,造成图片查找效率低下,严重拖垮系统性能。
- 图片安全性问题,该文件夹直接由servlet容器发布到互联网上,而且图片访问名称没有经过加密,很容易被推断出来,从而导致用户数据泄露。
FastDFS
什么是FastDFS
- 分布式文件系统
- C语言实现
- 开源项目
- 详细介绍
核心架构
- Tracker集群
负责分发存储请求,路由图片请求。 - Storage集群
负责存储、备份图片
linux 下搭建 FastDFS
- 安装包(包括nginx)下载 百度云
- 安装
libevent
工具包(FastDFS依赖的库)
yum -y install libevent
- 安装
libfastcommon
(libfastcommon是FastDFS官方提供的,libfastcommon包含了FastDFS运行所需要的一些基础库。)
- 解压
tar -zxvf libfastcommon-1.0.7
cd libfastcommon-1.0.7
./make.sh
./make.sh install
安装cd /usr/lib64/
ll | grep '.*fast.*so'
查看 libfastcommon.socp libfastcommon.so ../lib/
复制一份至lib下
- 解压
- 安装FastDFS的Tracker
tar xzvf FastDFS_v5.05.tar.gz
解压FastDfs
cd FastDFS
./make.sh
编译./make.sh install
安装cp conf/* /etc/fdfs/
拷贝配置文件
配置Tracker
mkdir -p /home/tracker/fastdfs
创建日志目录(可以自定义)vim /etc/fdfs/tracker.conf
修改日志目录,或运行端口为base_path=/home/tracker/fastdfs
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
启动tracker
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
如果需要再次启动,使用此命令
设置开机启动Tracker
vim /etc/rc.d/rc.local
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
添加该命令
- 安装FastDFS的Storage(如需在不同机器安装Storage需重复Tracker的安装步骤,此例中 安装在一台服务器)
配置 Stroage
mkdir -p /home/storage/fastdfs
创建日志目录vim /etc/fdfs/storage.conf
- 修改日志目录
base_path=/home/storage/fastdfs
- 修改日志目录
mkdir -p /home/fastdfs/storage
创建存储目录(可配置多个store_path1=.....
)
- 修改存储目录
store_path0=/home/fastdfs/storage
- 修改存储目录
tracker_server=172.26.2.1:22122
配置tracker的IP与端口(根据自己IP和端口配置,可配置多个)
启动Storage
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf
重启,在该命令后添加restart
命令
- 配置开机启动Storage
vim /etc/rc.d/rc.local
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf
添加该命令
- 配置客户端测试FastDFS
mkdir -p /home/client/fastdfs
创建客户端日志目录vim /etc/fdfs/client.conf
- 修改日志目录
base_path=/home/fastdfs
- 修改tracker地址
tracker_server=172.26.2.1:22122
- 修改日志目录
- 创建测试文件
vim /home/test.txt
, 输入内容并保存退出。 - 测试上传文件
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /home/test.txt
- 打开返回的图片路径查看结果
vim /home/fastdfs/storage/data/00/00/rBoCAVjaHCmAclTtAAAAFPmPj8E157_big.txt
### Nginx 安装
- 安装PCRE
- (Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。
yum install -y pcre pcre-devel
- 安装 zlib
- zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。
yum install -y zlib zlib-devel
安装openssl
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。yum install -y openssl openssl-devel
- 解压Nginx
tar -zxvf nginx-1.8.0.tar.gz
配置 nginx 安装项命令如下,注意最后一行添加FastDFS-nginx-module模块,注意修改路径为你解压的路径
./configure --prefix=/usr/local/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=/你的解压路径/fastdfs-nginx-module/src
上边将临时文件目录指定为/var/temp/nginx,需要在/var下创建temp及nginx目录
编译
make
安装
make install
启动
/usr/local/nginx/sbin/nginx
- 停止服务
/usr/local/nginx/sbin/nginx -s stop
FastDFS与Nginx
使用Nginx提供http服务,将图片发布出去。FastDFS推荐使用Nginx,并提供了Ngix的插件。
- 解压
FastDFS-nginx-module_v1.16.tar.gz
tar -zxvf fastdfs-nginx-module_v1.16.tar.gz
- 修改配置文件
vim /opt/fastdfs/fastdfs-nginx-module/src/config
- 修改config文件将所有的/usr/local/路径改为/usr/
- 复制配置文件
cd /opt/fastdfs/fastdfs-nginx-module/src/
cp mod_fastdfs.conf /etc/fdfs/
修改mod_FastDFS.conf的内容
vi /etc/fdfs/mod_fastdfs.conf
- 修改fastdfs目录
base_path=/home/fastdfs
- 配置 tracker位置,可配置多行
tracker_server=192.168.101.3:22122
- url中包含group名称
url_have_group_name=true
- 指定文件存储路径
store_path0=/home/FastDFS/fdfs_storage
将libfdfsclient.so拷贝至/usr/lib下
cp /usr/lib64/libfdfsclient.so /usr/lib/
创建nginx/client目录
mkdir -p /var/temp/nginx/client
配置nginx
cd /usr/local/nginx/conf
vim nginx.conf
新增server
server { listen 80; server_name ngix所在服务器ip; location /group1/M00/{ #root /home/FastDFS/fdfs_storage/data; ngx_fastdfs_module; } }
重新启动nginx
/usr/local/nginx/sbin/nginx -s stop
/usr/local/nginx/sbin/nginx
再次上传test.txt
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /home/test.txt
- 访问返回的url地址 http://nginx的ip/group1/M00/00/00/rBoCAVjaS5SATJaGAAAAFPmPj8E239_big.txt