1.1 FastDFS的应用场景

FastDFS是为互联网应用量身定做的一套分布式文件存储系统,非常适合用来存储用户图片、视频、文档等文件。对于互联网应用,和其他分布式文件系统相比,优势非常明显。其中有好几家是做网盘的公司。其中存储量最大的一家,集群中存储group数有400个,存储服务器超过800台,存储容量达到6PB,文件数超过1亿,Group持续增长中。
以下是使用FastDFS的用户列表:
UC (http://www.uc.cn/,存储容量超过10TB)
支付宝(http://www.alipay.com/)
京东商城(http://www.360buy.com/)
淘淘搜(http://www.taotaosou.com/)
飞信(http://feixin.1008.cn/)
赶集网(http://www.ganji.com/)
淘米网(http://www.61.com/)
迅雷(http://www.xunlei.com/)
蚂蜂窝(http://www.mafengwo.cn/)
丫丫网(http://www.iyaya.com/)
虹网(http://3g.ahong.com)
5173(http://www.5173.com/)
华夏原创网(http://www.yuanchuang.com/)
华师京城教育云平台(http://www.hsjdy.com.cn/)
视友网(http://www.cuctv.com/)
搜道网(http://www.sodao.com/)
58同城(http://www.58.com/)
商务联盟网(http://www.biz72.com/)
中青网(http://www.youth.cn/)
缤丽网 (http://www.binliy.com/)
飞视云视频(http://www.freeovp.com/)
梦芭莎(http://www.moonbasa.com/)
活动帮(http://www.eventsboom.com)
51CTO(http://www.51cto.com/)
搜房网(http://www.soufun.com/)

2.1 FastDFS的详细介绍

FastDFS是一个开源的分布式文件系统,她对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。

存储节点存储文件,完成文件管理的所有功能:存储、同步和提供存取接口,FastDFS同时对文件的meta data进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key value pair)方式表示,如:width=1024,其中的key为width,value为1024。文件meta data是文件属性列表,可以包含多个键值对。

                系统架构图

跟踪器和存储节点都可以由一台多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。

为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷 的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起 到了冗余备份和负载均衡的作用。

在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。

当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。
FastDFS中的文件标识分为两个部分:卷名和文件名,者缺一不可。

3.1 上传文件交互过程:

  1. client询问tracker上传到的storage,不需要附加参数;
  2. tracker返回一台可用的storage;
  3. client直接和storage通讯完成文件上传。

3.2 下载文件交互过程:

  1. client询问tracker下载文件的storage,参数为文件标识(卷名和文件名);
  2. tracker返回一台可用的storage;
  3. client直接和storage通讯完成文件下载。

4.FastDFS搭建工具下载

下载链接,百度云

local/fastdfs-nginx-module/src/common.c:: 错误:‘FDFSHTTPParams’没有名为‘support_multi_range’的成员
make[]: *** [objs/addon/src/ngx_http_fastdfs_module.o] 错误
make[]: Leaving directory `/usr/local/nginx-1.10.'

整合的时候,fastdfs-nginx-module中的support_multi_range在Version 5.10中找不到。

Version 5.11对应的fastdfs-nginx-module的Version 1.20
Version 5.10对应的fastdfs-nginx-module的Version 1.19

之所以在安装前写了这么一段话,是因为这个很重要,版本不对应会给接下来的安装带来各种问题。

4.1 下载工具:

把源码下载下来4个zip包,再去下个nginx:

4.2 上传到CentOS

上传文件到liunx系统的方法很多。我个人比较喜欢用vsftp上传。 
感兴趣的同学可以参考我一另一篇博文:

CentOS7 搭建vsftpd详细教程

在windows上直接输入ftp地址,把刚刚下载好的文件拖到ftp上即可。

5.CentOS7FastDFS搭建

前面已下载好了要用到的工具集,下面就可以开始安装了:
如果安装过程中出现问题,可以下载我提供的,当前测试可以通过的工具包:

fastdfs-5.11下载
fastdfs-client-java-1.26下载
fastdfs-nginx-module-1.20下载
libfastcommon-1.36下载
nginx-1.12.0下载

5.1 安装libfastcommon

直接进入

./make.sh && ./make.sh install

创建软连接

ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so

5.2安装FastDFS

直接进入

./make.sh && ./make.sh install

进入etc/fdfs下,将client,storage,tracker的文件都复制一份

5.3安装tracker

创建目录,存放tracker的data

/var/fastdfs-data/fastdfs-tracker

修改/etc/fdfs/tracker.conf的内容

.disabled=false #默认开启
.port= #默认端口号
.base_path=/var/fastdfs-data/fastdfs-tracker #我刚刚创建的目录
.http.server_port= #默认端口是8080

启动

service fdfs_trackerd start

5.4 安装storage

创建目录

/var/fastdfs-data/fastdfs-storage

存放storage角色

/var/fastdfs-data/fastdfs-storage-data

存放data

修改/etc/fdfs/storage.conf文件

.disabled=false
.group_name=group1 #组名,根据实际情况修改
.port= #设置storage的端口号,默认是23000,同一个组的storage端口号必须一致
.base_path=/var/fastdfs-data/fastdfs-storage #设置storage数据文件和日志目录
.store_path_count= #存储路径个数,需要和store_path个数匹配
.base_path0=/var/fastdfs-data/fastdfs-storage-data#实际文件存储路径
.tracker_server=192.168.128.131: #我CentOS7的ip地址
.http.server_port= #设置 http 端口号

创建软引用

ln -s /usr/bin/fdfs_storaged /usr/local/bin

启动storage

service fdfs_storaged start

5.5 设置开机启动

vim /etc/rc.d/rc.local
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot. touch /var/lock/subsys/local
service fdfs_trackerd start
service fdfs_storaged start

检查服务是否启动

[root@localhost fastdfs]# netstat -unltp | grep fdfs
tcp 0.0.0.0: 0.0.0.0:* LISTEN /fdfs_trackerd
tcp 0.0.0.0: 0.0.0.0:* LISTEN /fdfs_storaged

使用monitor查看storage的状态

fdfs_monitor /etc/fdfs/storage.conf

5.6 配置客户端

vim /etc/fdfs/client.conf
base_path=/var/fastdfs-data/fastdfs-tracker #tracker服务器文件路径 
tracker_server=node02: #tracker服务器IP地址和端口号
http.tracker_server_port= # tracker 服务器的 http端口号,必须和tracker的设置对应起来

5.7模拟上传

[root@node02 ~]# fdfs_upload_file /etc/fdfs/client.conf a.jpg
group1/M00///wKh2DF02Bi2AIMTcAADYBNQz0O8898.jpg
组名:group1
磁盘:M00
目录:/
文件名称:wKh2DF02Bi2AIMTcAADYBNQz0O8898.jpg

我们仔细看一下,实际文件存储路径下有创建好的多级目录。data下有256个1级目录,每级目录下又有256个2级子目录,总共65536个文件,新写的文件会以hash的方式被路由到其中某个子目录下,然后将文件数据直接作为一个本地文件存储到该目录中。

6.1 HTTP访问文件

我们去浏览器用http请求访问一下刚刚的图片:

我们发现,http不能直接访问到图片。这是为什么呢。
我去官网看了一原码,在HISTORY中发现,原来早在4.05的时候,就remove embed HTTP support

Version 4.05 2012-12-30
* client/fdfs_upload_file.c can specify storage ip port and store path index
* add connection pool
* client load storage ids config
* common/ini_file_reader.c does NOT call chdir
* keep the mtime of file same
* use g_current_time instead of call time function
* remove embed HTTP support

6.2 HTTP请求不能访问文件的原因

我们在使用FastDFS部署一个分布式文件系统的时候,通过FastDFS的客户端API来进行文件的上传、下载、删除等操作。同时通过FastDFS的HTTP服务器来提供HTTP服务。但是FastDFS的HTTP服务较为简单,无法提供负载均衡等高性能的服务,所以FastDFS的开发者——淘宝的架构师余庆同学,为我们提供了Nginx上使用的FastDFS模块(也可以叫FastDFS的Nginx模块)。 FastDFS通过Tracker服务器,将文件放在Storage服务器存储,但是同组之间的服务器需要复制文件,有延迟的问题.假设Tracker服务器将文件上传到了192.168.128.131,文件ID已经返回客户端,这时,后台会将这个文件复制到192.168.128.131,如果复制没有完成,客户端就用这个ID在192.168.128.131取文件,肯定会出现错误。这个fastdfs-nginx-module可以重定向连接到源服务器取文件,避免客户端由于复制延迟的问题,出现错误。
正是这样,FastDFS需要结合nginx,所以取消原来对HTTP的直接支持。

7. 安装nginx并添加fastdfs-nginx-module

解压后进入nginx目录编译安装nginx,并添加fastdfs-nginx-module:

./configure --prefix=/usr/local/nginx --add-module=/usr/yong.cao/dev/nginx/fastdfs-nginx-module/src
#解压后fastdfs-nginx-module所在的位置

执行安装

make && make install

8. 配置storage nginx

修改nginx.conf

        location ~/group1/M00 {
root /var/fastdfs-data/fastdfs-storage-data;
ngx_fastdfs_module;
}

然后进入FastDFS安装时的解压过的目录,将http.conf和mime.types拷贝到/etc/fdfs目录下:

另外还需要把fastdfs-nginx-module安装目录中src目录下的mod_fastdfs.conf也拷贝到/etc/fdfs目录下:

[root@localhost fastdfs-5.11]# cd /usr/yong.cao/ftp/fastdfs-5.11/conf/
[root@localhost conf]# ls
anti-steal.jpg http.conf storage.conf tracker.conf
client.conf mime.types storage_ids.conf
cp http.conf /etc/fdfs/
cp mime.types /etc/fdfs/
cp /usr/yong.cao/dev/nginx/fastdfs-nginx-module-master/src/mod_fastdfs.conf /etc/fdfs/

对mod_fastdfs.conf进行修改

base_path=/var/fastdfs-data/fastdfs-storage  #保存日志目录
tracker_server=node02: #tracker服务器的IP地址以及端口号
storage_server_port= #storage服务器的端口号
url_have_group_name = true #文件 url 中是否有 group 名
store_path0=/var/fastdfs-data/fastdfs-storage-data #存储路径
group_count = #设置组的个数,事实上这次只使用了group1

文件最后设置一个group

[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/var/fastdfs-data/fastdfs-storage-data [group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/var/fastdfs-data/fastdfs-storage-data [group3]
group_name=group3
storage_server_port=23000
store_path_count=1
store_path0=/var/fastdfs-data/fastdfs-storage-data

创建软链接

ln -s /var/fastdfs-data/fastdfs-storage-data/data/ /var/fastdfs-data/fastdfs-storage-data/data/M00

启动nginx

访问图片,显示

ok,fastDFS搭建成功

参考博客:https://blog.csdn.net/m0_37797991/article/details/73381648

9.FastDFS的上传下载(JAVA API)

Java API  https://github.com/tobato/FastDFS_Client

CentOS7搭建FastDFS V5.11分布式文件系统及Java整合详细过程的更多相关文章

  1. CentOS7搭建FastDFS V5.11分布式文件系统-第三篇

    1.测试 前面两篇博文已对FastDFS的安装和配置,做了比较详细的讲解.FastDFS的基础模块都搭好了,现在开始测试下载. 1.1 配置客户端 同样的,需要修改客户端的配置文件: /etc/fdf ...

  2. CentOS7搭建FastDFS V5.11分布式文件系统(三)

    1.测试 前面两篇博文已对FastDFS的安装和配置,做了比较详细的讲解.FastDFS的基础模块都搭好了,现在开始测试下载. 1.1 配置客户端 同样的,需要修改客户端的配置文件: /etc/fdf ...

  3. CentOS7搭建FastDFS V5.11分布式文件系统-第一篇

    1.绪论 最近要用到fastDFS,所以自己研究了一下,在搭建FastDFS的过程中遇到过很多的问题,为了能帮忙到以后搭建FastDFS的同学,少走弯路,与大家分享一下.FastDFS的作者淘宝资深架 ...

  4. CentOS7搭建FastDFS V5.11分布式文件系统(一)

    1.绪论 最近要用到fastDFS,所以自己研究了一下,在搭建FastDFS的过程中遇到过很多的问题,为了能帮忙到以后搭建FastDFS的同学,少走弯路,与大家分享一下.FastDFS的作者淘宝资深架 ...

  5. CentOS7搭建FastDFS V5.11分布式文件系统-第二篇

    1.CentOS7 FastDFS搭建 前面已下载好了要用到的工具集,下面就可以开始安装了: 如果安装过程中出现问题,可以下载我提供的,当前测试可以通过的工具包: 点这里点这里 1.1 安装libfa ...

  6. CentOS7搭建FastDFS V5.11分布式文件系统(二)

    1.CentOS7 FastDFS搭建 前面已下载好了要用到的工具集,下面就可以开始安装了: 如果安装过程中出现问题,可以下载我提供的,当前测试可以通过的工具包: 点这里点这里 1.1 安装libfa ...

  7. Linux 下 FastDFS v5.08 分布式文件系统的安装

    一.系统安装目录 源代码包目录 /data/wwwroot libevent安装目录 /usr/local/libevent FastDFS安装目录 /data/fastdfs nginx安装目录 / ...

  8. mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(附demo和搭建过程遇到的问题解决方法)

    文章介绍结构一览 一.使用maven创建web项目 1.新建maven项目 2.修改jre版本 3.修改Project Facts,生成WebContent文件夾 4.将WebContent下的两个文 ...

  9. mybatis学习笔记(六) -- maven+spring+mybatis从零开始搭建整合详细过程(下)

    继续 mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(上) 五.使用监听器启动Spring容器 1.修改pom.xml文件,添加Spring-we ...

随机推荐

  1. 安装浏览器的vue插件

    安装浏览器的vue插件步骤: 1.在浏览器中打开 https://github.com/vuejs/vue-devtools Clone or download  vue-devtools. 2.解压 ...

  2. 20175221 《Java程序设计》第10周学习总结

    20175221   <Java程序设计>第10周学习总结 教材学习内容总结 第十二章主要内容有: 进程与线程 进程是程序的一次动态执行过程,它对应了从代码加载.执行至执行完毕的一个完整过 ...

  3. C#读取word文档中的内容

    原文地址 http://blog.csdn.net/yhrun/article/details/7674540 在使用前需要添加引用巨硬的com组件:Microsoft Word 12.0 objec ...

  4. Appium关键字

    *** Settings *** Library AppiumLibrary Library AutoItLibrary Library os *** Keywords *** xpath应该匹配次数 ...

  5. 系统分析与设计HW4

    个人作业 用例建模 a. 阅读 Asg_RH 文档,绘制用例图. b. 选择你熟悉的定旅馆在线服务系统(或移动 APP),如绘制用例图.并满足以下要求: 对比 Asg_RH 用例图,请用色彩标注出创新 ...

  6. C 语言的函数 - 内存分析

    函数基本概念 Linux 中,函数在内存的代码段(code 区),地址比较靠前. 函数定义 C 语言中,函数有三个要素:入参.返回值.函数名,缺一不可.函数使用前必须先声明,或者在使用之前定义. 函数 ...

  7. javascript 访问 webservice

    xml: <?xml version="1.0" encoding="UTF-8"?> <boolean xmlns="http:/ ...

  8. cocos2dx基础篇(13) 编辑框之二CCEditBox

    [3.x] (1)去掉"CC" (2)设置虚拟键盘的编辑类型 > EditBoxInputMode 变为强枚举 EditBox::EditBoxInputMode // SI ...

  9. 洛谷P1347 排序

    这个题看到很多人写Topo排序,其实这道题第一眼看更像是一个差分约束的裸题QWQ... 令dis[x]表示x的相对大小(1是最小,n是最大),显然,对于一个关系A<B,我们有dis[A]< ...

  10. base64 换表 解密脚本

    做逆向经常遇到换表的base64 有了py脚本 一切都好说: import base64 import string str1 = "x2dtJEOmyjacxDemx2eczT5cVS9f ...