一、FastDFS基本概念及基本原理

  1.什么是FastDFS

    FastDFS是用c语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。主要功能包括文件存储、文件同步、文件访问(上传、下载)、存取负载均衡、在线扩容、相同内容只存储一份等功能,适合有大容量存储需求的应用或系统。做分布式系统开发时,其中要解决的一个问题就是图片、音视频、文件共享的问题,分布式文件系统正好可以解决这个需求。同类的分布式文件系统有谷歌的GFS、HDFS(Hadoop)、TFS(淘宝)等。

    FastDFS有两个角色:跟踪服务(tracker)和存储服务(storage),跟踪服务控制,调度文件以负载均衡的方式访问;存储服务包括:文件存储,文件同步,提供文件访问接口,同时以key value的方式管理文件的元数据。

    跟踪和存储服务可以由1台或者多台服务器组成,同时可以动态的添加,删除跟踪和存储服务而不会对在线的服务产生影响,在集群中,tracker服务是对等的。

    存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。

  2.FastDFS系统架构

    

  3.文件上传流程

  

  4.文件下载流程

   

  5.上传文件的文件名

    客户端上传文件后存储服务器将文件ID返回给客户端,此文件ID用于以后访问该文件的索引信息。文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。

    

    1). 组名:文件上传后所在的storage组名称,在文件上传成功后有storage服务器返回,需要客户端自行保存。

    2). 虚拟磁盘路径:storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。

    3). 数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。

    文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。

二、搭建步骤

  为了直观立体,我们选择使用一台虚拟机来模拟,只配置一个Tracker、一个Storage服务,配置Nginx来访问上传的文件。

  

  第一步.安装fastDFS依赖的libevent工具包

    yum -y install libevent

  第二步.下载FastDFS以及相关源码包

    1.下载libfastcommon

       wget https://github.com/happyfish100/libfastcommon/archive/V1.0.35.tar.gz -O libfastcommon-1.0.35.tar.gz

    2.下载fastdfs源码包

       wget https://github.com/happyfish100/fastdfs/archive/V5.10.tar.gz -O fastdfs-5.10.tar.gz

    3.下载fastdfs-nginx-module源码包

       wget https://sourceforge.net/projects/fastdfs/files/FastDFS%20Nginx%20Module%20Source%20Code/fastdfs-nginx-module_v1.16.tar.gz/download -O fastdfs-nginx-module_v1.16.tar.gz

    4.下载nginx源码包

      wget http://nginx.org/download/nginx-1.12.0.tar.gz

  第三步.安装libfastcommon

    1.解压缩libfastcommon并进入解压后的目录

      tar -zxvf libfastcommon-1.0.35.tar.gz && cd libfastcommon-1.0.35

    2.进行make和make install

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

    3.设置软链接或者拷贝usr/lib64/libfastcommon.so文件到/usr/lib/下(64位系统跳过该步骤)

      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

  第四步.安装Tracker服务

    1.解压缩fastdfs-5.10.tar.gz并进入解压后的目录

      tar -zxvf fastdfs-5.10.tar.gz && cd fastdfs-5.10.tar.gz

    2.进行make和make install

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

      注:上面命令运行成功以后,会在/usr/bin目录下生成以fdfs开头的文件

    3.拷贝源码解压包目录下conf目录下的所有文件到/etc/fdfs下

      cp ~/fastdfs/fastdfs-5.10.tar.gz/conf/* /etc/fdfs/

    4.修改/etc/fdfs/tracker.conf文件对tracker进行配置

      

    5.启动tracker服务

      /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf

      重启命令:/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

  第五步.安装Storage服务

    1.如果是在不同的服务器安装该服务,第四步的1~3需要重新执行.

    2.修改/etc/fdfs/storage.conf文件对storage进行配置

     

     

     

    3.启动storage服务

      /usr/bin/fdfs_storaged /etc/fdfs/storage.conf

      重启:/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

  第六步.测试服务

    1.修改配置文件/etc/fdfs/client.conf配置客户端

    

        

    2.测试

      /usr/bin/fdfs_test /etc/fdfs/client.conf upload anti-steal.jpg

     成功会出现以下文字

     

     先记下此处上传成功文件的url是:http://192.168.85.131/group1/M00/00/00/wKhVg1kl_NGAd61UAABdrZgsqUU293_big.jpg

  第七步:搭建Nginx提供Http服务

    1.安装教程:Centos7安装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=/root/fastdfs/fastdfs-nginx-module/src

  2.安装完成以后,需要/root/fastdfs/fastdfs-nginx-module/src/mod_fastdfs.conf文件复制到/etc/fdfs目录下

    cp /root/fastdfs/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs

  3.对copy后的文件进行编辑

    

   

    

  4.对nginx进行配置

   在nginx配置文件中增加一个server:

server {
listen 80;
server_name 192.168.85.131; location /group1/M00/{
#root /data/fastdfs/storage/data;
ngx_fastdfs_module;
}
}

  5.将libfdfsclient.so拷贝至/usr/lib下(64位机器跳过此步骤)

   cp /usr/lib64/libfdfsclient.so /usr/lib/

  6.启动nginx

    cd /usr/local/nginx/sbin && ./nginx

  第八步.对之前测试上传的文件进行访问,浏览器输入:http://192.168.85.131/group1/M00/00/00/wKhVg1kl_NGAd61UAABdrZgsqUU293_big.jpg

 

  出现此图片说明fastdfs图片服务器以及nginx插件搭建成功!

FastDFS概念、原理及CentOS7下安装实战的更多相关文章

  1. Windows和Linux(Centos7)下安装Nginx

    安装Nginx 这篇记录只不过做了一个简单总结,如果对这块没什么概念的话可以看一下知乎的这篇文章 https://zhuanlan.zhihu.com/p/83890573 window下安装 win ...

  2. CentOS7 下 安装 supervisor以及使用

    CentOS7 下 安装 supervisor 以及使用 手动安装 [注] linux环境必须安装 python 1.获取supervisor包:[https://pypi.python.org/py ...

  3. Linux CentOs7 下安装 redis

    Linux CentOs7 下安装 redis 请将以下命令放入linux命令行中运行 如果安装过程前没有安装GCC请先安装  命令如下 $ yum install gcc-c++ $ wget ht ...

  4. Centos7下安装配置Redsocks

    Redsocks是一个开源的网络程序,代码依赖开源的libevent网络库.Redsocks允许你将所有TCP连接重定向到SOCKS或HTTPS代理,比如Shadowsocks(Centos7下安装配 ...

  5. CentOS7下安装SVN服务端

    CentOS7下安装SVN服务 1. yum命令即可方便的完成安装# sudo yum install subversion 测试安装是否成功:# svnserve --version 更改svn的默 ...

  6. centOS7下安装GUI图形界面

    1.如何在centOS7下安装GUI图形界面 当你安装centOS7服务器版本的时候,系统默认是不会安装GUI的图形界面程序,这个需要手动安装CentOS7 Gnome GUI包. 2.在系统下使用命 ...

  7. CentOS7下安装MySQL并配置远程连接

    一.CentOS7下安装MySQL数据库 CentOS7默认的安装包里面已经没有 MySQL-Server安装包了,远程镜像中也没有了. 默认的是MariaDB (MySQL的一个分支,开发这个分支的 ...

  8. Docker学习笔记3:CentOS7下安装Docker-Compose

    Docker-Compose是一个部署多个容器的简单但是非常必要的工具. 安装Docker-Compose之前,请先安装 python-pip,请参考我的另一篇博文CentOS7下安装python-p ...

  9. docker(一) Centos7下安装docker

    docker(一) Centos7下安装dockerdocker(二) windows10下安装dockerdocker(三) 镜像和容器常用命令 docker(四) 使用Dockerfile构建镜像 ...

随机推荐

  1. 好文推荐系列--------(3)GruntJS 在线重载 提升生产率至新境界

    好文原文地址:http://segmentfault.com/a/1190000000354555 本文将首先介绍grunt-markdown插件如何配合HTML模板使用,接着我将介绍如何使用grun ...

  2. HTTP请求模型和头信息参考

    发送HTTP请求:一个请求由四个部分组成:请求行.请求头标.空行和请求数据 请求行 请求行由三个标记组成:请求方法.请求URI和HTTP版本,它们用空格分隔.例如:GET /index.html HT ...

  3. day29(对象转xml(使用java))

    通常使用xStream工具. 将集合,数组,对象转成XML. 导入两个包: xpp3_min-1.1.4c.jar xstream-1.4.4.jar 自定义一个类 package com.baidu ...

  4. JavaScript常用事件参考

      onabort 图像加载被中断 onblur 元素失去焦点 onchange 用户改变域的内容 onclick 鼠标点击某个对象 ondblclick 鼠标双击某个对象 onerror 当加载文档 ...

  5. PAT甲级 1121. Damn Single (25)

    1121. Damn Single (25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue "Dam ...

  6. MapReduce_架构

    架构 MapReduce1.x JobTracker:JT(作业管理者) 将作业分解成一堆的任务:Task(MapTask和ReduceTask) 将任务分派给TaskTracker运行 作业的监控. ...

  7. NameNode工作机制

    NameNode工作机制

  8. codeforces 475D

    题意:给定n(n<=100000)个1e9以内的数的数组a,然后最多有3*1e5的询问,对于每个询问,给定一个x,问有多少个(l<=r&&gcd(a[l],a[l+1].. ...

  9. Oracle EBS使用adpatch工具打patch过程(hotpatch mode)

    目录(?)[-] 从Metalink下载补丁 上传解压 使用adpatch来打patch完整的日志 检查patch是否打成功 adpatch的日志文件 补充关于Oracle EBS Patch的类型 ...

  10. Python基础语法-内置数据结构之列表

    列表的一些特点: 列表是最常用的线性数据结构 list是一系列元素的有序组合 list是可变的 列表的操作, 增:append.extend.insert 删:clear.pop.remove 改:r ...