一、FastDFS官方介绍
FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实现,支持Linux、FreeBSD、AIX等UNIX系统。它只能通过 专有API对文件进行存取访问,不支持POSIX接口方式,不能mount使用。准确地讲,Google FS以及FastDFS、mogileFS、 HDFS、TFS等类Google FS都不是系统级的分布式文件系统,而是应用级的分布式文件存储服务。
1、FastDFS架构图
1)Tracker cluster中各个tracker server相互独立,不进行相互通信。
2)Storage cluster中各个storage组(Volume1,Volume2...)相互独立,不进行相互通信,也就是说各个组之间保存的数据是不相同的。但是各个组中的storage server之间是属于互相备份的关系,也就是说storage server之间保存相同的数据。
3)每个storage server会启动一个单独的线程主动向Tracker cluster中每个tracker server报告其状态信息,包括磁盘使用情况,文件同步情况及文件上传下载次数统计等信息。
2、文件上传和下载的时序图
1)Client通过Tracker server将文件上传到Storage server。
2)Tracker server向Client返回一台可用的Storage server的IP地址和端口号。
3)Client直接通过Tracker server返回的IP地址和端口与其中一台Storage server建立连接并进行文件上传。
4)上传完成,Storage server返回Client一个文件ID,文件上传结束。
1)Client通过Tracker server下载指定Storage组中某个Storage server上的某个文件(文件名包括Storage组名称)。
2)Tracker server向Client返回一台可用的Storage server的IP地址和端口号。
3)Client直接通过Tracker server返回的IP地址和端口与其中一台Storage server建立连接并进行文件下载。
二、安装并配置FastDFS
1、运行环境及相关软件
CentOS 7.4
FastDFS_v5.08.tar.gz
nginx-1.8.1.tar.gz
fastdfs-nginx-module_v1.16.tar.gz
libfastcommon
2、服务器规划
服务器名称
IP地址和端口
备注
fastdfs-tracker
* :22122
跟踪服务器/调度服务器
fastdfs-storage
* :23000
存储服务器
3、centOS安装GCC
首先先执行 whereis gcc 查看系统是否安装了GCC
已安装:
未安装:
如果未安装,执行Centos系统下载gcc命令:yum install gcc
安装完后执行上面的查询命令
4、安装FastDFS
1)首先创建工具目录(非必须)
创建目录:mkdir -p /home/oldcat/tools
进入目录:cd /home/oldcat/tools
2) 下载并安装FastDFS依赖包libfastcommon
下载: wget https://codeload.github.com/happyfish100/libfastcommon/zip/master
解压: unzip master
进入目录: cd libfastcommon-master/
安装: ./make.sh && ./make.sh install
3)下载并安装FastDFS
下载压缩包:wget http://jaist.dl.sourceforge.net/project/fastdfs/FastDFS%20Server%20Source%20Code/FastDFS%20Server%20with%20PHP%20Extension%20Source%20Code%20V5.08/FastDFS_v5.08.tar.gz
解压: tar xf FastDFS_v5.08.tar.gz
进入目录:cd FastDFS
安装: ./make.sh && ./make.sh install
采用默认方式安装后查看文件及目录:
1)服务脚本:ll /etc/init.d/ |grep fdfs
2)样例配置文件 :ll /etc/fdfs/
3)命令行工具:ll /usr/bin|grep fdfs
注意:虽然FastDFS区分tracker和storage服务器,但是安装的软件及步骤均相同,只是不同的配置文件而已,因此以上安装适用tracker server和storage server
5、配置跟踪服务器(tracker server)
1)拷贝tracker server和client端样例配置文件并重命名
复制tracker server配置文件:cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
复制client端配置文件: cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
2)编辑tracker server配置文件tracviewker.conf,需要修改内容如下:
disabled=false (默认为false ,表示是否无效)
port=22122 (默认为22122 )
base_path=/data/file /fastdfs/tracker
3)编辑client端的配置文件client.conf,需要修改内容如下
base_path=/data/file /fastdfs/tracker
tracker_server=119.29 .14.88 : 22122
4)创建tracker server数据目录
mkdir -p /data/file/fastdfs/tracker
5)测试启动tracker server,启动成功会自动在/data/file/fastdfs/tracker目录新建data和logs目录
输入启动命令 /etc/init.d/fdfs_trackerd start 显示如图 启动成功
输入端口查询命令 ss -lntup|grep 22122
查看22122端口信息和创建的data、logs
6)关闭tracker server
输入停止命令:/etc/init.d/fdfs_trackerd stop
6、配置存储服务器(storage server)
1)拷贝storage server样例配置文件并重命名
拷贝命令:cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
2)编辑storage server配置文件storage.conf,需要修改内容如下:
disabled=false (默认为false ,表示是否无效)
port=23000 (默认为23000 )
base_path=/data/file /fastdfs/storage
tracker_server=119.29 .14.88 : 22122
store_path0 =/data/file /fastdfs/storage http.server_port=8888 (默认为8888 ,nginx中配置的监听端口那之一致)
3)创建storage server数据目录
4)测试启动storage server,启动成功会自动在/data/file/fastdfs/tracker目录新建data和logs目录(启动storage server的前提是tracker server必须事先已启动)
启动tracker server:/etc/init.d/fdfs_trackerd start
查看
启动storage server:/etc/init.d/fdfs_storaged start
查看
查看storage目录下创建的data和logs
6、文件上传测试
执行如下上传命令:
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /data/uploadfile/timg1.jpg
返回文件ID即说明文件已经上传成功
四、存储服务器(storage server)安装并配置nginx
1)下载并安装fastdfs-nginx-module模块
注:FastDFS通过Tracker服务器,将文件放在Storage服务器存储,但是同组存储服务器之间需要进入文件复制,有同步延迟的问题。假设Tracker服务器将文件上传到了192.168.4.125,上传成功后文件ID已经返回给客户端。此时FastDFS存储集群机制会将这个文件同步到同组存储192.168.4.126,在文件还没有复制完成的情况下,客户端如果用这个文件ID在192.168.4.126上取文件,就会出现文件无法访问的错误。而fastdfs-nginx-module可以重定向文件连接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。
执行下载命令:wget http://nchc.dl.sourceforge.net/project/fastdfs/FastDFS%20Nginx%20Module%20Source%20Code/fastdfs-nginx-module_v1.16.tar.gz
解压:tar xf fastdfs-nginx-module_v1.16.tar.gz
进入src目录下:cd fastdfs-nginx-module/src/
编辑config文件:vim config
执行如下命令进行批量替换并保存退出:
:%s+/usr/local/+/usr/+g
2)拷贝fastdfs-nginx-module模块中配置文件到/etc/fdfs目录中并编辑
复制fastdfs-nginx-module模块中配置文件: cp /home/oldcat/tools/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
修改配置文件: vi /etc/fdfs/mod_fastdfs.conf
修改内容如下:
connect_timeout=10
base_path=/tmp(默认为/tmp )
tracker_server=119.29 .14.88 : 22122
storage_server_port=23000 (默认配置为23000 )
url_have_group_name = true
store_path0 =/data/file /fastdfs/storage
group_name=group1(默认配置为group1)
3)安装nginx依赖库
yum install -y pcre-devel zlib-devel
4)下载并安装nginx
下载nginx压缩包: wget http://nginx.org/download/nginx-1.8.1.tar.gz
解压: tar xf nginx-1.8.1.tar.gz
进入解压目录: cd nginx-1.8.1
执行配置: ./configure --prefix=/application/nginx/ --add-module=../fastdfs-nginx-module/src/
执行安装: make && make install
5)拷贝FastDFS中的部分配置文件到/etc/fdfs目录中
cp /home/oldcat/tools/FastDFS/conf/http.conf /etc/fdfs/
cp /home/oldcat/tools/FastDFS/conf/mime.types /etc/fdfs/
6)配置nginx,如下所示:
ln -s /data/file/fastdfs/storage/data//data/file/fastdfs/storage/data/M00
编辑配置文件: vi /application/nginx/conf/nginx.conf
user root;
worker_processes 1 ;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8888;
server_name localhost;
location ~/group[0-9]/ {
ngx_fastdfs_module;
}
error_page 500 502 503 504 /50 x.html;
location = /50 x.html {
root html;
}
}
}
说明:
a、"user root"是解决下载操作时报404的问题
b、8888端口号与/etc/fdfs/storage.conf中的http.server_port=8888相对应
c、storage对应有多个group的情况下,访问路径带group名称,例如:/group1/M00/00/00/**,对应nginx配置:
location ~/group[0-9]/ {
ngx_fastdfs_module;
}
7)拷贝nginx服务到/etc/init.d/目录下并启动
拷贝命令:cp /application/nginx/sbin/nginx /etc/init.d/
启动nginx: /etc/init.d/nginx
8)通过浏览器访问之前已经上传的文件
浏览器可以成功访问到上传的图片,说明使用FastDFS搭建的图片服务器成功完成!