接着上一篇讲,在上一篇中,我们成功搭建了FastDFS,并分别配置和启动了tracker(调度器)服务以及storage(数据存储器)服务,当然,配置相当简洁,只配置了日志和图片存放的路径以及tracker server的IP地址等,磁盘我们只模拟了一个,因此Storage.conf配置中只有一个store_path0,且storage的配置group_name我们也用了默认的group1,因为我们自己模拟的时候只有一台虚拟机,条件有限,但是在现实中,Storage server可能是一个集群,因此,配置还可以更复杂,但是不难;最后,我们利用FastDFS安装时自带的客户端测试工具fdfs_test测试了一下图片的upload,测试之前,仍需要修改配置文件,因为,我们要指定与其对应的配置文件client.conf中的tracker服务的IP,作为调度中心节点,这个一定不能忘,注意一个地方,如果你的Linux是32位的,那么,FastDFS的客户端连接包libfdfsclient.so,默认安装是在/home/lib64目录下面的,之前我们拷贝过一个common包,这个时候,需要将libfdfsclient.so包也拷贝到lib目录下。
如果你的Linux是64位的,那么你就不管考虑了。
经过上一篇的实战,我想,下面一张图,现在,你一定能明白个八九了
本篇,我们将实现http服务,访问FastDFS系统中的Storage server存储的图片,因为FastDFS的HTTP服务较为简单,无法提供负载均衡等高性能的服务,所以FastDFS的开发者——淘宝的架构师余庆同学,为我们提供了Nginx上使用的FastDFS模块(也可以叫FastDFS的Nginx模块)。其使用非常简单。
FastDFS的Nginx模块如下(上一篇中,我们只是上传了这个源码包,但是没有进行后续的操作)
源码包和完整安装word文档,在我的资源里下载(无法0分共享,最少就是1分,没办法)--->FastDFS相关资料下载
一、解压 fastdfs-nginx-module_v1.16.tar.gz
二、修改fastdfs-nginx-module的config配置文件
vim /src/config 如下
我们看一下,引用的地址,实际是在哪个目录下面的(common和clinet就不用说了吧,这两个肯定在/usr/lib64目录下面,所以上面的libs引用的路径根据自己的Linux系统而定,32位的就是 /usr/lib -lfastcommon -lfdfsclient ,64位的就改成/usr/lib64 -lfastcommon -lfdfsclient )
ls -l|grep 'fast*'
使用 ls 搭配正则搜索,在include目录下列出 fast*开头的目录,然后就是 图上的两个 fastcommon 和 fastdfs,因此,fastdfs-nginx-module的config需要修改,修改两处,一个是去掉引用路径中的所有local,一个就是将lib改成lib64(如果是32位Linux,不用改)----->fastcommon和fastdfs目录下放的是c语言的头文件.h文件
修改后,我们保存一下,然后我们还要做一件事情,就是把src目录下的,fastdfs模块的配置文件mod_fastdfs.conf拷贝到FastDFS的配置目录/etc/fdfs/目录下,便于集中管理
cp mod_fastdfs.conf /etc/fdfs/
我们稍后,装完Nginx后,在配置/etc/fdfs/mod_fastdfs.conf
三、安装Nginx,添加fastdfs-nginx-module模块目录
3.1 解压 nginx-1.13.5.targz
tar -zxf nginx-1.13.5.tar.gz (带参数v,将输出解压过程的信息)
进入nginx-1.13.5目录执行configure命令之前,我们先为我们的nginx在/var目录下,创建一个临时目录 temp/nginx
mkdir -p temp/nginx ------>-p参数,保证父目录不存在的情况下,先创建父目录,然后再创建子目录
切换到nginx-1.13.5目录,执行configure命令
./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=/root/fastdfs-nginx-module/src
回车执行--->
报错,好吧,我忘了自己的Linux系统当前是没有下载和安装Nginx依赖包的,(为了装FastDFS,换了一个纯净版的Linux64系统)
Nginx依赖包下载安装,看我的博文 ----->nginx依赖包安装
走一遍,安装(安装过的可以忽略)
yum -y install pcre pcre-devel
yum -y install zlib zlib-devel
yum -y install openssl openssl-devel
然后,我们再来一遍 configure
回车后,configure命令成功
然后就是 make 编译C源码,唰唰唰,make完成后,进行install安装
至此,Nginx安装完成
四、配置 /etc/fdfs/mod_fastdfs.conf
切换到,/etc/fdfs 目录下
vim mod_fastdfs.conf
第一个地方
base_path = /home/fastdfs/nginx-module
我们在/home/fastdfs/目录下,创建一个nginx-module的目录
第二个地方
我的本机tracker 服务IP是 192.168.xxx.xxx
tracker_server=192.168.153.134:22122
第三个地方
我的Storage server存放图片的路径(只有一个磁盘)在: /home/fastdfs/storage 目录下
store_path0=/home/fastdfs/storage
第四个地方
url_have_group_name = true
改后,退出保存!
五、配置Nginx的server节点,实现与storage server 对接
切换到Nginx的安装目录,/usr/local/nginx
修改 conf目录下的nginx.conf配置文件,对原有的server节点修改如下:
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location /group1/M00/ {
#root 这里直接调用fastdfs的nginx插件,定位到/home/fastdfs/storage/data;
#安装nginx的时候,已经为其添加了一个module,指向/root/fastdfs-nginx-module/src
ngx_fastdfs_module;
}
}
修改后,保存nginx.conf,并启动nginx
切换到 cd /usr/local/nginx 目录
启动 ./sbin/nginx,我们可以看到,启动的时候,fastdfs的nginx的插件也启动了(多了一个进程);
我们需要设置一下Linux系统的防火墙,开放一个80端口(这样,外部才能访问80端口)
vim /etc/sysconfig/iptables
增加如下内容
保持并退出,重启防火墙
/etc/init.d/iptables restart
然后,我们外部访问一下nginx服务,是否正常
ok,一切顺利,下面上让人打鸡血的部分
六、利用Nginx的Http服务,实现,FastDFS的storage server存储的图片url地址访问
先来一张图片,放到 /root/FastDFS 目录下,我们不用原来的广告图片,放一张美女的图片养养眼
6.1 启动 tracker和storage服务
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf
FastDFS的搭建和配置看我的上一篇文章---->FastDFS的搭建以及tracker和storage的配置
6.2 利用FastDFS自带的客户端工具实现图片 1.jpg的上传
/usr/bin/fdfs_test /etc/fdfs/client.conf upload 1.jpg
上传后得到文件 url地址:example file url: http://192.168.153.134/group1/M00/00/00/wKiZhlnAq6mAECKrAAG6VRTd3uw792.jpg
文件名解析(storage server根据特定信息 自动生成):
192.168.153.134: nginx服务器的IP
group1:storage组名称(目前模拟的只有一台虚拟机,一个storage server,因此组名只有一个)
M00 :storage存储的磁盘,目前只有一个--->store_path0,两个的话,增加一个store_path1 --> M01,store_path2 --> M02....
00/00 : 数据两级目录,在storage的data目录下,里面存放文件
wKiZhlnAq6mAECKrAAG6VRTd3uw792.jpg:加密后的文件名,最开始的图片名是1.jpg
拿到这个地址,在外部浏览器中访问一下
ok了,利用fastdfs的nginx插件,再通过配置插件的conf和利用nginx提供的http服务配置 server(一个server就是一个虚拟主机,server中使用插件模块),最终访问到了我们测试上传的图片,且,nginx具有高并发性和反向代理以及可以提供负载均衡,二者结合起来非常的完美,对于小文件的分布式存储,十分高效,且配置简单。