• 一步步带你用 FastDFS 搭建文件管理系统 详细的不得鸟


    FastDFS概述

    • 开源地址:https://github.com/happyfish100

    • 余庆大佬用 c语言 编写的一款开源的分布式文件系统。

    • 为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,注重高可用、高性能等指标

    • 冗余备份: 纵向扩容

    • 线性扩容: 横向扩容, 增加容量

    • 可以很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

    • 应用场景:

      • 文件上传 -> 存储
      • 文件下载
    • 冗余备份(通过文件内容生成key值,在上传同一个文件时,不会重复存储,这就省了很大的空间)

    • 负载均衡:
      浏览器访问服务器(192.168.110.11:8080),如果全校都访问这个网站的时候,就会很卡,怎么办? 多开几个端口(一个端口的负载能力有限),再访问的时候,指向不忙的端口(8081、8082)和集群有点像,
      负载就是请求的数量;均衡就是给你平均的分配,结合就是负载均衡。

    • 线性扩容:直接加配置文件,就可以多一个服务器的存在,早期如果想加服务器,就需要重复写相关代码,扩容非常方便。

    FastDFS 中的三个角色

    • 追踪器 ( tracker ) -> 守护进程
      • 管理者
      • 第一个启动
    • 存储节点 ( storage ) -> 守护进程
      • 可以理解为网络环境中可以存储文件的主机
      • 存储文件
      • 第二个启动
    • 客户端 - client
      • 程序猿写的
      • 发起上传请求, 完成上传操作
      • 发起下载请求, 将服务器文件下载到本地
      • 最后启动, 是一个普通的应用程序

    FastDFS 三个角色的关系

    李培冠博客

    • 先启动追踪器
    • 启动存储节点
      • 主动连接追踪器, 汇报当前存储节点的状态信息
      • 后边定时汇报状态
    • 客户端程序启动, 连接追踪器, 发给上传请求
      • 客户端询问追踪, 看那个存储节点有足够的容量
      • 追踪查询存储节点信息
      • 将查到的节点信息发送给客户端
    • 客户端通过得到的存储节点地址, 连接存储节点
    • 将文件上传到存储节点上, 存储节点得到一个file_id, 并将其发送给客户端
    • 客户端需要存储这个fileID, 下载的时候要用

    李培冠博客

    • 先启动追踪器
    • 启动存储节点
      • 主动连接追踪器, 汇报当前存储节点的状态信息
      • 后边定时汇报状态
    • 客户端程序启动, 连接追踪器, 发送下载请求
      • 客户端询问追踪, 看那个存储节点上有要下载的文件
      • 追踪查询存储节点信息
      • 将查到的节点地址发送给客户端
    • 客户端通过得到的存储节点地址, 连接存储节点
    • 将存储节点发送给客户端的文件, 保存到本地

    FastDFS集群

    李培冠博客

    • tracker集群
      • 为了避免单点故障
      • 工作方式: 轮询
      • 集群方式: 修改配置文件
    • 存储节点的集群
      • 存储节点的管理:
        • 是以组的方式来管理的
      • 横向扩容 -> 添加新的分组, fastDFS容量增加了
        • 不同组的主机之间不通信
        • 各组的容量相加就是整体容量
      • 纵向扩容 -> 在现有的组中添加新的主机, 和同组主机之间互为备份关系
        • 同组主机中存储的内容相同
        • 同组主机之间是通信的
        • 当前组的容量按照最小的主机来算

    FastDFS 架构说明

    举个例子:

    小老板(客户端)想要存他的货,存货肯定是要把货存到仓库里面,但是不能让小老板自己去找仓库,因为那么多仓库,小老板不知道哪个可以用以及哪个有空闲可以存我的货。

    所以,自己去找就很费时费力。况且,仓库是面向很多个小老板,这么多小老板如果每次都是自己去找仓库,就会很费时间。所以,安排一个仓库管理员,这个是干什么的呢? 小老板想存东西,找这个管理员,让管理员告诉小老板,哪个仓库可以用,然后小老板就去指定仓库存东西去了。

    这个仓库管理员没事就去巡逻,挨个仓库走一遍看哪个仓库有空闲可以用,工作:定时的遍历去查询仓库,看这个仓库能用不能用(收集仓库的状态)。仓库才是真正存数据的地方。

    小老板存完数据之后,仓库就会给他一个凭证,告诉他你的东西存在了哪个仓库,以后可以直接过来取。

    线性扩容就是加仓库。

    凭证:组名 虚拟磁盘路径(设置才有,不设置没有) 数据两级目录(文件路径) 文件名(通过加密防止文件名重复)

    FastDFS 安装

    安装 FastDFS 依赖包

    1)下载 libfastcommon.zip

    下载地址:https://github.com/happyfish100/libfastcommon/releases

    2)解压缩 libfastcommon.zip

    3)进入到 libfastcommon 的目录中

    4)执行 ./make.sh

    5)执行 sudo ./make.sh install

    安装 FastDFS

    1)下载 fastdfs.zip

    下载地址:https://github.com/happyfish100/fastdfs/releases

    2)解压缩 fastdfs.zip

    3)进入到 fastdfs 的目录中

    4)执行 ./make.sh

    5)执行 sudo ./make.sh install

    验证

    ls -al /usr/bin/fdfs*
    

    李培冠博客

    配置跟踪服务器 tracker

    1)拷贝文件

    sudo cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
    

    2)在 /home/conan/ 目录中创建目录 fastdfs/tracker

    mkdir –p /home/conan/fastdfs/tracker
    

    3)编辑 /etc/fdfs/tracker.conf 配置文件

    sudo vim /etc/fdfs/tracker.conf
    

    修改内容:

    base_path=/home/conan/fastdfs/tracker
    

    配置存储服务器storage

    1)拷贝文件

    sudo cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
    

    2)在 /home/conan/fastdfs/ 目录中创建目录 storage

    mkdir –p /home/conan/fastdfs/storage
    

    3)编辑 /etc/fdfs/storage.conf 配置文件

    sudo vim /etc/fdfs/storage.conf
    

    修改内容:

    base_path=/home/conan/fastdfs/storage
    store_path0=/home/conan/fastdfs/storage
    tracker_server=自己ubuntu虚拟机的ip地址:22122
    

    启动tracker和storage

    执行以下两条指令

    sudo fdfs_trackerd /etc/fdfs/tracker.conf
    sudo fdfs_storaged /etc/fdfs/storage.conf
    

    测试是否安装成功

    1)

    sudo cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
    

    2)编辑 /etc/fdfs/client.conf 配置文件

    sudo vim /etc/fdfs/client.conf
    

    修改内容:

    base_path=/home/conan/fastdfs/tracker
    tracker_server=自己ubuntu虚拟机的ip地址:22122
    

    3)上传文件测试

    sudo fdfs_upload_file /etc/fdfs/client.conf 要上传的图片文件路径 
    

    例如:

    sudo fdfs_upload_file /etc/fdfs/client.conf /home/conan/1.jpg
    

    如果返回类似 group1/M00/00/00/rBIK6VcaP0aARXXvAAHrUgHEviQ394.jpg 的文件 id 则说明文件上传成功。

    安装 fastdfs-nginx-module

    1)下载 nginx.tar.gz:http://nginx.org/en/download.html

    2)解压缩 nginx.tar.gz

    3)下载 fastdfs-nginx-module.zip:https://github.com/happyfish100/fastdfs-nginx-module/releases

    4)解压缩 fastdfs-nginx-module.zip

    5)下载库(更换阿里源)

    首先你需要去更换阿里源,因为ubuntu自带的源没有这个库

    怎么更换?我在 安装ubuntu系统 这一文章中有讲到,没有更换的可以去这里看一下:

    更换完成之后,执行以下命令

    sudo apt update
    sudo apt install libpcre3 libpcre3-dev
    

    如果没有下载这个的话,执行下面的命令会报错:

    李培冠博客

    6)进入解压的 nginx 目录中

    执行

    sudo ./configure  --prefix=/usr/local/nginx/ --add-module=fastdfs-nginx-module解压后的目录的绝对路径/src
    

    我这里是:

    sudo ./configure  --prefix=/usr/local/nginx/ --add-module=/home/conan/fastdfs/fastdfs-nginx-module-1.22/src
    

    这时如果还报以下错误:

    ./configure: error: the HTTP gzip module requires the zlib library.
    You can either disable the module by using --without-http_gzip_module
    option, or install the zlib library into the system, or build the zlib library
    statically from the source with nginx by using --with-zlib=<path> option.
    

    解决方案

    1)找一个临时目录,下载命令:wget http://www.zlib.net/zlib-1.2.11.tar.gz

    2)解压:zlib-1.2.11.tar.gz

    3)进入 zlib-1.2.11 文件夹

    cd zlib-1.2.11
    

    4)安装

    ./configure
    make
    make install
    

    安装完成,回到 nginx 目录中,再次执行

    sudo ./configure  --prefix=/usr/local/nginx/ --add-module=/home/conan/fastdfs/fastdfs-nginx-module-1.22/src
    

    安装完成:

    李培冠博客

    如果安装过程中报以下错误:(错误原因是因为nginx编译的时候把警告当错误处理,事实上这个警告并不影响)

    李培冠博客

    解决方案

    找到 nginx 目录下的 objs 目录下的 Makefile

    sudo vim Makefile
    

    删掉里面的 -Werror

    李培冠博客

    然后回到 nginx 目录中,再次执行:

    sudo ./configure  --prefix=/usr/local/nginx/ --add-module=/home/conan/fastdfs/fastdfs-nginx-module-1.22/src
    

    执行完上述命令之后,

    执行:

    sudo make
    

    然后执行:

    sudo make install
    

    5)拷贝

    sudo cp fastdfs-nginx-module解压后的目录中src下mod_fastdfs.conf /etc/fdfs/mod_fastdfs.conf
    

    6)修改内容

    sudo vim /etc/fdfs/mod_fastdfs.conf
    

    修改对应内容为:

    connect_timeout=10
    base_path=/home/conan/fastdfs/tracker
    tracker_server=自己ubuntu虚拟机的ip地址:22122
    url_have_group_name=true
    store_path0=/home/conan/fastdfs/storage
    

    7)拷贝文件

    sudo cp 解压缩的fastdfs目录中的conf中的 http.conf  /etc/fdfs/http.conf
    

    也可以先进入到解压缩的 fastdfs 目录中的 conf

    sudo cp http.conf /etc/fdfs/http.conf
    

    8)拷贝文件

    sudo cp 解压缩的fastdfs目录中的conf中的 mime.types /etc/fdfs/mime.types
    

    也可以先进入到解压缩的 fastdfs 目录中的 conf

    sudo cp mime.types /etc/fdfs/mime.types
    

    nginx 配置

    1)添加配置信息

    sudo vim /usr/local/nginx/conf/nginx.conf
    

    在 http 部分中添加配置信息如下:

    server {
        listen       8888;  # nginx服务器端口     
        server_name  localhost;  # ip地址     
        location ~/group[0-9]/ {  # 组名     
            ngx_fastdfs_module;
            }
        error_page   500 502 503 504  /50x.html;  # 错误页面     
        location = /50x.html {
            root   html;
            }
        }
    

    李培冠博客

    启动 nginx

    sudo  /usr/local/nginx/sbin/nginx
    

    李培冠博客

    我们之前上传过文件得到的一个凭证,复制那个凭证

    如果没有保存,重新上传一个即可(重启系统需要重新启动tracker和storage

    在浏览器中输入:

    ip地址:8888/凭证
    

    比如:

    192.168.180.130:8888/group1/M00/00/00/wKi1gl7F7jmAJC73AAB66dOYt_o243.jpg
    

    就可以看到图片啦

    李培冠博客

    李培冠博客

    欢迎访问我的个人网站:

    李培冠博客:lpgit.com

  • 相关阅读:
    Map
    Enumeration输出
    iterator的基本用法
    Annotation整合工厂设计模式
    自定义Annotation
    Annotation
    动态代理设计模式
    静态代理设计模式
    自定义ClassLoader
    获取类的类对象的几种方式
  • 原文地址:https://www.cnblogs.com/lpgit/p/13555883.html
Copyright © 2020-2023  润新知