FastDFS深入应用详解及分布式集群配置

起始

  • 从应用层面详解fastdfs各组件

  • fastdfs的多服务器场景使用及部署配置说明

 

相关的文章

1、单体安装教程 https://blog.csdn.net/suoyanming/article/details/88797360

2、开源中国fastdfs主页 p/fastdfs

3、github主页(不确定是否是原作者维护) happyfish100/fastdfs

4、对fastdfs-nginx-module 实现原理讲的非常清楚 https://www.cnblogs.com/littleatp/p/4361318.html     

 

一、FastDFS

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

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

二、深入认识FastDFS

  •      任何一个中间件的应用,都必须深入了解该中间件内部各组件的承担的功能角色、运行机制,能深入了解各组件的实现原理更好。这样才能灵活应对实际应用场景、多变的业务需求、生产环境应急等问题,快速实施架构调整。
  •      我们一直在使用FastDFS作为图片文件数据库,部署架构为单体(即:一个tracker、一个storage、一个group),由于本次用于部署fastdfs的服务器硬盘空间报警,当务之急必须更改fastdfs部署架构,扩展存储。
  •      下面从项目总体情况、tracker 、storage、fastdfs-nginx-module 、group 组件详细说明其功能角色及运行机制

1、项目总体情况

  •        fastdfs是开源的项目
  •        通过github源码可看出,该项目是基于C语言开发的
  •        fastdfs是基于操作系统OS的文件管理系统功能之上进行分布式文件管理(Linux、FreeBSD等),通过看文件在硬盘的保存方式也可以得出
  •        提供C、Java和PHP API接口

2、tracker跟踪器

  •  主要做调度工作, 起负载均衡的作用

  •  在内存中记录集群中所有存储组group和存储服务器storage 的状态信息, 是客户端和数据服务器交互的枢纽

  • tracker的核心工作内容:

          (1) 记录集群中有多少个group(group1\group2....)

            (2)  每个group 分布在那个几个storage上,以及storage所在机器的ip,端口等信息,group之间的同步由tracker 和storage一起完成(后面细讲)

          (3)如果同一个group 存在多个storage, 而这些storage又被分布在一台或多台机器上,那么对该group上传或读取文件具体落到那个机器上(即那个storage)?(有点绕)

                   tracker完美的解决了这个问题,即对分布式部署架构下:多group、多storage的上传和下载做负载均衡策略,通过配置tracker.conf可实现具体负载均衡策略

            (4)  tracker 可部署多台,多个tracker在服务器内存中记录的信息是一样的,通过nginx对tracker做负载均衡,以提高并发性能及容灾能力

          (5)tracker 不去主动读取storage的相关信息,而是由storage主动推送给tracker (这也是为什么必须先启动tracker的原因) 

          (6)以下图片摘自网上 : 上传文件过程 、下载文件过程,通过图片可以看到,tracker的核心工作是为客户端找到一个storage, client客户端和storage进行上传下载通信。

  • tracker.conf  (在分布式部署架构下,通过tracker负载均衡给client端返回特定storage信息,而负载均衡的策略配置主要在tracker.conf中)

  •  1)核心参数配置说明

(1)disabled=false

         #配置文件是否失效

         # is this config file disabled

        # false for enabled

        # true for disabled disabled=false

        # is this config file disabled # false for enabled # true for disabled

(2)port=22122

           #服务端口

           # the tracker server port

(3) base_path=/data/fastdfs/tracker

             # 存放track 数据及日志文件目录 

             # the base path to store data and log files

(4)work_threads=4

 

          #时线程数:一般和cpu的个数设为同一个值         

          # work thread count, should <= max_connections

          # default value is 4

           # since V2.00

(4)(重要) store_lookup=1 

             #  上传文件选择哪个一个group 的 策略:0:轮询;1:指定组  ; 2: 负载均衡,选择剩余存储空间最大的组group 上传文件

              # the method of selecting group to upload files

             # 0: round robin

             # 1: specify group

            # 2: load balance, select the max free space group to upload file

(5)(重要) store_group=group2

        # 当  store_lookup=1  时,该配置有效,指定存储的组名

         # which group to upload file

         # when store_lookup set to 1, must set store_group to the group name

(6)(重要) store_server=0

       # 应用场景: 存在多个相同的组,例如group1 , 在多个storage 服务器上 例如:192.168.0.171 、,

                            当上传文件时优先选择那个storage的策略配置:~ 0:轮询 ;1:按ip升序排序后选择第一个ip,即最小的那个ip (192.168.0.164);2:按优先级排列的第一个服务器顺序,数字越小优先级越 高,storage服务器的优先在storage.conf中配置 upload_priority 参数

    # which storage server to upload file

       # 0: round robin (default)

        # 1: the first server order by ip address

        # 2: the first server order by priority (the minimal)

(7)(重要)  store_path=0

       # 应用场景:选择具体一个组的那一条存储路径(一个group有多条存储路径,一般一个服务器有两块大硬盘挂载到了两个路径下,专门用来存放文件),~0:轮询,2:负载均衡,选择剩余空间最大的路径 

         (逻辑~重要) 通过上面的配置参数确定了3件事的基础上,该配置才会起作用:

        (1)确定了要存储在那个group上,例如group1;(2)确定上传文件要保存在那一台storage 中的group1,假如是192.168.0.171;(3) 此时如果 192.168.0.171 上的storage server中group1 有两个存储路径,即store_path0,store_path1,(对应的文件路径即M00,M01)

  # which path(means disk or mount point) of the storage server to upload file

       # 0: round robin

      # 2: load balance, select the max free space path to upload file

(8)download_server=0

        # 下载文件时存储服务器的选择策略; 应用场景:要下载的文件所在group 存在多个storage 服务器上, ~0:轮询  ;1:当前文件上载到的源存储服务器

        # which storage server to download file

        # 0: round robin (default)

       # 1: the source storage server which the current file uploade

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值