一、FastDFS简介
技术论坛: http://bbs.chinaunix.net/forum-240-1.html
资源地址: https://sourceforge.net/projects/fastdfs/
源码资源: https://github.com/happyfish100
FastDFS 是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。
FastDFS 服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。storage采用了分卷(或分组)的组织方式。卷之间是相互独立的卷中的多台存储服务器起到了冗余备份和负载均衡的作用。FastDFS 中的文件标识分为两个部分:卷名和文件名,二者缺一不可。
1 架构图
2 上传流程
client 询问 tracker 上传到的 storage,不需要附加参数;
tracker 返回一台可用的 storage;
client 直接和 storage 通讯完成文件上传。
3 下载流程
client 询问 tracker 下载文件的 storage,参数为文件标识(组名和文件名);
tracker 返回一台可用的 storage;
client 直接和 storage 通讯完成文件下载。
4 术语简介
TrackerServer:跟踪服务器,主要做调度工作,在访问上起负载均衡的作用。记录 storage server 的状态,是连接 Client 和 Storage server 的枢纽。
StorageServer:存储服务器,文件和 meta data 都保存到存储服务器上 。
group:组,也称为卷。同组内服务器上的文件是完全相同的 。
文件标识:包括两部分:组名和文件名(包含路径) 。
metadata:文件相关属性,键值对(KeyValuePair)方式,如:width=1024,heigth=768。
5 同步机制
同一组内的 storage server 之间是对等的,文件上传、删除等操作可以在任意一台storage server 上进行;文件同步只在同组内的 storage server 之间进行,采用 push 方式,即源服务器同步给目 标服务器;源头数据才需要同步,备份数据不需要再次同步,否则就构成环路了;上述第二条规则有个例外,就是新增加一台storage server时,由已有的一台storage server 将已有的所有数据(包括源头数据和备份数据)同步给该新增服务器。
6 FastDFS 运行时目录结构
6.1 TrackerServer 目录
6.2 StorageServer 目录
一、安装
准备两个 Linux 服务器。两个服务器分别作为 tracker 服务器(跟踪服务器)和 storage 服务器(存储服务器)。
- Tracker 服务器 : 39.98.139.190
- Storage 服务器 : 39.98.156.205
1、核心安装
TrackerServer 和 Storage Server 完全一致的安装。 安装 FastDFS 5.08 版本
1.1 安装 FastDFS 依赖
FastDFS 是 C 语言开发的应用。安装必须使用 make、cmake 和 gcc 编译器。
yum install -y make cmake gcc gcc-c++
1.2 解压 FastDFS 核心库
libfastcommon 是从 FastDFS 和 FastDHT 中提取出来的公共 C 函数库
cd /tmp
unzip libfastcommon-master.zip -d /usr/localfastdfs
1.3 进入解压后的目录
cd /usr/local/fastdfs/libfastcommon-master
1.4 编译安装
libfastcommon没有提供 make 命令安装文件。使用的是 shell 脚本执行编译和安装。 shell 脚本为 make.sh。
编译:
./make.sh
安装:
./make.sh install
有固定的默认安装位置。在/usr/lib64 和/usr/include/fastcommon 两个目录中。
1.5 创建软连接
因为 FastDFS 主程序设置的 lib 目录是/usr/local/lib,所以需要创建软链接
ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
ln -s /usr/local/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
ln -s /usr/local/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so
1.6 解压 FastDFS 主程序
使用 5.08 版本 FastDFS。
cd /tmp
tar -zxf FastDFS_v5.08.tar.gz -C /usr/local/fastdfs
1.7 进入 FastDFS 主程序源码目录
cd /usr/local/fastdfs/FastDFS
1.8 修改安装路径
此操作可选,在集群环境中使用默认安装路径。
vi /usr/local/fastdfs/FastDFS/make.sh
TARGET_PREFIX=DESTDIR/usr/local
1.9 编译安装
./make.sh
./make.sh install
安装后,FastDFS 主程序所在位置是:
/usr/local/bin- 可执行文件所在位置。默认安装在/usr/bin 中。
/etc/fdfs- 配置文件所在位置。就是默认位置。
/usr/local/lib64- 主程序代码所在位置。默认在/usr/bin 中。
/usr/local/include/fastdfs- 包含的一些插件组所在位置。默认在/usr/include/fastdfs 中。
1.10 FastDFS 安装后资源简介
1.10 .1 服务脚本
/etc/init.d/目录中,脚本文件是 -fdfs -storaged 和 fdfs -trackerd
ls /etc/init.d/ | grep fdfs
1.10 .2 配置文件模板
/etc/fdfs/ 目 录 中 , 配 置 文 件 是 - client.conf.sample 、 storage.conf.sample 和 tracker.conf.sample
ls/etc/fdfs/
tracker.conf.sample- 跟踪器服务配置文件模板
storage.conf.sample- 存储服务器配置文件模板
client.conf.sample - FastDFS 提供的命令行客户端配置文件模板。可以通过命令行测试 FastDFS 有效性。
1.10 .3 内置命令
ls /usr/local/bin/ |grep fdfs
以上为通用安装,FastDFS的跟踪服务和存储服务是通过配置实现的。后续内容为跟踪服务和存储服务的具体配置。
2、tracker 基础配置
2.1 创建跟踪服务配置文件
FastDFS 提供了配置文件模板,可以根据模板创建需要使用的配置文件。
cd /etc/fdfs
cp tracker.conf.sample tracker.conf
2.2 修改配置文件
tracker.conf 配置文件用于描述跟踪服务的行为,需要进行下述修改:
vi /etc/fdfs/tracker.conf
#默认服务端口
port=22122
base_path=/home/yuqing/fastdfs->base_path=/fastdfs/tracker (自定义目录)
base_path 是 FastDFSTracker 启动后使用的根目录。也就是 data 和 logs 所在位置。
2.3 创建自定义目录
mkdir -p/fastdfs/tracker
2.4 修改启动服务脚本
vi /etc/init.d/fdfs_trackerd
#将PRG=/usr/bin/fdfs_trackerd 修改为 PRG=/usr/local/bin/fdfs_trackerd
2.5 启动服务
/etc/init.d/fdfs_trackerd start
启动成功后,配置文件中base_path指向的目录中出现FastDFS服务相关数据目录(data目录、logs目录)
2.6 查看服务状态
/etc/init.d/fdfs_trackerd status
ps -aux|grep fdfs
2.7 停止服务
/etc/init.d/fdfs_trackerd stop
2.8 重启服务
/etc/init.d/fdfs_trackerd restart
2.9 设置开启自启
vi /etc/rc.d/rc.local
#新增内容
/etc/init.d/fdfs_trackerd start
3、storage 基础配置
3.1、创建存储服务配置文件
cd /etc/fdfs
cp storage.conf.sample storage.conf
3.2、修改配置文件
vi /etc/fdfs/storage.conf
base_path=/home/yuqing/fastdfs->base_path=/fastdfs/storage/base/[自定义目录]
store_path0=/home/yuqing/fastdfs->store_path0=/fastdfs/storage/store/[自定义目录]
tracker_server=192.168.2.109:22122->tracker_server=tracker [服务IP]:22122
base_path- 基础路径。用于保存 storageserver 基础数据内容和日志内容的目录。
store_path0- 存储路径。是用于保存 FastDFS 中存储文件的目录,就是要创建256*256个子目录的位置。
base_path 和 store_path0 可以使用同一个目录。
tracker_server- 跟踪服务器位置。就是跟踪服务器的 ip 和端口。
3.3、创建自定义目录
mkdir -p /fastdfs/storage/base
mkdir -p /fastdfs/storage/store
3.4、修改服务脚本
vi /etc/init.d/fdfs_storaged
#将PRG=/usr/bin/fdfs_storaged 修改为 PRG=/usr/local/bin/fdfs_storaged
3.5 、启动服务(要求tracker服务必须已经启动)
/etc/init.d/fdfs_storaged start
启动成功后,配置文件中 base_path 指向的目录中出现 FastDFS 服务相关数据目录(data 目录、logs 目录),配置文件中的 store_path0 指向的目录中同样出现FastDFS 存储相关数 据录(data 目录)。其中$store_path0/data/目录中默认创建若干子孙目录(两级目录层级总计 256256 个目录),是用于存储具体文件数据的。 Storage 服务器启动比较慢,因为第一次启动的时候,需要创建 256256 个目录。
3.6 、查看服务状态
/etc/init.d/fdfs_storaged status
ps -aux | grep fdfs
3.7 、停止服务
/etc/init.d/fdfs_storaged stop
3.8 、重启服务
/etc/init.d/fdfs_storaged restart
3.9 、设置开机自启
vi /etc/rc.d/rc.local
#新增内容
/etc/init.d/fdfs_storaged start
因启动前提为tracker服务必须已启动,不推荐开启自启。
4、客户端基础配置
不是必须的。就是用于使用命令行测试 FastDFS 才需要配置的。
4.1、创建客户端配置文件
在 tracker 服务结点所在服务器中配置客户端。同样通过配置文件模板创建对应配置文件。
cd /etc/fdfs
cp client.conf.sample client.conf
4.2、修改配置文件
client.conf 配置文件中主要描述客户端的行为,需要进行下述修改:
vi /etc/fdfs/client.conf
#自定义目录
base_path=/home/yuqing/fastdfs->base_path=/fastdfs/client/[自定义目录]
tracker_server=192.168.2.109:22122->tracker_server=tracker [服务IP]:22122
4.3、创建自定义目录
mkdir -p /fastdfs/client
5、控制台测试 FastDFS
命令所在: /usr/local/bin 目录。 (如果在安装 FastDFS 过程中,没有修改 make.sh 文 件中的 TARGET_PREFIX 属性值,命令所在为/usr/bin 目录)
5.1、上传文件
/usr/local/bin/fdfs_upload_file /etc/fdfs/client.conf /[要上传的文件]
上传结束后,返回 group1/M00/00/00/xxxxxxxxxx.xxx,检查 storage 服务结点中的 /store_path0/data/00/00/目录中是否有上传的文件(一般情况上传的文件按顺序保存在/store_path0/data/00/00/目录中,不能完全保证 )。
5.2、删除文件
/usr/local/bin/fdfs_delete_file /etc/fdfs/client.confgroup1/M00/00/00/xxxxxxx.xxx
删除结束后,检查/store_path0/data/00/00/目录中是否还有文件。
6、安装 Nginx 组件
安装 Nginx 是为了 WEB 应用中可以使用 HTTP 协议直接访问 Storage 服务中存储的文 件。在 storage 结点所在服务器安装 Nginx 组件。需要安装两部分内容。Nginx 应用,在安装 nginx 应用的时候,同时要在 nginx 中增加一个 FastDFS 的组件Module。
6.1、解压 fastdfs-nginx-module_v1.16.tar.gz
tar -zxf fastdfs-nginx-module_v1.16.tar.gz -C /usr/local/fastdfs
6.2、修改 fastdfs-nginx-module_v1.16.tar.gz 源文件中的配置
cd /usr/local/fastdfs/fastdfs-nginx-module/src
vi /usr/local/fastdfs/fastdfs-nginx-module/src/config
#修改内容
CORE_INCS="$CORE_INCS/usr/local/include/fastdfs/usr/include/fastcommon/"
6.3、安装 Nginx
6.3.1、安装 Nginx 需要的依赖
yum install -y gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel opensslopenssl-devel
6.3.2、使用 SFTP 上传文件到 Linux
按照之前的步骤上传一张图片,进行测试。
6.3.3、解压 Nginx
tar-zxf nginx-1.8.0.tar.gz-C /usr/local/fastdfs/
6.3.4、进入 Nginx 源码目录
cd/usr/local/fastdfs/nginx-1.8.0/
6.3.5、配置 Nginx 安装信息
./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/fastdfs-nginx-module/src
注意:最后一行必须定义,否则 Nginx安 装 过 程 不 会 加 载 fastdfs-nginx-module模 块 。
6.3.6、创建目录
mkdir -p /var/temp/nginx
6.3.7、编译安装
make
make install
6.3.8、配置 fastdfs-nginx-module 模块配置文件
cp /usr/local/fastdfs/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
cd /etc/fdfs/
修改配置文件 mod_fastdfs.conf
vi mod_fastdfs.conf
connect_timeout=10
tracker_server=192.168.2.109:22122
url_have_group_name=true
store_path0=/fastdfs/storage/store
6.3.9、提供 FastDFS 需要的 HTTP 配置文件
cp /usr/local/fastdfs/FastDFS/conf/http.conf /etc/fdfs/
cp /usr/local/fastdfs/FastDFS/conf/mime.types /etc/fdfs/
6.3.10、创建 nginx 启动需要的软连接
nginx启动后,会在默认的/usr/lib64目录中查找需要的so文件。如果在安装FastDFS时,修改了make.sh文件中的TARGET_PREFIX参数,则必须创建此软连。
ln -s /usr/local/lib64/libfdfsclient.so /usr/lib64/libfdfsclient.so
6.3.11、创建网络访问存储服务的软连接
ln -s /fastdfs/storage/store/data/ /fastdfs/storage/store/data/M00
6.3.12、修改 nginx 配置文件
cd /usr/local/nginx/conf
vi nginx.conf
#部分配置信息:
user root;
server{
#storage 配置中,有 http.server_port=8888 的配置信息,必须一 致。
listen 8888;
server_name localhost;
location~/group([0-9])/M00{ ngx_fastdfs_module;
}
}
6.3.13、测试 WEB 访问存储服务中的文件
使用浏览器查看 FastDFS 中保存的文件:http://[ip]:8888/group1/M00/00/00/xxxxxxx.xxx