zoukankan      html  css  js  c++  java
  • FastDFS安装(mac)|文件存储方案

    FastDFS安装(mac)|文件存储方案

    在我们进行相关项目开发时,肯定会遇到需要进行文件保存的需求。那么这些文件(如图片)保存到哪里呢?

    • 第一种方案是直接保存到本地磁盘中,即通过浏览器发一个post的请求,相关程序将文件保存到本地,这样完全可以实现。但缺点是文件和项目代码都会保存到同一台电脑上,即这台电脑(服务器)既要向客户端响应项目代码又要响应文件。
    • 如果像分开就可以使用文件服务器,在这里就是FastDFS,即项目代码在一台电脑,文件在另一台电脑(也就是服务器)。从而实现分开

    1 FastDFS介绍

    1.1 FastDFS架构

    包括ClientTracker serverStorage server

    • 整体过程:Client也就是我们说的客户端,其请求Tracker进行文件上传、下载,Tracker再调度Storage完成文件上传和下载。
    • Client: 客户端,业务请求的发起方,通过专有接口,使用TCP/IP协议与Tracker或Storage进行数据交互。FastDFS提供了upload、download、delete等接口供客户端使用。
    • Tracker server:跟踪服务器,主要做调度工作,起负载均衡的作用。在内存中记录集群中所有存储组和存储服务器的状态信息,是客户端和数据服务器交互的枢纽。
    • Storage server:存储服务器(存储节点或数据服务器),文件和文件属性都保存到存储服务器上。Storage server会定时的向Tracker server发消息,如果一段时间没发,Tracker server就会将其去除。直接利用OS的文件系统调用管理文件。
      • Storage群中的横向可以扩容,纵向可以备份。

    1.2 工作原理实例介绍

    以上传文件为例:

    • Client拿到需要上传的文件,这时Client会向Tracker server发一则消息即“当下需要保存文件”;
    • Tracker server在接到消息后,就会从其列表中寻找可用的Storage server,并将可用的Storage server IP返回给Client
    • Client在就到相关IP后,就向这个指定IP的那台服务器发生要上传的文件;
    • Storage server 收到文件会将文件保存,并为其起名,后将该名称返回给Client
    • Client收到这个名字后只需将该名称保存下来,供以后依据该名称到Storage server找寻该文件。

    1.3 FastDFS上传和下载流程

    在这里插入图片描述
    在这里插入图片描述

    1.4 FastDFS文件索引

    在这里插入图片描述

    • FastDFS上传和下载流程 都涉及到文件索引(file_id)

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

      • 组名:文件上传后所在的 Storage 组名称。
      • 虚拟磁盘路径:Storage 配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。
      • 数据两级目录:Storage 服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。
      • 文件名:由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。

    在这里插入图片描述

    2 FastDFS安装(mac)

    笔者先尝试了使用docker安装FastDFS,但在创建storage容器时无法映射出data中的多个目录,为此也是尝试了很多方法且网上多数是在ubuntu系统进行的安装,前后花费了五六个小时,如果您有相关有效的解决的方法欢迎私信。这个方法我得出的结论是:

    --network=host 参数只有在linux下生效, mac windows 都不能成功,所以导致安装fastdfs是失败的

    因此笔者使用了如下的安装方法,亲测有效:

    2.1 安装包(如果要与Nginx连接,需要用下面百度云的四件套)

    链接:https://pan.baidu.com/s/1mQNAb7djkAtX3NyqqURT6g
    密码:lpoh

    延伸阅读:

    注意:上两个链接都是github上成熟的项目,进入页面后点击“Clone or download” ---> “Download ZIP”

    2.2 安装libfastcommon

    cd libfastcommon压缩包解压后的文件地址,一定要自行修改如(/Users/..../Desktop/libfastcommon-master)
    ./make.sh
    sudo ./make.sh install
    

    2.3 安装FastDFS

    cd FastDFS压缩包解压后的文件地址,一定要自行修改如(/Users/..../Desktop/fastdfs-master)
    ./make.sh
    sudo ./make.sh install
    

    2.4 相关文件配置

    (1)配置跟踪服务器tracker

    • 拷贝tracker配置文件
    sudo cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
    
    • 先手动创建您想要存放目录,即收到创建文件夹(名称自由,但尽量不变方便后期查找): /您方便的目录/fdfs/tracker。笔者是在创建了如下目录路径是:

      /var/fdfs/tracker
      
    • 编辑/etc/fdfs/tracker.conf配置文件

      sudo vim /etc/fdfs/tracker.conf
      
      • 修改其中base_path的部分如下:
      base_path=/您方便的目录/fdfs/tracker
      

    (2)配置存储服务器storage

    • 拷贝storage配置文件
    sudo cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
    
    • 先手动创建您想要存放目录,即收到创建文件夹(名称自由,与上tracker保持在一个上级目录下): /您方便的目录/fdfs/storage。笔者是在创建了如下目录:
    /var/fdfs/storage
    
    • 编辑/etc/fdfs/storage.conf 配置文件
    sudo vim /etc/fdfs/storage.conf
    
    • 修改其中的base_path, store_path0, tracker_server
    base_path=/您方便的目录/fdfs/storage
    store_path0=/您方便的目录/fdfs/storage
    tracker_server=Mac的IP地址:22122
    

    (3)启动tracker和storage

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

    (4)查看是否启动成功

    ps aux|grep fdfs
    

    如出现下面情况,则表明成功:

    root             13211  98.0  0.0  4298076    800   ??  R     2:58下午   0:02.19 fdfs_storaged /etc/fdfs/storage.conf start
    你的mac名        13256   0.0  0.0  4268192    464 s000  R+    2:58下午   0:00.00 grep fdfs
    root             13140   0.0  0.0  4297384    796   ??  S     2:58下午   0:00.00 fdfs_trackerd /etc/fdfs/tracker.conf start
    

    2.5 client.conf配置文件修改

    • 拷贝client配置文件
    sudo cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
    
    • 修改client配置文件
    sudo vim /etc/fdfs/client.conf
    
    • 修改其中的内容:
    base_path=/您方便的目录/fdfs/tracker
    tracker_server=您Mac的IP地址:22122
    
  • 相关阅读:
    通过PDB文件实现非嵌入式的c++反射
    在c++中实现反射的初步想法
    对比特币相关的一些技术细节的补充
    初窥比特币
    根据一个坐标查找其所属区域的一些优化想法
    go两种数据类型的区别、数据类型和操作符、常量、变量声明
    go的相关包time、os、rand、fmt
    go语言的特性
    结构体
    defer、panic、recover
  • 原文地址:https://www.cnblogs.com/Bert-Sun/p/12889919.html
Copyright © 2011-2022 走看看