FastDFS简介
FastDFS是一个轻量级的开源分布式文件系统
FastDFS主要解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡
FastDFS实现了软件方式的RAID,可以使用廉价的IDE硬盘进行存储
支持存储服务器在线扩容
支持相同内容的文件只保存一份,节约磁盘空间
FastDFS只能通过Client API访问,不支持POSIX访问方式
FastDFS特别适合大中型网站使用,用来存储资源文件(如:图片、文档、音频、视频等等)
系统架构
跟踪服务器:192.168.1.131(安装到consume)
存储服务器:192.168.1.51(安装到CI服务器)
环境:CentOS6.6
用户:root
数据目录 :/fastdffs(数据目录按你的数据盘挂载路径而定)
安装包
FastDFS v5.05
libfastcommon-master.zip(是从 FastDFS 和 FastDHT 中提取出来的公共 C 函数库) fastdfs-nginx-module_v1.16.tar.gz
nginx-1.6.2.tar.gz
fastdfs_client_java._v1.25.tar.gz
源码地址:https://github.com/happyfish100/
下载地址:http://sourceforge.net/projects/fastdfs/files/
官方论坛:http://bbs.chinaunix.net/forum-240-1.html
一、所有跟踪服务器和存储服务器均执行如下操作
1.编译和安装所需的依赖包
Connecting to 192.168.1.131:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Last login: Sun Apr 3 00:12:21 2016 from 192.168.1.2
[root@consume ~]# yum install make cmake gcc gcc-c++
2.
安装 libfastcommon:
(1)上传或下载 libfastcommon-master.zip 到/usr/local/src 目录
(2)解压
[root@consume ~]# cd /usr/local/src/
[root@consume src]# unzip libfastcommon-master.zip
[root@consume src]# cd libfastcommon-master
[root@consume libfastcommon-master]# ll
total 28
-rw-r--r--. 1 root root 2913 Feb 27 2015 HISTORY
-rw-r--r--. 1 root root 582 Feb 27 2015 INSTALL
-rw-r--r--. 1 root root 1342 Feb 27 2015 libfastcommon.spec
-rwxr-xr-x. 1 root root 2151 Feb 27 2015 make.sh
drwxr-xr-x. 2 root root 4096 Feb 27 2015 php-fastcommon
-rw-r--r--. 1 root root 617 Feb 27 2015 README
drwxr-xr-x. 2 root root 4096 Feb 27 2015 src
(3) 编译、安装
[root@consume libfastcommon-master]# ./make.sh# libfastcommon默认安装到了
/usr/lib64/libfastcommon.so
/usr/lib64/libfdfsclient.so
(4)因为 FastDFS 主程序设置的 lib 目录是/usr/local/lib,所以需要创建软链接.
[root@consume libfastcommon-master]# ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
安装 FastDFS
(1)上传或下载 FastDFS 源码包(FastDFS_v5.05.tar.gz)到 /usr/local/src 目录
(2)解压
[root@consume libfastcommon-master]# cd /usr/local/src
root@consume src]# ll | grep Fast
-rw-r--r--. 1 root root 345400 Mar 25 2015 FastDFS_v5.05.tar.gz
[root@consume src]# tar -zxvf FastDFS_v5.05.tar.gz
(3)编译、安装(编译前要确保已经成功安装了 libfastcommon)
[root@consume src]# cd FastDFS
[root@consume FastDFS]# ./make.sh
[root@consume FastDFS]# ./make.sh install
4)因为 FastDFS 服务脚本设置的 bin 目录是/usr/local/bin,但实际命令安装在/usr/bin,可以进入
/user/bin 目录使用以下命令查看 fdfs 的相关命令:
[root@consume FastDFS]# cd /usr/bin
[root@consume bin]# ll | grep fdfs
因此需要修改 FastDFS 服务脚本中相应的命令路径,也就是把/etc/init.d/fdfs_storaged
和/etc/init.d/fdfs_tracker 两个脚本中的/usr/local/bin 修改成/usr/bin:
使用查找替换命令进统一修改:%s+/usr/local/bin+/usr/bin
[root@consume bin]# cd /etc/init.d
[root@consume init.d]# vi fdfs_trackerd
[root@consume init.d]# vi fdfs_storaged
跟踪器与存储器配置文件都更改是为了保证文件的同步和一致性
二、配置 FastDFS 跟踪器(192.168.1.131)
1、复制 FastDFS 跟踪器样例配置文件,并重命名:
[root@consume init.d]# cd /etc/fdfs/
[root@consume fdfs]# ll
total 20
-rw-r--r--. 1 root root 1461 Apr 3 19:11 client.conf.sample
-rw-r--r--. 1 root root 7829 Apr 3 19:11 storage.conf.sample
-rw-r--r--. 1 root root 7102 Apr 3 19:11 tracker.conf.sample
[root@consume fdfs]# cp tracker.conf.sample tracker.conf
2、编辑跟踪器配置文件:
[root@consume fdfs]# vi /etc/fdfs/tracker.conf
修改的内容如下:
disabled=false
port=22122
base_path=/fastdfs/tracker
(其它参数保留默认配置,具体配置解释请参考官方文档说明:
http://bbs.chinaunix.net/thread-1941456-1-1.html )
3、 创建基础数据目录(参考基础目录 base_path 配置):
[root@consume fdfs]# mkdir -p /fastdfs/tracker4、 防火墙中打开跟踪器端口(默认为 22122):
[root@consume fdfs]# vi /etc/sysconfig/iptables添加:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT
[root@consume fdfs]# cat /etc/sysconfig/iptables | grep 22122
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT
重启
[root@consume fdfs]# service iptables restart
5、 启动 Tracker:
[root@consume fdfs]# /etc/init.d/fdfs_trackerd start查看 FastDFS Tracker 是否已成功启动:
[root@consume fdfs]# ps -ef | grep fdfs
root 3870 1 0 19:50 ? 00:00:00 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
root 3879 3028 0 19:51 pts/0 00:00:00 grep fdfs
(初次成功启动,会在/fastdfs/tracker 目录下创建 data、logs 两个目录)
[root@consume fdfs]# ll /fastdfs/tracker/
total 8
drwxr-xr-x. 2 root root 4096 Apr 3 19:50 data
drwxr-xr-x. 2 root root 4096 Apr 3 19:50 logs
[root@consume fdfs]#
6.关闭 Tracker
[root@consume fdfs]# /etc/init.d/fdfs_trackerd stop7、 设置 FastDFS 跟踪器开机启动:
[root@consume fdfs]# vi /etc/rc.d/rc.local
## FastDFS Tracker
/etc/init.d/fdfs_trackerd start
验证是否设置开机启动[root@consume fdfs]# /etc/init.d/fdfs_trackerd status
fdfs_trackerd is stopped
[root@consume fdfs]# reboot
Connecting to 192.168.1.131:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Last login: Sun Apr 3 18:44:38 2016 from 192.168.1.2
[root@consume ~]# /etc/init.d/fdfs_trackerd status
fdfs_trackerd (pid 2152) is running...
[root@consume ~]#
三、配置 FastDFS 存储(192.168.1.51)
1、 复制 FastDFS 存储器样例配置文件,并重命名:
[root@yxq init.d]# cd /etc/fdfs
[root@yxq fdfs]# ll
total 20
-rw-r--r-- 1 root root 1461 Apr 3 21:45 client.conf.sample
-rw-r--r-- 1 root root 7829 Apr 3 21:45 storage.conf.sample
-rw-r--r-- 1 root root 7102 Apr 3 21:45 tracker.conf.sample
[root@yxq fdfs]# cp storage.conf.sample storage.conf
2、 编辑存储器样例配置文件:
[root@yxq fdfs]# vi /etc/fdfs/storage.conf
修改的内容如下: disabled=false port=23000
base_path=/fastdfs/storage
store_path0=/fastdfs/storage
tracker_server=192.168.4.131:22122
http.server_port=8888
(其它参数保留默认配置,具体配置解释请参考官方文档说明:
http://bbs.chinaunix.net/thread-1941456-1-1.html )
3、 创建基础数据目录(参考基础目录 base_path 配置):
[root@yxq fdfs]# mkdir -p /fastdfs/storage4、 防火墙中打开存储器端口(默认为 23000):
[root@yxq fdfs]# vi /etc/sysconfig/iptables
添加如下端口行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT
[root@yxq fdfs]# cat /etc/sysconfig/iptables | grep 23000
-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT
重启防火墙:
[root@yxq fdfs]# service iptables restart
5、 启动 Storage:
[root@yxq fdfs]# /etc/init.d/fdfs_storaged start看 FastDFS Storage 是否已成功启动
[root@yxq fdfs]# ps -ef | grep fdfs(初次成功启动,会在/fastdfs/storage 目录下创建data、logs 两个目录)
[root@yxq fdfs]# ll /fastdfs/storage/6、 关闭 Storage:
[root@yxq fdfs]# /etc/init.d/fdfs_storaged stop7、 设置 FastDFS 存储器开机启动:
[root@yxq fdfs]# vi /etc/rc.d/rc.local添加:
## FastDFS Storage
/etc/init.d/fdfs_storaged start
四、文件上传测试(192.168.4.121)
1、修改 Tracker 服务器中的客户端配置文件:
[root@consume ~]# cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
[root@consume ~]# vi /etc/fdfs/client.conf
修改
tracker_server=192.168.1.131:22122
执行如下命令
[root@consume ~]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /usr/local/src/FastDFS_v5.05.tar.gz
group1/M00/00/00/wKgBM1cB-y2AFWsAAAVFOL7FJU4.tar.gz
(能返回以上文件ID,说明文件上传成功)
以也可以在存储服务器根据group1查看
[root@yxq fdfs]# ll /fastdfs/storage/data/00/00/
total 340
-rw-r--r-- 1 root root 345400 Apr 3 22:27 wKgBM1cB-y2AFWsAAAVFOL7FJU4.tar.gz
[root@yxq fdfs]# date
Sun Apr 3 22:31:54 PDT 2016
[root@yxq fdfs]#
六、在每个存储节点上安装nginx(只需要在存储节点服务器上安装即可)
1.fastdfs-nginx-module作用说明:
FastDFS通过Tracker服务器,将文件放在Storage服务器存储,但是同组存储服务器之间需要进入文件复制,有同步延迟问题。
假设Tracker服务器将文件 上传到了192.168.1.51,上传成功后文件ID已经返回给客户端。此时FastDFS存储集群机制会将这个文件
同步到存储192.168.1.52,在文件还没有复制完成的情况下,客户端如果用这个文件 ID在192.168.1.52上取文件,就会出现文件无
法访问的错误,而fastdfs-nginx-module可以重定向文件连接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错
误。(解压后的fastdfs-nnginx-module在nginx安装时使用)
2.上传fastdfs-nginx-module_v1.16.tar.gz到/usr/local/src中(开始已经上传)
3.解压
[root@yxq src]# ls
FastDFS FastDFS_v5.05.tar.gz ng
fastdfs_client_java._v1.25.tar.gz libfastcommon-master re
fastdfs-nginx-module_v1.16.tar.gz libfastcommon-master.zip re
[root@yxq src]# tar -zxvf fastdfs-nginx-module_v1.16.tar.gz
4、修改fastdfs-nginx-module的config配置文件
[root@yxq src]# cd fastdfs-nginx-module/src
[root@yxq src]# vi config
CORE_INCS="$CORE_INCS /usr/local/include/fastdfs /usr/local/include/fastcommon/"
修改为
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
5.上传当前稳定版本Nginx(nginx-1.6.2.tar.gz) 到/usr/local/src目录
6.安装编译Nginx所需的依赖包
[root@yxq src]# yum install gcc gcc-c++ make automake autoconf libtool pcre* zlib openssl openssl-devel
7.编译安装Nginx(添加fastdfs-nginx-module模块)
[root@yxq src]# cd /usr/local/src/
[root@yxq src]# tar -zxvf nginx-1.6.2.tar.gz
[root@yxq src]# cd nginx-1.6.2
[root@yxq nginx-1.6.2]# ./configure --add-module=/usr/local/src/fastdfs-nginx-module/src
[root@yxq nginx-1.6.2]# make && make install
8、复制fastdfs-nginx-module源码中的配置文件到/etc/fdfs目录 ,并修改
[root@yxq nginx-1.6.2]# cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
修改以下配置
connect_timeout=10
base_path=/tmp
tracker_server=192.168.1.131:22122
storage_server_port=23000
group_name=group1
url_have_group_name = true
store_path0=/fastdfs/storage
9、复制FastDFS的部分配置文件到/etc/fdfs目录
[root@yxq nginx-1.6.2]# cd /usr/local/src/FastDFS/conf
[root@yxq conf]# cp http.conf mime.types /etc/fdfs/
10、在/fastdfs/storage文件存储目录 下创建软连接,将其连接到实际存放数据的目录
[root@yxq conf]# ln -s /fastdfs/storage/data /fastdfs/storage/data/M00
11、配置Nginx
简洁版nginx配置样例
root@yxq conf]# cd /usr/local/nginx/
[root@yxq nginx-1.6.2]# cd conf
[root@yxq conf]# ls
fastcgi.conf koi-utf mime.types scgi_params win-utf
fastcgi_params koi-win nginx.conf uwsgi_params
[root@yxq conf]# vi nginx.conf
user root;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#keepalive_timeout 0;
keepalive_timeout 65;
server {
listen 8888;
server_name localhost;
location ~/group([0-9]) /M00{
#alias /fastdfs/storage/data;
ngx_fastdfs_module;
}
#error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
}
注意、说明
A.8888端口值是要与/etc/fdfs/storage.conf的http.server_port=8888相对应
因为http.server_port默认为8888,如果想改成80,则要对应修改过来
B.Storage对应有多个group的情况下,访问路径带group名,如/group1/M00/00/xxx,
对应的Nginx配置为
location ~/group([0-9]) /M00{
ngx_fastdfs_module;
}
C.如查下载时如发现老报404,将nginx.conf第一行的user nobody修改为user root后重启
12.防火墙中打开Nginx的8888端口
[root@yxq conf]# vi /etc/sysconfig/iptables
添加
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8888 -j ACCEPT
[root@yxq conf]# cat /etc/sysconfig/iptables | grep 8888
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8888 -j ACCEPT
[root@yxq conf]# service iptables restart
13、启动Nginx
[root@yxq conf]# /usr/local/nginx/sbin/nginx
ngx_http_fastdfs_set pid=15553
(重启Nginx的命令为:/usr/local/nginx/sbin/nginx -s reload
[root@yxq conf]# /usr/local/nginx/sbin/nginx -s reload
ngx_http_fastdfs_set pid=15557
[root@yxq conf]# ps -ef | grep ngx_http_fastdfs_set
root 15561 11293 0 23:25 pts/0 00:00:00 grep ngx_http_fastdfs_set
[root@yxq conf]#
)
14、通过浏览器访问测试上传的文件
访问上传的文件