FastDFS配置

简介
技术论坛: http://bbs.chinaunix.net/forum-240-1.html
资源地址: https://sourceforge.net/projects/fastdfs/
源码资源: https://github.com/happyfish100
 
FastDFS 是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
 
FastDFS 为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用 FastDFS 很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
 
FastDFS 服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。
存储节点存储文件,完成文件管理的所有功能:就是这样的存储、同步和提供存取接口,FastDFS 同时对文件的 metadata 进行管理。所谓文件的 meta data 就是文件的相关属性,以键值对(key value)方式表示,如:width=1024,其中的 key widthvalue 1024。文件metadata 是文件属性列表,可以包含多个键值对。 跟踪器和存储节点都可以由一台或多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据
服务器的压力情况随时增加或减少。
 
为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。
 
在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。
当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。
 
FastDFS 中的文件标识分为两个部分:卷名和文件名,二者缺一不可。
 
 
 
架构图
 
 
 
 
上传流程
 
 
client 询问 tracker 上传到的 storage,不需要附加参数;
tracker 返回一台可用的 storage
client 直接和 storage 通讯完成文件上传
 
 
 
下载流程
 
 
client 询问 tracker 下载文件的 storage,参数为文件标识(组名和文件名);
tracker 返回一台可用的 storage
client 直接和 storage 通讯完成文件下载。
 
 
 
 
术语简介
 
Tracker Server:跟踪服务器,主要做调度工作,在访问上起负载均衡的作用。记录 storageserver 的状态,是连接 Client Storage server 的枢纽。
Storage Server:存储服务器,文件和 meta data 都保存到存储服务器上
group:组,也称为卷。同组内服务器上的文件是完全相同的
文件标识:包括两部分:组名和文件名(包含路径)
meta data:文件相关属性,键值对(Key Value Pair)方式,如:width=1024,heigth=768
 
 
 
 
同步机制
 
ver 上进行;
文件同步只在同组内的 storage server 之间进行,采用 push 方式,即源服务器同步给目标服务器;
源头数据才需要同步,备份数据不需要再次同步,否则就构成环路了;
上述第二条规则有个例外,就是新增加一台storage server时,由已有的一台storage server将已有的所有数据(包括源头数据和备份数据)同步给该新增服务器
 
 
 
 
FastDFS 运行时目录结构
 
 
Tracker Server 目录
 
 
 
 
Storage Server 目录
 
 
 
 
 
 
 
FastDFS 和其他文件存储的简单对比
 
FastDFS 和集中存储方式对比
 
 
 
 
FastDFS mogileFS 对比
 
 
 
 
 
 
安装
 
准备两个 Linux 服务器。两个服务器分别作为 tracker 服务器(跟踪服务器)和 storage服务器(存储服务器)。
Tracker 服务器 : 192.168.2.109
Storage 服务器 : 192.168.2.110
课上环境中,所有的安装包都存放在/root/upload 目录中。解压后的安装包根据具体命令查看。(/usr/local/fastdfs
 
 
 
核心安装
Tracker Server Storage Server 完全一致的安装。
安装 FastDFS 5.08 版本
 
 
安装 FastDFS 依赖
 
FastDFS C 语言开发的应用。安装必须使用 makecmake gcc 编译器。
 
yum install -y make cmake gcc gcc-c++

 

解压 FastDFS 核心库
 
libfastcommon 是从 FastDFS FastDHT 中提取出来的公共 C 函数库
cd /root/upload 

unzip libfastcommon-master.zip -d /usr/local/fastdfs

 

进入解压后的目录
 
cd /usr/local/fastdfs/libfastcommon-master

 

编译安装
 

libfastcommon 没有提供 make 命令安装文件。使用的是 shell 脚本执行编译和安装。shell脚本为 make.sh

编译
./make.sh
安装
./make.sh install
有固定的默认安装位置。在/usr/lib64 /usr/include/fastcommon 两个目录中。
 
 
 
 
 
创建软连接
因为 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
 
解压 FastDFS 主程序
 
本案例使用 5.08 版本 FastDFS
 
cd /root/upload 

tar -zxf FastDFS_v5.08.tar.gz -C /usr/local/fastdfs

 

 
进入 FastDFS 主程序源码目录
 
cd /usr/local/fastdfs/FastDFS

 

修改安装路径
 
此操作可选。在集群环境中使用默认安装路径安装。两种安装方式都尝试一下。
vi /usr/local/fastdfs/FastDFS/make.sh
TARGET_PREFIX=$DESTDIR/usr -> TARGET_PREFIX=$DESTDIR/usr/local

 

编译安装
 
./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 中。
 
 
 
 
 
FastDFS 安装后资源简介
 
服务脚本
 
 
/etc/init.d/目录中,脚本文件是 - fdfs-storaged fdfs-trackerd
ls /etc/init.d/ | grep fdfs

 

配置文件模板
 
 
/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 有效性。
 
 
 
 
 
 
内置命令
 
 
/usr/local/bin/目录中。命令有若干。可通过命令在控制台访问 FastDFS
ls /usr/local/bin/ | grep fdfs

 
以上为通用安装,FastDFS 的跟踪服务和存储服务是通过配置实现的。后续内容为跟踪服务和存储服务的具体配置。
 
 
 
 
 
tracker 基础配置
 
只在 tracker server 节点中配置。192.168.2.109
 
 
 
 
创建跟踪服务配置文件
 
 
FastDFS 提供了配置文件模板,可以根据模板创建需要使用的配置文件。
cd /etc/fdfs
cp tracker.conf.sample tracker.conf

 

 
修改配置文件
 
tracker.conf 配置文件用于描述跟踪服务的行为,需要进行下述修改:
vi /etc/fdfs/tracker.conf 

port=22122 # 默认服务端口

base_path=/home/yuqing/fastdfs -> base_path=/fastdfs/tracker(自定义目录) 

base_path FastDFSTracker 启动后使用的根目录。也就是 data logs 所在位置。

 
 
 
 
创建自定义目录
为配置文件中定义的 base_path 变量创建对应的目录。
mkdir -p /fastdfs/tracker

 

 
修改启动服务脚本
vi /etc/init.d/fdfs_trackerd 

PRG=/usr/bin/fdfs_trackerd 修改为 PRG=/usr/local/bin/fdfs_trackerd

 
 
 
启动服务
 
/etc/init.d/fdfs_trackerd start
启动成功后,配置文件中 base_path 指向的目录中出现 FastDFS 服务相关数据目录(data目录、logs 目录)
 
 
 
 
 
 
查看服务状态
 
/etc/init.d/fdfs_trackerd status 
ps aux | grep fdfs

 

停止服务
/etc/init.d/fdfs_trackerd stop

 

 
重启服务
 
/etc/init.d/fdfs_trackerd restart

 

设置开启自启
vi /etc/rc.d/rc.local
新增内容 - /etc/init.d/fdfs_trackerd start
 
 
 
 
 
 
storage 基础配置
 
只在 storage server 中配置。192.168.2.100
 
 
 
创建存储服务配置文件
 
FastDFS 提供了配置文件模板,可以根据模板创建需要使用的配置文件。
cd /etc/fdfs 
cp storage.conf.sample storage.conf

 

 
 
修改配置文件
 
storage.conf 配置文件用于描述存储服务的行为,需要进行下述修改:
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 - 基础路径。用于保存 storage server 基础数据内容和日志内容的目录。

store_path0 - 存储路径。是用于保存 FastDFS 中存储文件的目录,就是要创建 256*256个子目录的位置。
base_path store_path0 可以使用同一个目录。
tracker_server - 跟踪服务器位置。就是跟踪服务器的 ip 和端口。
 
 
 
 
创建自定义目录
mkdir -p /fastdfs/storage/base 
mkdir -p /fastdfs/storage/store

 

修改服务脚本
 
vi /etc/init.d/fdfs_storaged
PRG=/usr/bin/fdfs_storaged 修改为 PRG=/usr/local/bin/fdfs_storaged
 
 
 
 
启动服务(要求 tracker 服务必须已启动
 
 
/etc/init.d/fdfs_storaged start
启动成功后,配置文件中 base_path 指向的目录中出现 FastDFS 服务相关数据目录(data目录、logs 目录),配置文件中的 store_path0 指向的目录中同样出现 FastDFS 存储相关数据录(data 目录)。其中$store_path0/data/目录中默认创建若干子孙目录(两级目录层级总256*256 个目录),是用于存储具体文件数据的。
Storage 服务器启动比较慢,因为第一次启动的时候,需要创建 256*256 个目录。
 
 
 
 
 
查看服务状态
 
/etc/init.d/fdfs_storaged status 
ps aux | grep fdfs

 

 
停止服务
 
 
/etc/init.d/fdfs_storaged stop

 

 
 
重启服务
 
/etc/init.d/fdfs_storaged restart

 

 
设置开机自启
vi /etc/rc.d/rc.local
新增内容 - /etc/init.d/fdfs_storaged start
 
因启动前提为 tracker 服务必须已启动,不推荐开启自启。
 
 
 
 
 
客户端基础配置
 
不是必须的。就是用于使用命令行测试 FastDFS 才需要配置的。
 
 
创建客户端配置文件
 
tracker 服务结点所在服务器中配置客户端。同样通过配置文件模板创建对应配置文件。
 
cd /etc/fdfs 
cp client.conf.sample client.conf

 

 
修改配置文件
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
base_path - 就是客户端命令行执行过程时临时数据存储位置。
 
 
 
 
创建自定义目录
 
mkdir -p /fastdfs/client

 

 
控制台测试 FastDFS
 
命令所在: /usr/local/bin 目录。 (如果在安装 FastDFS 过程中,没有修改 make.sh 文件中的 TARGET_PREFIX 属性值,命令所在为/usr/bin 目录)
 
 
 
上传文件
/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/目录中,不能完全保证)。
课 上 测 试 的 上 传 文 件 结 果 :
group1/M00/00/00/wKgCbltTYaeACDWgAAVCLEPUQWI.tar.gz
卷名 : group1
文件名 : M00/00/00/wKgCbltTYaeACDWgAAVCLEPUQWI.tar.gz
其中 M00 是一个虚拟目录,相当于 windows 中的快捷方式,引用的是$store_path0/data目录。
 
 
 
 
删除文件
 
/usr/local/bin/fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/xxxxxxx.xxx
删除结束后,检查$store_path0/data/00/00/目录中是否还有文件。
 
 
 
 
安装 Nginx 组件
 
 
如果 FastDFS 中保存的是图片信息。希望在 WEB 应用中可以直接访问 FastDFS 中的图片进行显示。如果操作?
安装 Nginx 是为了 WEB 应用中可以使用 HTTP 协议直接访问 Storage 服务中存储的文件。在 storage 结点所在服务器安装 Nginx 组件。
 
需要安装两部分内容。
Nginx 应用,在安装 nginx 应用的时候,同时要在 nginx 中增加一个 FastDFS 的组件。Module
 
 
 
 
解压 fastdfs-nginx-module_v1.16.tar.gz
 
tar -zxf fastdfs-nginx-module_v1.16.tar.gz -C /usr/local/fastdfs

 

 
修改 fastdfs-nginx-module_v1.16.tar.gz 源文件中的配置
 
此操作必须修改,否则 Nginx 编译会报错。
 
cd /usr/local/fastdfs/fastdfs-nginx-module/src 
vi /usr/local/fastdfs/fastdfs-nginx-module/src/config
参数是用于配置安装 nginx 中的 FastDFS 组件的时候,在什么位置查找 FastDFS 核心代码。
 
修 改 后 内 容 : ( 如 果 安 装 FastDFS 时 , 没 有 修 改 make.sh 文 件 , 则 改 为 :CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
 
 
CORE_INCS="$CORE_INCS /usr/local/include/fastdfs /usr/include/fastcommon/"
 
 
 
 
安装 Nginx
 
安装 Nginx 需要的依赖
 
yum install -y gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel

 

 
使用 SFTP 上传文件到 Linux
 
 
进入到本地的应用所在目录。
cd /xxxx 目录
sftp 192.168.2.110
输入用户名和密码。使用哪一个用户登录,上传的文件就在该用户对应的主目录下。如:root 用户,上传的文件在/root 目录中。
 
 
上传的命令:
put 文件名
下载的命令:
get 文件名
 
 
 
解压 Nginx
 
tar -zxf nginx-1.8.0.tar.gz -C /usr/local/fastdfs/

 

 
进入 Nginx 源码目录
 
cd /usr/local/fastdfs/nginx-1.8.0/

 

 
配置 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
--add-module 必须定义,此配置信息是用于指定安装 Nginx 时需要加载的模块,如果未指定,Nginx 安装过程不会加载 fastdfs-nginx-module 模块,后续功能无法实现。
 
 
 
 
 
创建目录
 
Nginx 运行时需要创建若干临时文件,如果默认安装不需创建此目录。
 
mkdir -p /var/temp/nginx
编译安装
 
make 
make install

 

 
 
配置 fastdfs-nginx-module 模块配置文件
 
 
复制配置文件/usr/local/fastdfs/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs 目录中
 
 
cp /usr/local/fastdfs/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/ 
cd /etc/fdfs/
修改配置文件 mod_fastdfs.conf
 
vi mod_fastdfs.conf

 
 
 
提供 FastDFS 需要的 HTTP 配置文件
 
复制 FastDFS 安装包中的两个配置文件(http.conf mime.types)到/etc/fdfs 目录中
 
cp /usr/local/fastdfs/FastDFS/conf/http.conf /etc/fdfs/ 
cp /usr/local/fastdfs/FastDFS/conf/mime.types /etc/fdfs/

 

创建 nginx 启动需要的软连接
 
创建软连接
ln -s /usr/local/lib64/libfdfsclient.so /usr/lib64/libfdfsclient.so
nginx 启动后,会在默认的/usr/lib64 目录中查找需要的 so 文件。如果在安装 FastDFS时,修改了 make.sh 文件中的 TARGET_PREFIX 参数,则必须创建此软连接
 
 
 
 
 
创建网络访问存储服务的软连接
 
ln -s /fastdfs/storage/store/data/ /fastdfs/storage/store/data/M00

 

在上传文件到 FastDFS 后,FastDFS 会返回 group1/M00/00/00/xxxxxxxxxx.xxx。其中group1 是卷名,在 mod_fastdfs.conf 配置文件中已配置了 url_have_group_name,以保证 URL 解析正确。而其中的 M00 FastDFS 保存数据时使用的虚拟目录,需要将这个虚拟目录定位到真实数据目录上。
 
 
 
修改 nginx 配置文件
cd /usr/local/nginx/conf 
vi nginx.conf

 

测试 WEB 访问存储服务中的文件
使用浏览器查看 FastDFS 中保存的文件:
http://ip:8888/group1/M00/00/00/x xxxxxx.xxx
测试上传的文件: group1/M00/00/00/wKgCbltTmv-ASTG2AAAmTx4ns0s172.jpg
测试 WEB 访问地址:
http://192.168.2.110:8888/group1/M00/00/00/wKgCbltTmv-ASTG2AAAmTx4ns0s172.jpg
posted @ 2019-12-11 08:56  sakura-yxf  阅读(1381)  评论(0)    收藏  举报