FastDFS

FastDFS分布式文件系统

Posted by Bug1024 on April 9, 2017

简介

由国人开发的, 用C语言实现的,开源的分布式文件系统,对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题, 特别适合以文件为载体的在线服务

设计

  • FastDFS中只有两个角色:Tracker和Storage。
  • Tracker作为中心结点,其主要作用是维护Storage信息,负载均衡和调度等。
  • Tracker会在内存和临时文件中记录Storage分组和Storage的状态等信息,不记录文件索引信息,占用的内存量很少。
  • 而重要的文件索引信息将附属在Storage生成的文件ID中,这无疑去掉文件索引这一步,也提高了文件检索的性能。

存储

  • FastDFS采用了分组存储方式来保存文件的多个备份。
  • 存储集群由一个或多个逻辑组构成,集群存储总容量为集群中所有组的存储容量(一个存储组的容量由该组中容量最小的Storage决定)之和。
  • 一个组由一台或多台Storage组成,同组内的多台Storage之间是互备关系,同组内的存储服务器上的文件是完全一致的。
  • 文件上传、下载、删除等操作可以在组内任意一台Storage上进行。

架构

架构

  • Client和Storage主动连接Tracker。Storage主动向Tracker报告其状态信息,包括磁盘剩余空间、文件同步状况、文件上传下载次数等统计信息。Storage会启动一个单独的线程来完成对一台Tracker的连接和定时报告。一个组包含的Storage不是通过配置文件设定的,而是通过Tracker获取到的。
  • 文件操作。Storage采用binlog文件记录文件上传、删除等更新操作。binlog中只记录时间戳,操作类型,文件路径。
  • 文件同步。不同组的Storage相互独立,同组内的Storage之间会相互连接进行文件同步,采用push的方式。

安装

安装FastDFS依赖的公共库

    git clone git@github.com:happyfish100/libfastcommon.git
    cd libfastcommon
    ./make.sh
    ./make.sh install

安装FastDFS

    git clone git@github.com:happyfish100/fastdfs.git
    cd fastdfs
    ./make.sh
    ./make.sh install

常用命令

    # 启动/关闭/重启 Tracker
    fdfs_trackerd tracker.conf [start|stop|restart]
    # 启动/关闭/重启 Storage
    fdfs_storaged storage.conf [start|stop|restart]
    # 监控
    fdfs_monitor client.conf
    # 上传测试
    fdfs_test client.conf upload xxx.jpeg
    # 下载测试
    fdfs_test client.conf download group1 M00/yyy.jpeg