400ToJava:133-分布式文件系统FastDFS-安装配置

一、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->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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342