FastDFS是一个开源的轻量级的分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。
操作系统:CentOS release 6.5(Final)
ip:20.10.80.17
主机名:localhost.localdomain
部署角色:tracker storage nginx
yum -y install gcc gcc+ gcc-c++ openssl openssl-devel pcre pcre-devel
注:参照文件“fastdfs安装前准备组件安装.docx“
检测防火墙是否开启命令:service iptables status
防火墙关闭命令:service iptables stop
注:为了方便测试 关闭防火墙 service iptables stop
搭建完毕之后可以将相应端口及规则加入到防火墙中(端口填写自己配置的实际端口)
tracker添加到防火墙规则中
源码下载,下载后统一拷贝到目录/usr/local/src/
2.1.1 下载fastDFS 5.01 地址:
http://jaist.dl.sourceforge.net/project/fastdfs/FastDFS%20Server%20Source%20Code/FastDFS%20Server%20with%20PHP%20Extension%20Source%20Code%20V5.01/FastDFS_v5.01.tar
2.1.2 下载 nginx 1.7.0:
http://nginx.org/download/nginx-1.7.0.tar.gz
2.1.3 fastdfs-nginx-module_v1.16:
http://jaist.dl.sourceforge.net/project/fastdfs/FastDFS%20Nginx%20Module%20Source%20Code/fastdfs-nginx-module_v1.16.tar.gz
cd /usr/local/src/
tar xf FastDFS_v5.01.tar.gz
cd FastDFS
./make.sh && ./make.sh install
cd /usr/local/src/
tar -zxvf fastdfs-nginx-module_v1.16.tar.gz
注意:zxvf
x : 从 tar 包中把文件提取出来
z : 表示 tar 包是被 gzip 压缩过的,所以解压时需要用 gunzip 解压
v : 显示详细信息
f xxx.tar.gz: 指定被处理的文件是 xxx.tar.gz,f后面必须跟上要处理的文件名,也就是说你不能写成这样 tar -zxfvfastdfs-nginx-module_v1.16.tar.gz
cd /usr/local/src/
tar xf nginx-1.7.0.tar.gz
cd nginx-1.7.0
//编译安装 nginx附带 fastdfs-nginx-module模块
./configure --user=nginx --group=nginx--prefix=/usr/local/nginx --add-module=../fastdfs-nginx-module/src
make
make install
mkdir -p /usr/local/src/fastdfs/tracker
vim /etc/fdfs/tracker.conf
主要修改项:
base_path= /usr/local/src/fastdfs/tracker
max_connections=100
work_threads=8
store_lookup=0
store_path=0
reserved_storage_space=10%
run_by_group=root
run_by_user=root
rotate_error_log=true
为了以后迁移数据的方便,个人推荐使用服务器的id生成文件的url名称,而不是默认的使用ip,如果使用id生成文件名url,在tracker.conf文件中修改如下参数
cp /usr/local/src/FastDFS/init.d/fdfs_trackerd /etc/init.d/ //服务脚本必须存放在/etc/ini.d/目录下
chkconfig --add fdfs_trackerd //增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据
chkconfig fdfs_trackerd on //设置开机启动
service fdfs_trackerd start //即使启动服务
创建数据存放目录
mkdir -p /usr/local/src/fastdfs/storage/data
修改FastDFS的storage.conf配置文件
vim /etc/fdfs/storage.conf
修改主要项目如下:
work_threads=8
store_path_count=1
base_path=/usr/local/src/fastdfs/storage
store_path0=/usr/local/src/ fastdfs/storage
##tracker_server 的地址
tracker_server=20.10.80.17:22122
如果是多个tracker_server的话,就直接写多个,如下图
##运行 FastDFS 的用户组
run_by_group=root
##运行 FastDFS 的用户
run_by_user=root
file_distribute_path_mode=1
rotate_error_log=true
把nginx模块的配置文件拷贝到 /etc/fdfs中,进行修改
cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
主要修改项
connect_timeout=30
tracker_server=20.10.80.17:22122
group_name=group1
url_have_group_name = true
store_path_count=1
store_path0=/usr/local/src/fastdfs/storage
vim /usr/local/nginx/conf/nginx.conf
修改后内容如下:
user root root; ---用户 用户组
worker_processes 3;
error_log /usr/local/nginx/logs/error.log;
error_log /usr/local/nginx/logs/error.log notice;
error_log /usr/local/nginx/logs/error.log info;
pid /usr/local/nginx/logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 50m;
log_format main '$remote_addr - $remote_user [$time_local]"$request"
'$status $body_bytes_sent"$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /usr/local/nginx/logs/access.log main;
upstream server_group1{
server20.10.80.17:80;
}
server {
listen80;
server_name localhost.localdomain;
access_log off;
#这里是对nginx和fastdfs-nginx-module的整合
location /group1/M00{
}
}
注意:如果要做storage集群的话,那么在upstream server_group1{}中将所有服务器放进去,如下图
ln -s /usr/local/src/fastdfs/storage/data /usr/local/src/fastdfs/storage/data/M00
这个软连接也可以不创建,不创建的话,data的根目录如下:
以group1/M00/14/F3/oYYBAFaPB7mETEqJAAAAAAgc1Og742.png为例,该图片在这里面直接进入14,然后进入F3就能找到
如果创建的软连接的话,如下图
在里面多了一个M00路径,可以通过进入M00,再进入14,再进入F3找到图片,当然直接进入14,进入F3也能找到,这只是一个连接。
因为我们再nginx的location里在group1下多配了一个M00路径。
cp /usr/local/src/FastDFS/init.d/fdfs_storaged /etc/init.d/
chkconfig --add fdfs_storaged
chkconfig fdfs_storaged on
service fdfs_storaged start
启动storage,会根据配置文件的设置自动创建多级存储目录,如下图:
a) nginx扩展模块,不能正常显示图片的问题
在配置文件/etc/fdfs/mod_fastdfs.conf中,缺省的设置是这样的:http.need_find_content_type=false这个参数在nginx中需要设置为true,apache中应该设置为false
注意:http.need_find_content_type=false这个配置是在/etc/fdfs/mod_fastdfs.conf中进行配置的,如果该配置文件中没有改配置就直接加上,保存之后重启nginx即可。
b) 400 bad request
[2011-12-1215:24:21] ERROR - file: /tmp/fastdfs-nginx-module/src/common.c, line: 561,logic file: M00/00/00/wKgBNU7lqyjzJZ4mAA4CRXl5SCQ670.jpg not exists
2011/12/12 15:24:21 [error] 14147#0: *1 open()"/home/nginx/nginx/html/favicon.ico" failed (2: No such file ordirectory), client: 192.168.1.123, server: localhost, request: "GET/favicon.ico HTTP/1.1", host: "20.10.80.17:80"
修改/fastdfs/conf/mod_fastdfs.conf里面url_have_group_name = true
1. 在20.10.80.17上启动tracker,storage,nginx
启动tracker service fdfs_trackerd start
启动storage service fdfs_storaged start
启动nginx /usr/local/nginx/sbin/nginx
如果启动nginx有问题,可以看下是不是这个博客所指的问题与解决方法
http://blog.csdn.net/ystyaoshengting/article/details/48681193
2. 配置一个client 在tracker上进行
vim /etc/fdfs/client.conf
base_path= /usr/local/src/fastdfs/storage
tracker_server=20.10.80.17:22122
如果是多个tracker的话,这里也是需要像storage.conf里说的那样写多个tracker_server
3. 查看集群详细
fdfs_monitor /etc/fdfs/client.conf
结果如下图
4. 测上传
fdfs_upload_file /etc/fdfs/client.conf /usr/fastdfs/hibernate.jpg
返回:/group1/M00/00/00/wKhQFFWYq1iAXUcbAAF9-d2hUpA735.jpg
5. 浏览器访问http://20.10.80.17/group1/M00/00/00/wKhQFFWYx6WAaeCIAALJTvfxx5I331.jpg检测上传是否成功