如何在阿里云上搭建图片服务器FastDFS(含nginx搭建)
FastDFS
为何要使用FastDFS服务
FastDFS是用c语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
FastDFS架构包括 Tracker server和Storage server。客户端请求Tracker server进行文件上传、下载,通过Tracker server调度最终由Storage server完成文件上传和下载。
准备
准备好所需的压缩包,上传至阿里云服务器 /usr/local/fastdfs目录下,如果没有的话,可点击下面的链接进行下载
// 下载地址
https://pan.baidu.com/s/19GMNhXXJe97E-IzfBjZ0Fw
//提取码
hhlw
安装gcc(编译时需要)
因为fastdfs是C语言编写的,所以安装fastdfs之前先安装gcc进行编译
// 安装gcc
yum install -y gcc gcc-c++
安装libevent(运行时需要)
安装libevent,因为fastdfs是依赖libevent库的
// 安装libevent
yum -y install libevent
安装libfastcommon
libfastcommon是FastDFS官方提供的,libfastcommon包含了FastDFS运行所需要的一些基础库。
// 解压libfastcommon致/usr/local目录下
tar -zxvf libfastcommonV1.0.7.tar.gz -C /usr/local/
进入到解压后的libfastcommonV1.0.7文件的目录下,进行编译和安装
// 进入到解压后的libfastcommonV1.0.7文件的目录下
cd /usr/local/libfastcommon-1.0.7/
//编译
./make.sh
//安装
./make.sh install
编译完成后的图片如下
libfastcommon安装好后会在/usr/lib64 目录下生成 libfastcommon.so 库文件;
// 切换到/user/lib64目录下
cd /usr/lib64
//查看
ls | grep libfastcommon.so
因为fastdfs程序需要引用usr/lib目录,所以将/usr/lib64下的文件拷贝至/usr/lib目录下
// 拷贝文件至/usr/lib目录下
cp libfastcommon.so /usr/lib
安装tracker
将/usr/local/fastdfs目录下的FastDFS_v5.05.tar.gz文件解压至/usr/local目录下
// 解压FastDFS_v5.05.tar.gz文件解压至/usr/local目录下
tar -zxvf /usr/local/fastdfs/FastDFS_v5.05.tar.gz -C /usr/local
切入到解压的文件目录下,进行编译和安装
// 切换到/usr/local/FastDFS目录下
cd /usr/local/FastDFS/
//编译和安装
./make.sh && ./make.sh install
编译安装完后的结果如下:
安装成功将安装目录下的conf下的文件拷贝至/etc/fdfs/目录下
// 拷贝文件
cp /usr/local/FastDFS/conf/* /etc/fdfs/
配置tracker
切换到/etc/fdfs/目录下,拷贝一份新的tracker配置文件,并修改tracker.conf
// 切换到/etc/fdfs/目录下
cd /etc/fdfs/
// 拷贝一份新的tracker配置文件
cp tracker.conf.sample tracker.conf
//修改tracker.conf
vim tracker.conf
//修改base_path路径
base_path=/home/yuqing/fastdfs 改为: base_path=/home/fastdfs
//配置http端口号
http.server_port 改为: 80
修改如下(本人喜欢用EditPlus编辑,具体设置在《如何在阿里云服务器上搭建Java环境》博客中讲到,这不再赘述):
创建 /home/fastdfs 目录,并启动tracker,在/home/fastdfs/ 目录下生成两个目录, 一个是数据,一个是日志;
// 创建 /home/fastdfs 目录
mkdir /home/fastdfs
//启动tracker
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
配置storage
切换到/etc/fdfs目录下,拷贝一份新的storage
// 切换目录到: /etc/fdfs/ 目录下
cd /etc/fdfs/
//拷贝一份新的storage配置文件
cp storage.conf.sample storage.conf
//修改storage.conf
vim storage.conf
//group_name=group1 #配置组名
base_path=/home/yuqing/fastdfs 改为: base_path=/home/fastdfs
//store存放文件的位置(store_path)
store_path0=/home/yuqing/fastdfs 改为: store_path0=/home/fdfs_storage
//如果有多个挂载磁盘则定义多个store_path,修改如下:
#store_path1=.....
#store_path2=......
//配置tracker服务器:IP
tracker_server=XXX.XXX.XXX.XX:22122
//如果有多个则配置多个tracker
tracker_server=XXX.XXX.XX.X:22122
//配置http端口
http.server_port=88
创建 /home/fdfs_storage 目录
// 创建 /home/fdfs_storage 目录
mkdir /home/fdfs_storage
启动storage
// 启动storage
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
注:有的粉丝说到这启动失败,原因主要是在阿里云服务器没有放开端口,具体放开阿里云服务器端口的步骤在《如何在阿里云上搭建tomcat(最新版)》博客中详细讲到,这就不再赘述了!
启动完成后进入 /home/fdfs_storage/data 目录下,成功配置会显示如下:
// 进入 /home/fdfs_storage/data
cd /home/fdfs_storage/data
测试FastDFS
切换目录到/etc/fdfs目录下,拷贝一份新的client配置文件
// 切换目录到/etc/fdfs目录下
yum install gcc-c++
//拷贝一份新的client配置文件
cp client.conf.sample client.conf
修改client.conf ; vim client.conf,修改基本路径和tracker_server
// 修改client.conf
vim client.conf
//修改基本路径
base_path=/home/yuqing/fastdfs 修改为:
base_path=/home/fastdfs
//修改tracker_server
tracker_server=XXX.XXX.XX.X:22122
//若tracker有多个,可以配置多个:
#tracker_server=......
#tracker_server=......
上传一张照片至/usr/local/fastdfs/目录下上传一张照片
测试之前,现在阿里云控制台添加23000的端口,放开上传端口
开始测试
// 上传测试
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /usr/local/fastdfs/yaoweijie.jpg
上图中的url地址就是对应照片的路径地址,对应的storage服务器上的/home/fdfs_storage/data/00/00/rBCbFl3TlPCAYVXxAAEJgrbl9M4712.jpg文件,由于现在还没有和nginx整合无法使用浏览器查看对应的图片和http下载
FastDFS 和nginx整合
在每个tracker上安装nginx,的主要目的是做负载均衡及实现高可用。如果只有一台tracker可以不配置nginx,一个tracker对应多个storage,通过nginx对storage负载均衡;
切换到/usr/lcoal/fastdfs解压nginx-1.8.0.tar.gz压缩包至/usr/local目录下
// 切换到/usr/lcoal/fastdfs目录下
cd /usr/local/fastdfs/
//解压nginx-1.8.0.tar.gz压缩包至/usr/local目录下
tar -zxvf fastdfs-nginx-module_v1.16.tar.gz -C /usr/local
切换目录到: /usr/local/fastdfs-nginx-module/src/ 目录下,修改config文件,将文件中的所有 /usr/local/ 路径改为 /usr/
// 切换目录到/usr/local/fastdfs-nginx-module/src/
cd /usr/local/fastdfs-nginx-module/src/
//修改config文件,将文件中的所有 /usr/local/ 路径改为 /usr/
将fastdfs-nginx-module/src下的mod_fastdfs.conf拷贝至/etc/fdfs/下,
并修改mod_fastdfs.conf
// 将fastdfs-nginx-module/src下的mod_fastdfs.conf拷贝至/etc/fdfs/下
cp mod_fastdfs.conf /etc/fdfs/
//修改 /etc/fdfs/mod_fastdfs.conf 的内容
vi /etc/fdfs/mod_fastdfs.conf
base_path=/tmp 修改为 base_path=/home/fastdfs
// 修改tracker_server为你的阿里云IP
//(多个tracker配置多行)
#tracker_server=192.168.172.20:22122
// url中包含group名称
url_have_group_name=true
// 指定文件存储路径(上面配置的store路径)
store_path0=/home/fdfs_storage
将libfdfsclient.so拷贝至/usr/lib下,创建nginx/client目录
// 将libfdfsclient.so拷贝至/usr/lib下
cp /usr/lib64/libfdfsclient.so /usr/lib/
//创建nginx/client目录
mkdir -p /var/temp/nginx/client
安装nginx
// 切换到/usr/lcoal/fastdfs目录下,下载nginx
cd /usr/local/fastdfs/
wget http://nginx.org/download/nginx-1.17.5.tar.gz
//解压 nginx-1.17.5.tar.gz 到 /usr/local目录下
tar -zxvf nginx-1.17.5.tar.gz -C /usr/local
安装nginx的依赖库,安装成功如下图所示
//安装nginx的依赖库
yum install pcre && yum install pcre-devel && yum install zlib && yum install zlib-devel && yum install openssl && yum install openssl-devel
进入nginx解压的目录下,加入模块命令配置
// 进入nginx解压的目录下
cd /usr/local/nginx-1.17.5/
//加入模块命令配置
./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=/usr/local/fastdfs-nginx-module/src
安装成功如下图所示
编译并安装
// 编译并安装
make && make install
安装成功后查看/usr/local/nginx目录下,是否含有以下文件
// 切换到/usr/local/nginx目录下
cd /usr/local/nginx
拷贝文件到/etc/fdfs 下
// 拷贝文件到/etc/fdfs 下
cd /usr/local/FastDFS/conf
cp http.conf mime.types /etc/fdfs/
//创建logs目录
mkdir /usr/local/nginx/logs
//切换到/usr/local/nginx/conf/目录下
cd /usr/local/nginx/conf/
//修改nginx文件
vim nginx.conf
修改文件中的pid和sever配置,server_name指定本机ip,ocation /group1/M00/:group1为nginx 服务FastDFS的分组名称,M00是FastDFS自动生成编号,对应store_path0=/home/fdfs_storage,如果FastDFS定义store_path1,这里就是M01
// 修改pid
pid /usr/local/nginx/logs/nginx.pid;
//修改server配置
location /group1/M00/ {
root /home/fdfs_storage/data;
ngx_fastdfs_module;
}
启动nginx
// 切换到sbin目录下
cd /usr/local/nginx/sbin/
//启动nginx
./nginx
//查询nginx进程
ps -ef | grep nginx
在浏览器中访问上传到fastDFS的图片
在浏览器中访问刚才上传的图片,如下图所示:
注意:
如果效果没有出来,一定注意在阿里云服务器上放开相应的端口:
放开端口参考这篇博客《如何在阿里云服务器上搭建mysql服务(最新版)》
还有就是关闭防火墙
// 关闭firewall防火墙
//停止firewall
systemctl stop firewalld.service
//禁止firewall开机启动
systemctl disable firewalld.service
//查看默认防火墙状态(关闭后显示notrunning,开启后显示running)
firewall-cmd --state
// 关闭iptables防火墙
//临时关闭防火墙
service iptables stop
//永久关闭防火墙
chkconfig iptables off