说两句
搭建FastDFS踩了些坑,搞了快2天才搞定,记录操作步骤和踩过的坑。
FastDFS是一个开源的分布式文件系统。废话不多说,这是开源git地址:https://github.com/happyfish100
我的安装包全部是在git上下载的。
安装环境准备
- 依赖安装
FastDFS基于C语言开发,安装FastDFS需要先将源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc
yum install -y gcc gcc-c++
FastDFS依赖libevent库,需要安装
yum -y install libevent
- 安装包下载
我喜欢的方式把需要的包一次性下载好,直接从git上下载安装包:
wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz #FastDFS安装包
wget https://github.com/happyfish100/libfastcommon/archive/V1.0.39.tar.gz #libfastcommon安装包
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.20.tar.gz #
当然也可以装一个下载一个,为了方便一些,我以单个下载安装为例。
开始安装
- 安装 libfastcommon
安装FastDFS还需要安装libfastcommon作为前提条件,首先准备安装包FastDFS和libfastcommon。
- 下载安装 libfastcommon,这里是通过wget下载
wget https://github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz
- 解压 libfastcommon,命令:
tar-zxvf V1.0.7.tar.gz
- 进入目录编译,进入libfastcommon-1.0.7目录:
cd libfastcommon-1.0.7
编译:
./make.sh
- 安装,命令:
./make.sh install
- libfastcommon安装好后会自动将库文件拷贝至/usr/lib64下,由于FastDFS程序引用usr/lib目录所以需要将/usr/lib64下的库文件拷贝至/usr/lib下,只需要将libfastcommon.so 拷贝过去即可,不需要全部拷贝,这一步重要。
cp /usr/lib64/libfastcommon.so /usr/lib
- 安装FastDFS
FastDFS包含tracker、Storage
- 下载安装 FastDFS,这里也是通过wget下载。
wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz
- 解压
tar -zxvf V5.11.tar.gz
- 编译,进入fastfds-5.05目录,命令:
cd fastdfs-5.11/
编译:
./make.sh
- 安装
./make.sh install
安装任务已经完成了,就是这么简单。下面开始配置tracker、Storage
- 配置tracker
上述安装成功后,在/etc/目录下会有一个fdfs的目录,进入它。会看到四个.sample后缀的文件,这是作者给我们的示例文件,我们需要把其中的tracker.conf.sample文件改为tracker.conf配置文件并修改它。看命令:
拷贝tracker.conf:
cp tracker.conf.sample tracker.conf
编辑:
vim tracker.conf
将
base_path=/home/yuqing/fastdfs
改为:
base_path=/data/fastdfs
注意:在启动tracker时,如果没有/data/fastdfs这个目录会启动失败,需要手动添加目录
mkdir -p /data/fastdfs
启动tracker
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
设置开机自动启动,编辑文件
vim /etc/rc.d/rc.local
添加:
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
以上操作已经完成了tracker的配置。启动命令我们可以优化一下,通过建立软链接的方式:
ln -s /usr/bin/fdfs_trackerd /usr/local/bin/
ln -s /usr/bin/stop.sh /usr/local/bin/
ln -s /usr/bin/restart.sh /usr/local/bin/
重启服务器测试一下:
service fdfs_trackerd restart
查看一下监听端口:
netstat -unltp | grep fdfs
- 配置Storage
现在开始配置 Storage 服务,由于我这是单机器测试,你把 Storage 服务放在多台服务器也是可以的,它有Group(组)的概念,同一组内服务器互备同步,这里不再演示。直接开始配置,依然是进入/etc/fdfs的目录操作,首先进入它。会看到三个.sample后缀的文件,我们需要把其中的storage.conf.sample文件改为storage.conf配置文件并修改它。还看命令:
拷贝storage.conf
cp storage.conf.sample storage.conf
编辑:
vim storage.conf
将
base_path=/home/yuqing/fastdfs
修改为:base_path=/data/fastdfs/storage
store_path0=/home/yuqing/fastdfs
修改为:store_path0=/data/fastdfs/storage
tracker_server=192.168.209.121:22122
修改为:本机IP:22122
注意:在
/data/fastdfs
目录下没有storage
文件夹,此时需要手动创建
cd /data/fastdfs
#进入目录
mkdir storage
#创建文件
启动Storage
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
设置开机自动启动,编辑文件
vim /etc/rc.d/rc.local
添加:
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
以上操作已经完成了Storage的配置。当然启动命令还是可以优化的,还是通过软链接的方式:
ln -s /usr/bin/fdfs_storaged /usr/local/bin/
重启服务器测试一下:
service fdfs_storaged restart
查看一下监听端口:
netstat -unltp | grep fdfs
测试文件上传需要做的事情
fastdfs安装成功可通过/usr/bin/fdfs_test测试上传、下载等操作
拷贝client.conf
cp client.conf.sample client.conf
编辑
vim client.conf
将
base_path=/home/yuqing/fastdfs
修改和tracker.conf文件中base_path一样的配置路径,如:base_path=/data/fastdfs
tracker_server=192.168.0.197:22122
修改为本机IP:22122
上传文件测试
使用格式:
/usr/bin/fdfs_test + 客户端配置文件地址 + upload + 上传文件
例如将,/img/test.jpg 上传,键入命令:
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /img/test.jpg
文件上传成功后,输出http文件访问路径:
http://192.168.48.132/group1/M00/00/00/wKgwhFvEkZCAD_-1AAIWPJ2Hf5Y850.jpg
文件保存路径:
/data/fastdfs/storage/data/00/00/wKgShlu_gyGALPf_AAGttmZnfCs194.jpg
由于现在还没有和nginx整合无法使用http下载FastDFS和nginx整合
- 安装fastdfs-nginx-module
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.20.tar.gz
- 解压
tar -zxvf V1.20.tar.gz
- 将
fastdfs-nginx-module
移动到/usr/local
目录
mv fastdfs-nginx-module /usr/local/
- 进入文件目录
cd fastdfs-nginx-module/src/
- 修改config文件,查找下面这两行代码将
ngx_module_incs="/usr/local/include"
CORE_INCS="$CORE_INCS /usr/local/include"
修改为:
ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
简单说就是把/usr/local/include
,修改为/usr/include
,切记一定要加上/usr/include/fastcommon/
,这个坑踩了好久,据了解是版本问题导致的!!!!
- 将FastDFS-nginx-module/src下的mod_FastDFS.conf拷贝至/etc/fdfs/下
cp mod_fastdfs.conf /etc/fdfs/
- 修改mod_FastDFS.conf的内容
vim /etc/fdfs/mod_fastdfs.conf
:
base_path=/tmp 修改为 base_path=/data/fastdfs
tracker_server=tracker:22122 修改为 tracker_server= 本机:22122
store_path0=/home/yuqing/fastdfs 修改为 store_path0=/data/fastdfs/storage
url_have_group_name=false 修改为 url_have_group_name=true
- 将libfdfsclient.so拷贝至/usr/lib下
cp /usr/lib64/libfdfsclient.so /usr/lib
- 安装nginx
Nginx的安装需要有一些安装环境,nginx依赖包安装:
1、yum install gcc-c++
2、yum install -y pcre pcre-devel
3、yum install -y zlib zlib-devel
4、yum install -y openssl openssl-devel
下载nginx安装包
wget https://nginx.org/download/nginx-1.8.1.tar.gz
解压
tar -zxvf nginx-1.8.1.tar.gz
进入源码目录
cd nginx-1.8.1
创建nginx所需安装目录
mkdir -p /var/temp/nginx/client
执行
./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
执行完毕后会生成一个MakeFile文件,然后就就可在该路径下进行编译和安装了
编译:make
安装: make install
重要操作:
虽然nginx安装成功了,但是会出现无法访问的问题,一个超级大的坑。
解决方式:进入fastdfs源码目录,源码的存放位置
cd /opt/fastdfs-5.11/conf/
将该子目录中的http.conf、mime.types拷贝到/etc/fdfs
cp http.conf /etc/fdfs
cp mime.types /etc/fdfs
- Nginx配置
在/usr/local/nginx/conf下,找到nginx.conf,增加配置信息:
vim /usr/local/nginx/conf/nginx.conf
location /group1/M00/{
ngx_fastdfs_module;
}
如图:
重新加载nginx配置文件
cd /usr/local/nginx/sbin
./nginx -s reload
启动nginx
cd /usr/local/nginx/sbin
./nginx
如果出现下图表示nginx搭建成功了:
访问之前测试时生成的链接就可以看到图片了,这样算是完成FastDFS+nginx的整合了。
一个需要注意的小问题:
如何机器重启nginx会出现启动失败的情况,错误信息如下:
nginx: [emerg] open() "/var/run/nginx/nginx.pid" failed (2: No such file or directory)
解决方式:
1、在nginx安装目录,创建logs文件夹,我的安装目录是/usr/local/nginx/
,直接在这个目录下创建logs文件夹
mkdir logs
2、修改nginx配置文件,vim /usr/local/nginx/conf/nginx.conf
:
把#pid logs/nginx.pid;
的注释删除,路径修改为创建logs的路径,即
pid /usr/local/nginx/logs/nginx.pid;
OK!!!
偶!对了还有防火墙的问题,我想你能自己解决!!!