fastDFS+Nginx分布式图片服务器搭建

安装依赖包

系统:centos7.4
crt
tracker和storage节点建议部署分别部署

1
2
yum install -y libevent
yum install gcc-c++ openssl-devel pcre-devel zlib-devel

下载需要的包
https://github.com/happyfish100
nginx官网

1
2
3
4
fastdfs5.11.zip
fastdfs-nginx-module.zip
libfastcommon.zip
nginx-1.12.2

安装

libfastcommon

首先第一步是安装libfastcommon
unzip libfastcommon-master.zip
解压成功后进入目录看一下压缩包的文件:
dfs
解压完成后就可以进行编译安装了,执行./make.sh && ./make.sh install
crt
至此libfastcommon就已经安装成功了,但注意一下上图中红色框标注的内容,libfastcommon.so 默认安装到了/usr/lib64/libfastcommon.so,但是FastDFS主程序设置的lib目录是/usr/local/lib,所以此处需要重新设置软链接

1
2
3
4
ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so

安装fastdfs

unzip fastdfs5.11.zip
解压完成后进入目录 fastdfs-5.11,执行

1
2
3
4
5
./make.sh  && ./make.sh  install
cd /etc/fdfs/
[root@hjlc-storage-nodeA fdfs]# cp client.conf.sample client.conf
[root@hjlc-storage-nodeA fdfs]# cp storage.conf.sample storage.conf
[root@hjlc-storage-nodeA fdfs]# cp tracker.conf.sample tracker.conf

crt

Tracker服务配置

mkdir -p /home/hjlc/app/fastdfs/fastdfs_tracker
编辑/etc/fdfs目录下的tracker.conf配置文件

1
2
3
4
disabled=false #启用配置文件(默认启用)
port=22122 #设置tracker的端口号,通常采用22122这个默认端口
base_path=/home/hjlc/app/fastdfs/fastdfs_tracker #设置tracker的数据文件和日志目录
http.server_port=6666 #设置http端口号,默认为8080这个不需要了

为启动脚本创建软引用

1
2
3
4
5
6
7
[root@hjlc-storage-nodeA fastdfs]# ln -s /usr/bin/fdfs_trackerd /usr/local/bin
[root@hjlc-storage-nodeA fastdfs]# ln -s /usr/bin/stop.sh /usr/local/bin
[root@hjlc-storage-nodeA fastdfs]# ln -s /usr/bin/restart.sh /usr/local/bin
启动tracker服务
root@hjlc-storage-nodeA fastdfs]# service fdfs_trackerd start
Reloading systemd: [ OK ]
Starting fdfs_trackerd (via systemctl): [ OK ]

fastdfs_tracker中就可以看到启动后新生成的data和logs目录,tracker服务的端口也应当被正常监听,最后再通过netstat命令查看一下端口监听情况:
crt
al
确认tracker正常启动后可以将tracker设置为开机启动,打开/etc/rc.d/rc.local并在其中加入以下配置:
service fdfs_trackerd start

Storage服务配置

先是创建Storage服务器的文件目录,需要注意的是同Tracker相比我多建了一个目录,因为Storage还需要一个文件存储路径,用于存放接收的文件:
mkdir /home/hjlc/app/fastdfs/fastdfs_storage
mkdir /home/hjlc/app/fastdfs/fastdfs_storage_data

接下来修改/etc/fdfs目录下的storage.conf配置文件

1
2
3
4
5
6
7
8
disabled=false #启用配置文件(默认启用)
group_name=group1 #组名,根据实际情况修改
port=23000 #设置storage的端口号,默认是23000,同一个组的storage端口号必须一致
base_path=/home/hjlc/app/fastdfs/fastdfs_storage #设置storage数据文件和日志目录
store_path_count=1 #存储路径个数,需要和store_path个数匹配
store_path0=/home/hjlc/app/fastdfs/fastdfs_storage_data #实际文件存储路径
tracker_server=172.16.1.182:22122 #tracker 服务器的 IP地址和端口号,如果是单机搭建,IP不要写127.0.0.1,否则启动不成功
http.server_port=8888 #设置 http 端口号不需要

配置完成后同样要为Storage服务器的启动脚本设置软引用:
ln -s /usr/bin/fdfs_storaged /usr/local/bin
启动Storage服务
service fdfs_storaged start
如果启动成功,/home/hjlc/app/fastdfs/fastdfs_storage中就可以看到启动后新生成的data和logs目录,端口23000也应被正常监听,还有一点就是文件存储路径下会生成多级存储目录,那么接下来看看是否启动成功了:
crt
crt
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
crt
ACTIVE 字样即可说明storage服务器已经成功登记到了tracker服务器
开机启动,打开/etc/rc.d/rc.local并将如下配置追加到文件中:
echo “service fdfs_storage start” >> /etc/rc.d/rc.local

上传测试

编辑/etc/fdfs目录下的client.conf 文件
base_path=/home/hjlc/app/fastdfs/fastdfs_tracker #tracker服务器文件路径
tracker_server=172.16.1.182:22122 #tracker服务器IP地址和端口号
http.tracker_server_port=8080 # tracker 服务器的 http 端口号,必须和tracker的设置对应起来

然后通过执行客户端上传命令尝试上传:

[root@hjlc-storage-nodeA ~]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf ~/123.jpg
group1/M00/00/00/rBABtlqwYLWATj7XAABOLQixhsQ490.jpg

此时发现并不能访问,因为FastDFS目前已不支持http协议,我们在FastDFS 4.0.5的版本更新日志中可以看到这样一条信息:
使用FastDFS的模块fastdfs-nginx-module,下载地址如下:https://github.com/happyfish100/fastdfs-nginx-module,这样做最大的好处就是提供了HTTP服务并且解决了group中storage服务器的同步延迟问题

fastdfs-nginx-module+nginx安装

在安装nginx之前需要先安装一些模块依赖的lib库

1
yum -y install pcre pcre-devel  zlib zlib-devel  openssl openssl-devel

storage nginx
首先是为storage服务器安装nginx,首先下载nginx和fastdfs-nginx-module的安装包
tar -zxvf nginx-1.12.2.tar.gz
unzip fastdfs-nginx-module.zip

解压成功后就可以编译安装nginx了,进入nginx目录

1
2
3
root@hjlc-storage-nodeA nginx-1.12.2]# ./configure --prefix=/home/hjlc/app/nginx --add-module=/root/fastdfs-nginx-module-master/src

make && make install

接下来要修改一下nginx的配置文件
server {
listen 9090;
server_name img.xxxx;
location ~/group1/M00 {
root /home/hjlc/app/fastdfs/fastdfs_storage_data;
ngx_fastdfs_module;
}
}
然后进入FastDFS的解压目录~/ fastdfs-5.11目录下的conf目录,将http.conf和mime.types拷贝到/etc/fdfs目录下
[root@hjlc-storage-nodeA fastdfs-5.11]# cp conf/http.conf /etc/fdfs/
[root@hjlc-storage-nodeA fastdfs-5.11]# cp conf/mime.types /etc/fdfs/
把fastdfs-nginx-module解压目录中src目录下的mod_fastdfs.conf也拷贝到/etc/fdfs目录下:
[root@hjlc-storage-nodeA ~]# cp fastdfs-nginx-module-master/src/mod_fastdfs.conf /etc/fdfs/
编辑刚拷贝的这个mod_fastdfs.conf文件了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
base_path=/home/hjlc/app/fastdfs/fastdfs_storage #保存日志目录
tracker_server=172.16.1.182:22122 #tracker服务器的IP地址以及端口号
storage_server_port=23000 #storage服务器的端口号
url_have_group_name = true #文件 url 中是否有 group 名
store_path0=/home/hjlc/app/fastdfs/fastdfs_storage_data # 存储路径
group_count = 3 #设置组的个数,事实上这次只使用了group1
设置了group_count = 3,接下来就需要在文件尾部追加这3个group setting:
group_count = 3

# group settings for group #1
# since v1.14
# when support multi-group on this storage server, uncomment following section
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/home/hjlc/app/fastdfs/fastdfs_storage_data

[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/home/hjlc/app/fastdfs/fastdfs_storage_data

[group3]
group_name=group3
storage_server_port=23000
store_path_count=1
store_path0=/home/hjlc/app/fastdfs/fastdfs_storage_data

接下来还需要建立 M00 至存储目录的符号连接:

1
2
3
4
5
ln  -s  /home/hjlc/app/fastdfs/fastdfs_storage_data/data  /home/hjlc/app/fastdfs/fastdfs_storage_data/data/M00
[root@hjlc-storage-nodeA ~]# /home/hjlc/app/nginx/sbin/nginx -c /home/hjlc/app/nginx/conf/nginx.conf -t
ngx_http_fastdfs_set pid=21138
nginx: the configuration file /home/hjlc/app/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /home/hjlc/app/nginx/conf/nginx.conf test is successful

节点2重复一遍storage服务安装和fastdfs-nginx-module+nginx安装即可,然后在安装一台Nginx发现代理服务器配置upstream代理,这我使用的SLB服务器就直接监听nodeA和nodeB的9090端口
crt