安装gcc(编译时需要)
FastDFS是C语言开发,安装FastDFS需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc
yum install -y gcc gcc-c++
后面会用到解压命令(unzip),所以这里可以用yum把unzip 也装一下
yum install -y unzip zip
安装libevent
yum -y install libevent
安装libfastcommon-master
解压刚刚上传的libfastcommon-master.zip
unzip libfastcommon-master.zip
进入解压完成的目录
cd libfastcommon-master
编译并且安装:
./make.sh
./make.sh install
注意:由于FastDFS程序引用usr/lib目录所以需要将/usr/lib64下的库文件拷贝至/usr/lib下。
cp /usr/lib64/libfastcommon.so /usr/lib/
安装fastdfs之前必须要关闭服务器的防火墙
systemctl stop firewalld.service
安装依赖包(避免出现fastDFS安装时,./make.sh编译时出错—perl:未找到命令)
yum -y install libevent libevent-devel perl make gcc zlib zlib-devel pcre pcre-devel gcc-c++ openssl-devel
安装fastdfs
tar -zxvf FastDFS_v5.08.tar.gz
cd FastDFS
./make.sh
./make.sh install
如果安装成功,会看到/etc/init.d/下看到提供的脚本文件: ll /etc/init.d/ | grep fdfs
fdfs_trackerd 是tracker启动脚本
fdfs_storaged 是storage启动脚本
能够在 /etc/fdfs/ 目录下看到默认的配置文件模板:ll /etc/fdfs/
tarcker.conf.sample 是tracker的配置文件模板
storage.conf.sample 是storage的配置文件模板
client.conf.sample 是客户端的配置文件模板
创建目录,用于记录 tracker日志、storage server等信息。 (这一步不知道是否有起到作用)
mkdir -m 755 -p /opt/fastdfs
-m 建立目录时同时设置目录的权限
-p 建立多个目录。
FastDFS的tracker和storage在刚刚的安装过程中,都已经被安装了,因此我们安装这两种角色的方式是一样的。不同的是,两种需要不同的配置文件。
我们要启动tracker,就修改刚刚看到的tarcker.conf,并且启动fdfs_trackerd脚本即可
首先将模板文件复制
cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
修改复制后的配置文件:
vi /etc/fdfs/tracker.conf
修改的内容如下:
base_path=/fastdfs/tracker # 存储日志和数据的根目录
新建目录:
mkdir -p /fastdfs/tracker
启动tracker
fdfs_trackerd /etc/fdfs/tracker.conf
检查FastDFS Tracker Server是否启动成功:
如果通过 systemctl start fdfs_trackerd 来启动会报错 centos6.7可以通过 server fdfs_trackerd start 来启动,但这里不行
设置tracker服务开机启动:
chkconfig fdfs_trackerd on
首先将模板文件复制
cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
修改复制后的配置文件:
vi /etc/fdfs/storage.conf
修改的内容如下:
base_path=/fastdfs/storage # 数据和日志文件存储根目录
store_path0=/fastdfs/storage # 第一个存储目录
tracker_server=192.168.227.136:22122 # tracker服务器IP和端口
新建目录:
mkdir -p /fastdfs/storage
启动storage
fdfs_storaged /etc/fdfs/storage.conf
设置storage服务开机启动:
chkconfig fdfs_storaged on
FastDFS通过Tracker服务器,将文件放在Storage服务器存储,但是同组存储服务器之间需要进入文件复制,有同步延迟的问题。
假设Tracker服务器将文件上传到了192.168.4.125,上传成功后文件ID已经返回给客户端。此时FastDFS存储集群机制会将这个文件同步到同组存储192.168.4.126,在文件还没有复制完成的情况下,客户端如果用这个文件ID在192.168.4.126上取文件,就会出现文件无法访问的错误。
而fastdfs-nginx-module可以重定向文件连接到文件上传时的源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误
安装fastdfs-nginx-module
tar -zxvf fastdfs-nginx-module_v1.16.tar.gz
修改config
cd fastdfs-nginx-module/src/
vi config
使用以下底行命令:
:%s+/usr/local/+/usr/+g
将所有的/usr/local替换为 /usr,这个才是正确的目录:
复制 fastdfs-nginx-module 源码中的配置文件到/etc/fdfs 目录, 并修改
cp /usr/local/fdfs/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
vi /etc/fdfs/mod_fastdfs.conf
修改以下配置:
connect_timeout=10 # 客户端访问文件连接超时时长(单位:秒)
tracker_server=192.168.56.101:22122 # tracker服务IP和端口
url_have_group_name=true # 访问链接前缀加上组名
store_path0=/fastdfs/storage # 文件存储路径
复制 FastDFS 的部分配置文件到/etc/fdfs 目录
cd /usr/local/fdfs/FastDFS/conf/
cp http.conf mime.types /etc/fdfs/
安装nginx的依赖库
yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
解压安装包
tar -zxvf nginx-1.10.0.tar.gz
配置nginx安装包,并指定fastdfs-nginx-model
cd nginx-1.10.0
./configure --prefix=/opt/nginx --sbin-path=/usr/bin/nginx --add-module=/usr/local/fdfs/fastdfs-nginx-module/src
注意:在执行./configure配置nginx参数的时候,需要将fastdfs-nginx-moudle源码作为模块编译进去。
编译并安装
make && make install
进入nginx目录
cd /usr/local/fdfs/nginx-1.10.0/
配置FastDFS 模块
./configure --prefix=/opt/nginx --sbin-path=/usr/bin/nginx --add-module=/usr/local/fdfs/fastdfs-nginx-module/src
注意:这次配置时,要添加fastdfs-nginx-moudle模块
编译,注意,这次不要安装(install)
make
替换nginx二进制文件:
备份
mv /usr/bin/nginx /usr/bin/nginx-bak
用新编译的nginx启动文件替代原来的:
cp objs/nginx /usr/bin/
配置nginx整合fastdfs-module模块
我们需要修改nginx配置文件,在/opt/nginx/config/nginx.conf文件中:
vi /opt/nginx/conf/nginx.conf
将文件中,原来的server 80{ ...}
部分代码替换为如下代码:
server {
listen 80;
server_name image.leyou.com;
# 监听域名中带有group的,交给FastDFS模块处理
location ~/group([0-9])/ {
ngx_fastdfs_module;
}
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
启动nginx:
nginx # 启动nginx
nginx -s stop # 停止nginx
nginx -s reload # 重新载入配置文件
出现上面两种情况:基本上大功告成了