一、分布式文件系统

分布式文件系统 (Distributed File System) 是一个软件/软件服务器,这个软件可以用来管理文件,但这个软件所管理的文件通常不是在一个服务器节点上,而是在多个服务器节点上,这些服务器节点通过网络相连构成一个庞大的文件存储服务器集群,这些服务器都用于存储文件资源,通过分布式文件系统来管理这些服务器上的文件。

常见的分布式文件系统有:FastDFS、GFS、HDFS、Lustre 、Ceph 、GridFS 、mogileFS、TFS等,

GFS(Google File System)
--------------------------------------
Google公司为了满足本公司需求而开发的基于Linux的专有分布式文件系统

HDFS
--------------------------------------
Hadoop 实现的一个分布式文件系统(Hadoop Distributed File System),简称HDFS

Lustre
---------------------------------------
是一个大规模的、安全可靠的,具备高可用性的集群文件系统,它是由SUN公司开发和维护的

Ceph
---------------------------------------
是加州大学圣克鲁兹分校的Sage weil攻读博士时开发的分布式文件系统

GridFS
---------------------------------------
GridFS是MongoDB之上的分布式文件系统,其利用了MongoDB的分布式存储机制并通过MongoDB来存储文件数据和文件元数据

MogileFS
---------------------------------------
由memcahed的开发公司danga,开发的一款采用perl开发的产品,目前国内使用mogielFS的有图片托管网站yupoo等

mooseFS
---------------------------------------
相对比较轻量级,对master服务器有单点依赖,用perl编写,性能相对较差

分布式文件系统与传统文件系统对比:

二、什么是FastDFS

FastDFS是一个开源的轻量级分布式文件系统,为互联网应用量身定做,简单、灵活、高效,采用C语言开发,由阿里巴巴开发并开源,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

三、FastDFS发展历史

1、2008年4月项目启动,7月发布第一个版本V1.00,两年时间内持续升级到V1.29

2、2010年8月推出V2.00

3、2011年6月推出V3.00

4、2012年10月推出V4.00

5、2013年12月推出V5.00

6、2017年3月推出V5.10

7、2018年6月推出V5.12(截止目前最新版)

8、详细发展历史查看: https://github.com/happyfish100/fastdfs/blob/master/HISTORY

9、FastDFS系统架构从第一个版本发布后一直没有大的调整,高版本完全兼容低版本的数据,可以做到平滑升级,推荐更新升级到最新版本;

10、FastDFS代码托管在github上:https://github.com/happyfish100/fastdfs

四、FastDFS整体架构

FastDFS文件系统由两大部分构成,一个是客户端,一个是服务端;客户端通常指我们的程序,比如我们的Java程序去连接FastDFS、操作FastDFS,那我们的Java程序就是一个客户端;FastDFS提供专有API访问,目前提供了 C、Java 和 PHP 几种编程语言的API,用来访问FastDFS文件系统;

服务端由两个部分构成:一个是跟踪器(tracker),一个是存储节点(storage);跟踪器(tracker)主要做调度工作,在内存中记录集群中存储节点storage的状态信息,是前端Client和后端存储节点storage的枢纽;因为相关信息全部在内存中,Tracker server的性能非常高,一个较大的集群(比如上百个group)中有3台就足够了;存储节点(storage)用于存储文件,包括文件和文件属性(meta data)都保存到存储服务器磁盘上,完成文件管理的所有功能:文件存储、文件同步和提供文件访问等;

TIP:

所需要安装包版本对应关系
名称 版本号
libfastcommon 1.0.36
fastdfs 5.11
nginx 1.12.2
fastdfs-nginx-module 1.20
fastdfs-client-java 1.27-SNAPSHOT

五、FastDFS下载
           FastDFS没有Windows版本,不能在Windows下使用;FastDFS需要安装部署在Linux环境下;下载地址:https://github.com/happyfish100/fastdfs/releases,下载安装版本为FastDFS5.11

六、FastDFS安装

  1. 安装前的准备

    1. 检查Linux上是否安装了 gcc、libevent、libevent-devel,执行如下yum命令检查:
    2. yum list installed | grep gcc
    3. yum list installed | grep libevent
    4. yum list installed | grep libevent-devel
    5. 如果没有安装,则需进行安装,执行如下命令安装:
    6. yum install gcc libevent libevent-devel -y
  2. 安装 libfastcommon 库
    1. libfastcommon 库是 FastDFS 文件系统运行需要的公共 C 语言函数库
    2. 安装libfastcommon 库的步骤如下
      1. 下载 libfastcommon 源代码包

        1. 下载地址:https://github.com/happyfish100
        2. 安装包地址:https://github.com/happyfish100/libfastcommon/archive/V1.0.36.tar.gz
      2. 解压下载下来的tar.gz压缩包:tar -zxvf libfastcommon-1.0.36.tar.gz
      3. 切换到解压后的libfastcommon目录:cd libfastcommon-1.0.36
      4. 执行make脚本进行编译:./make.sh
        1. 注意:第4步make编译的时候如果报错,需解决错误后再次进行make,通常发生错误是由于Linux缺少某些依赖库导致,根据错误提示解决错误
      5. 执行make install进行安装:./make.sh install
      6. 至此 libfastcommon 库安装完毕
  3. 安装FastDFS
    1. FastDFS才是我们真正的分布式文件系统,安装步骤如下:

      1. 下载FastDFS,下载地址:https://github.com/happyfish100/fastdfs/releases
      2. 下载安装包:wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz  -O fastdfs-5.11.tar.gz
      3. 解压下载下来的tar.gz包:tar -zxvf fastdfs-5.11.tar.gz
      4. 切换到解压后的目录:cd fastdfs-5.11
      5. 执行编译: ./make.sh
      6. 然后再执行安装 ./make.sh install
        1. 至此FastDFS安装完成,安装后所有编译出来的文件存放在/usr/bin目录下,所有配置文件存放在/etc/fdfs目录下,使用命令查看:ll /usr/bin/fdfs*
      7. 另外注意需要把解压后的fastdfs-5.11/conf目录下的两个文件拷贝到/etc/fdfs/ 
        1. cp http.conf /etc/fdfs/
        2. cp mime.types /etc/fdfs/
      8. 这两个文件后续需要用到,所以先拷贝过去,原因:让fastdfs-nginx-module的配置文件调用

七、FastDFS配置

  1. FastDFS安装后配置文件位于/etc/fdfs/目录下,修改该目录下的配置文件
  2. 把所有的.sample后缀都去掉,使用 mv 命令改文件名,去掉文件名后缀。尽量使用cp复制在改名(备份,备份,备份)
    1. 修改tracker.conf文件

      1. base_path=/opt/fastdfs/tracker
      2. 新建 mkdir -p /opt/fastdfs/tracke
      3. 不然会报:
    2. 修改storage.conf文件
      1. base_path=/opt/fastdfs/storage
      2. store_path0=/opt/fastdfs/storage/files
      3. tracker_server=192.168.184.133:22122
      4. 新建文件夹:
      5. mkdir -p /opt/fastdfs/storage
      6. mkdir -p /opt/fastdfs/storage/files
      7. 如果配置store_path0该配置了,就得创键file文件,如果不配置则默认使用base_path
    3. 然后启动FastDFS

八、FastDFS启动

  1. FastDFS服务启动需要启动两个脚本:

    1. 启动FastDFS的tracker服务,在任意目录下执行:fdfs_trackerd /etc/fdfs/tracker.conf
    2. 启动FastDFS的storage服务,在任意目录下执行:fdfs_storaged /etc/fdfs/storage.conf
  2. 首次启动storage后,它会在配置的路径下创建存储文件的目录,前提是配置的路径要存在,不存在服务都起不来,所以上面七步骤中有提示要创键文件夹
  3. 查看启动进程:ps -ef | grep fdfs ,有启动的执行命令即为启动成功;
  4. 查看storage是否已经登记到了tracker下:fdfs_monitor /etc/fdfs/storage.conf

九、FastDFS关闭

  1. 关闭FastDFS,执行如下命令:

    1. 关闭tracker执行命令,在任意目录下执行:fdfs_trackerd /etc/fdfs/tracker.conf stop
    2. 关闭storage执行命令,在任意目录下执行:fdfs_storaged /etc/fdfs/storage.conf stop
    3. 或者kill关闭fastdfs,但不建议kill -9 强制关闭,因为可能会导致文件信息不同步问题

十、FastDFS重启

  1. 重启FastDFS,执行如下命令:

    1. 重启tracker执行命令:fdfs_trackerd /etc/fdfs/tracker.conf restart
    2. 重启storage执行命令:fdfs_storaged /etc/fdfs/storage.conf restart

十一、FastDFS测试

  1. FastDFS安装完成之后,可以使用fdfs_test脚本测试文件上传,执行命令:
  2. 测试之前,需要修改client.conf配置文件,修改两个配置:
    1. base_path=/opt/fastdfs/client
    2. tracker_server=192.168.184.133:22122
    3. 新建文件夹:
    4. mkdir -p /opt/fastdfs/client
  3. 测试文件上传,执行命令:
    1. fdfs_test /etc/fdfs/client.conf upload /root/testfastfds.txt
  4. 测试文件删除,执行命令:
    1. fdfs_delete_file  /etc/fdfs/client.conf  group1/M00/00/00/wKi4hVzVCW-AR0ZTAAAAIIe1k0c233_big.txt
  5. FastDFS生成的文件目录结构及名称示例:

//一道亮丽的风景线//

十二、安装Nginx的FastDFS扩展模块

  1. 概述

    1. 已经上传到FastDFS文件系统中的文件,我们如何在浏览器中访问呢?FastDFS V4.05 以后的版本就把内置 HTTP服务去掉了,所以我们测试上传成功了,但是却无法访问。
    2. FastDFS提供了一个Nginx扩展模块,利用该模块,我们可以通过Nginx访问已经上传到FastDFS上的文件
  2. 下载
    1. 下载fastdfs的nginx扩展模块源代码:
    2. wget https://github.com/happyfish100/fastdfs-nginx-module/archive/73869650b6171fd6e5bf81b5b8caa89f021d6c7b.zip -O fastdfs-nginx-module.zip
    3. 解压下载下来的fastdfs-nginx-module.zip 文件:
    4. unzip fastdfs-nginx-module.zip
  3. 安装Nginx并且添加fastDFS模块
    1. 下载nginx:wget http://nginx.org/download/nginx-1.12.2.tar.gz
    2. 解压下载下来的nginx文件,执行命令:tar -zxvf nginx-1.12.2.tar.gz
    3. 切换至解压后的nginx主目录,执行命令:cd nginx-1.12.2
    4. 切换到解压后的nginx-1.12.1目录下,执行configure命令:
      1. ./configure --prefix=/usr/local/fastdfs/nginx_fdfs --add-module=/home/soft/fastdfs/fastdfs-nginx-module-73869650b6171fd6e5bf81b5b8caa89f021d6c7b/src
      2. 其中--prefix是指定nginx安装路径,--add-module指定fastDFS的nginx模块的源代码路径
    5. 执行命令进行编译:make
    6. 执行命令进行安装:make install
    7. 以上安装Nginx的FastDFS扩展模块注意事项
      1. 我们知道,nginx是C语言开发,因此同样需要gcc,还需要安装pcre,因为nginx的http模块需要用到pcre,还需要zlib,它提供了解压缩,还需要openssl,Nginx的安装需要Linux安装相关的几个库,否则编译会出现错误,这几个库分别是:
      2. gcc编译器是否安装?
        1. 检查是否安装:yum list installed | grep gcc
        2. 执行安装:yum install gcc -y
      3. openssl库是否安装?
        1. 检查是否安装:yum list installed | grep openssl
        2. 执行安装:yum install openssl openssl-devel -y
      4. pcre库是否安装?
        1. 检查是否安装:yum list installed | grep pcre
        2. 执行安装:yum install pcre pcre-devel -y
      5. zlib库是否安装?
        1. 检查是否安装:yum list installed | grep zlib
        2. 执行安装:yum install zlib zlib-devel -y
      6. 一次性安装,执行如下命令:
        1. yum install gcc openssl openssl-devel pcre pcre-devel zlib zlib-devel -y
  4. 配置
    1. 将/home/soft/fastdfs/fastdfs-nginx-module-73869650b6171fd6e5bf81b5b8caa89f021d6c7b/src目录下的mod_fastdfs.conf文件拷贝到 /etc/fdfs/目录下,这样才能正常启动Nginx

      1. mod_fastdfs.conf 专门配置Nginx的扩展模块的
    2. 修改mod_fastdfs.conf配置文件:
      1. base_path=/opt/fastdfs/nginx_mod
      2. tracker_server=192.168.184.133:22122
      3. store_path0=/opt/fastdfs/storage/files
      4. url_have_group_name = true
      5. 创键文件夹:
      6. mkdir -p /opt/fastdfs/nginx_mod
      7. 其他路径都存在所以不用创键
    3. 配置Nginx的配置文件
      1. #拦截请求路径中包含 /group[1-9]/M0[0-9] 的请求,使用 fastdfs的Nginx 模块进行转发:
        location ~ /group[1-9]/M0[0-9] {
             ngx_fastdfs_module;
        }
      2. 如果出现404访问不到,检查一下 url_have_group_name = false,如果为false改为true
  5. 启动与测试
    1. 启动带有fastdfs模块的Nginx
    2. 重启fastDFS服务进程,执行如下命令:(不重启也可以)
      1. fdfs_trackerd /etc/fdfs/tracker.conf restart
      2. fdfs_storaged /etc/fdfs/storage.conf restart
    3. 重新上传一个文件进行测试验证:fdfs_test /etc/fdfs/client.conf upload /root/testfastfdsnginx.txt
    4. 在浏览器访问上传的文件,显示访问成功
    5. 当遇到400错误, 检查配置/etc/fdfs/mod_fastdfs.conf
    6. url_have_group_name=true
    7. 该配置表示访问路径中是否需要带有group1,改为true表示路径中需要有group1

十三、FastDFS提供的主要功能

upload:上传文件,download:下载文件,delete:删除文件

十四、FastDFS文件系统的Java客户端

  1. 前提你电脑安装了maven使用mvn命令操作一下就行了
  2. fastDFS文件系统Java客户端是指采用Java语言编写的一套程序,专门用来访问fastDFS文件系统
  3. 由于maven仓库里没有该依赖所以:
  4. 下载官方的源代码:https://github.com/happyfish100/fastdfs-client-java/archive/master.zip
  5. 解压fastdfs-client-java-master,采用maven命令编译成jar安装到本地maven库:mvn clean install
  6. 在Java程序中使用它提供的API来访问fastDFS文件系统

十五、FastDFS开发示例

使用Java客户端,编程操作fastDFS分布式文件系统:

引入依赖:

<dependency><groupId>org.csource</groupId><artifactId>fastdfs-client-java</artifactId><version>1.27-SNAPSHOT</version>
</dependency>

代码:

在类路径中配置该文件:fdfs_client.conf配置,tracker_server可以配置多个,配置多个tracker_server连接集群

connect_timeout = 2
network_timeout = 30
charset = UTF-8
tracker_server=192.168.184.133:22122

代码:

public class FastService {public static void main(String[] args) throws IOException, MyException {//1、初始化配置连接信息ClientGlobal.init("fdfs_client.conf");//检查加载配置结果System.out.println("加载配置结果:ClientGlobal.configInfo(): " + ClientGlobal.configInfo());//2、创建一个Tracker的客户端对象TrackerClient trackerClient = new TrackerClient();//3、通过Tracker的客户端对象,获取到一个Tracker服务器对象TrackerServer  trackerServer = trackerClient.getConnection();//4、通过Tracker的客户端对象和Tracker服务器对象,获取到一个Storage服务器对象StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);//5、通过Tracker服务器对象和Storage服务器对象,构造一个Storage客户端对象StorageClient storageClient = new StorageClient(trackerServer, storageServer);//有了上面的5步,接下来就可以正式去操作FastDFS了//文件上传String[] strArray = storageClient.upload_file("G:/test.txt", "txt", null);for (String str : strArray) {System.out.println(str);}//文件下载,返回值0表示下载成功,其他值都是下载失败,比如:-1, 1, -22 都是失败的//strArray[0]       group_name//strArray[1]       remote_filename//G:/测试下载.txt   local_filenameint download = storageClient.download_file(strArray[0], strArray[1], "G:/测试下载.txt");System.out.println("下载结果:"+download);//文件删除,返回值0表示删除成功,其他值都是删除失败,比如:-1, 1, -22 都是失败的//int delete = storageClient.delete_file(strArray[0], strArray[1]);//System.out.println("删除结果:"+delete);}}

fastdfs-client-java-master里面的README.md说的很清楚了

FastDFS分布式文件系统介绍及单机版安装相关推荐

  1. FastDFS 分布式文件系统介绍及安装部署

    依赖环境版本说明: 操作系统CentOS6.5 目标 了解项目中使用FastDFS的原因和目的: 掌握FastDFS的架构组成部分,能说出tracker和storage的作用: 了解FastDFS+n ...

  2. 超简单用Docker安装FastDFS分布式文件存储系统

    个人简介 作者是一个来自河源的大三在校生,以下笔记都是作者自学之路的一些浅薄经验,如有错误请指正,将来会不断的完善笔记,帮助更多的Java爱好者入门. Docker安装FastDFS分布式文件存储系统 ...

  3. 一文搞定FastDFS分布式文件系统配置与部署

    Ubuntu下FastDFS分布式文件系统配置与部署 白宁超 2017年4月15日09:11:52 摘要: FastDFS是一个开源的轻量级分布式文件系统,功能包括:文件存储.文件同步.文件访问(文件 ...

  4. FastDFS分布式文件系统配置与部署

    一文搞定FastDFS分布式文件系统配置与部署 阅读目录 1 分布式文件系统介绍 2 系统架构介绍 3 FastDFS性能方案 4 Linux基本命令操作 5 安装VirtualBox虚拟机并配置Ub ...

  5. 搭建FastDFS分布式文件存储系统教程

    转载来源:https://github.com/happyfish100/fastdfs/wiki 搭建FastDFS分布式文件存储系统教程 环境准备 使用的系统软件 名称 说明 centos 7.x ...

  6. Linux FastDFS 分布式文件系统安装

    Linux FastDFS 分布式文件系统安装 2013 年 3 月 11 日 – 09:21 | 930 views | 收藏  (No Ratings Yet) FastDFS是一款类Google ...

  7. FastDfs分布式文件存储系统

    FastDfs分布式文件存储系统 FastDfs 是一个开源的高性能分布式文件系统(DFS). 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡.主要解决了海量数据存储问题,特别适 ...

  8. 【云存储】主流分布式文件系统介绍

    目录 1.引言 2.云存储与分布式文件系统 2.1.云存储 2.2.分布式文件系统 3.Google的三大云计算与云存储论文 3.1.The Google File System(谷歌文件系统) 3. ...

  9. Docker部署Fastdfs分布式文件存储系统

    Docker部署Fastdfs分布式文件存储系统 Fastdfs分布式文件存储系统 拉取镜像 部署Tracker和Storage 开放端口 SpringBoot代码示例 Fastdfs分布式文件存储系 ...

最新文章

  1. 软件配置管理(Software Configuration Management,SCM)
  2. 环球网校签约神策数据,数据赋能教育行业创新升级
  3. Mac安装brew及报错处理办法
  4. c语言while跳不出来,这个while循环终止了却跳不出来为什么
  5. js调用app方法并传承参
  6. JavaFX加载界面报错:fxcontroller can only be applied to root element?
  7. Visual studio 2012 创建web service
  8. 天上地下,马斯克和贝佐斯终有一战?
  9. nginx post请求超时_Nginx 的超时 timeout 配置详解
  10. Vue.js 使用 Swiper.js 在 iOS 11 时出现错误
  11. 《嵌入式 Linux C 语言应用程序设计(修订版)》——2.1 嵌入式Linux下C语言概述...
  12. byte拷贝java_Java字节流实现文件夹的拷贝
  13. 【Sql】—Sql开发利器Sql Prompt
  14. 安卓系统如何访问wincc服务器,wincc客户端读取服务器数据库
  15. SPSS学习资料汇总
  16. PUN☀️二、局域网的搭建
  17. Draco代码分析(一) —— Encode过程探究其数据编码方式
  18. Dell R910报错E1234的处理方法
  19. 利用python如何抓取微博评论?
  20. java实现花呗分3、6、12期计算用户每期手续费及每期总费用

热门文章

  1. 如何生成简单的二维码
  2. snort create_mysql_构建简易Snort网络入侵检测系统(NIDS)
  3. sql server——分组查询
  4. shopify是什么_为什么Shopify并不像您想象的那样昂贵
  5. Digispark与 badusb
  6. 一起做一款自己的英语学习助手吧(小程序)
  7. 最新县及县以上行政区划代码(截止2013年1月18日) 全国省市县数据库 之县级数据
  8. 大学计算机案例实验教程文件,大学计算机实训及案例分析教程
  9. Elliptic Labs宣布,搭载其AI虚拟智能传感器的全新小米智能手机Redmi Note 10 Pro正式发布
  10. Mac版本安装Anaconda及使用教程