fastDFS使用与介绍

fastDFS是用c写的一款开源的分布式文件系统,可以很容易地搭建一套分布式文件系统。

fastDFS中的三个角色

  • 追踪器(Tracker)->管理者:管理存储节点,类似于Hadoop中的namenode
    • 需要多个Tracker以避免单点故障
    • 与Hadoop不同的是Tracker是以轮询的方式实现的
  • 存储节点(storage)->存储节点:存储数据,类似于Hadoop中的DataNode
  • (实现)客户端(client)->界面管理:上传下载功能的实现

安装

下载 libfastcommon与fastdfs
安装过程相同:
​ 先安装libfastcommon
​ ./make.sh && ./make.sh install
​ 再安装fastdfs
​ ./make.sh && ./make.sh install

工作顺序

  • 启动Tracker
    • Tracker接收storage的心跳信息并与其建立映射
  • 启动storage
    • 单独开启一个线程
      • 汇报节点状态
      • 汇报当前存储节点的磁盘信息
      • 汇报数据同步情况
      • 汇报数据被下载的次数
  • 启动客户端
    • 上传
      • 连接Tracker,询问存储节点信息
      • Tracker查询符合上传文件大小的存储节点并返回节点信息
      • Tracker将节点信息返回给client
      • (集群)选择需要连接的Tracker
      • 发送文件
      • 选择存储的group
      • 存储上传文件后返回的一个文件地址
    • 下载
      • 连接Tracker,查询文件所在节点
      • Tracker返回存储文件的节点信息,返回节点的ip:端口
      • (集群)选择需要连接的Tracker
      • 下载文件

测试安装

安装

libfastcommon-1.36.zip(fastdfs的基础库包 )

  • unzip libfastcommon-1.36.zip
  • ./make.sh
  • ./make.sh install

fastdfs-5.10.tar.gz
​ tar zxvf fastdfs-5.10.tar.gz
​ ./make.sh
​ ./make.sh install

测试

1
2
#fastDFS安装的所有的可执行程序: /usr/bin/fdfs_*
fdfs_test

fastDFS配置文件


配置文件默认位置: /etc/fdfs

  • client.conf.sample
  • storage.conf.sample
  • storage_ids.conf.sample
  • tracker.conf.sample

tracker.conf

1
2
3
4
5
# 将追踪器和部署的主机的IP地址进程绑定, 也可以不指定
# 如果不指定, 会自动绑定当前主机IP, 如果是云服务器建议不要写 bind_addr=192.168.247.135
# 追踪器监听的端口
port=22122
# 追踪器存储日志信息的目录, xxx.pid文件, 必须是一个存在的目录 base_path=/home/yuqing/fastdfs

storage.conf

1
2
3
4
5
6
7
8
9
10
11
# 当前存储节点对应的主机属于哪一个组 group_name=group1
group_name=group1
# 当前存储节点和所应该的主机进行IP地址的绑定, 如果不写, 有fastdfs自动绑定 bind_addr=
# 存储节点绑定的端口
port=23000
# 存储节点写log日志的路径 base_path=/home/yuqing/fastdfs
# 存储节点提供的存储文件的路径个数 store_path_count=2
# 具体的存储路径 store_path0=/home/yuqing/fastdfs store_path1=/home/yuqing/fastdfs1
# 追踪器的地址信息 tracker_server=192.168.247.135:22122 tracker_server=192.168.247.136:22122
tracker_server=192.168.247.135:22122
tracker_server=192.168.247.136:22122

client.conf

1
2
3
4
5
6
# 客户端写log日志的目录
# 该路径必须存在
# 当前的用户对于该路径中的文件有读写权限
# 当前用户robin
# 指定的路径属于root base_path=/home/yuqing/fastdfs
# 要连接的追踪器的地址信息 tracker_server=192.168.247.135:22122 tracker_server=192.168.247.136:22122

启动

tracker追踪器的启动

1
2
3
4
5
6
7
# 启动程序在 /usr/bin/fdfs_*
# 启动
fdfs_trackerd 追踪器的配置文件(/etc/fdfs/tracker.conf)
# 关闭
fdfs_trackerd 追踪器的配置文件(/etc/fdfs/tracker.conf) stop
# 重启
fdfs_trackerd 追踪器的配置文件(/etc/fdfs/tracker.conf) restart

storage存储节点的启动

1
2
3
4
5
6
# 启动
fdfs_storaged 存储节点的配置文件(/etc/fdfs/stroga.conf)
# 关闭
fdfs_storaged 存储节点的配置文件(/etc/fdfs/stroga.conf) stop
# 重启
fdfs_storaged 存储节点的配置文件(/etc/fdfs/stroga.conf) restart

client客户端启动

1
2
3
4
5
# 上传
fdfs_upload_file 客户端的配置文件(/etc/fdfs/client.conf) 要上传的文件
# 得到的结果字符串: group1/M00/00/00/wKj3h1vC-PuAJ09iAAAHT1YnUNE31352.c
# 下载
fdfs_download_file 客户端的配置文件(/etc/fdfs/client.conf) 上传成功之后得到的字符串(fileID)

fastdfs状态检测

1
2
# 检测命令
fdfs_monitor /etc/fdfs/client.conf

storage的七种状态

1
2
3
4
5
6
7
# FDFS_STORAGE_STATUS:INIT:初始化,尚未得到同步已有数据的源服务器
# FDFS_STORAGE_STATUS:WAIT_SYNC :等待同步,已得到同步已有数据的源服务器
# FDFS_STORAGE_STATUS:SYNCING:同步中
# FDFS_STORAGE_STATUS:DELETED:已删除,该服务器从本组中摘除
# FDFS_STORAGE_STATUS:OFFLINE:离线
# FDFS_STORAGE_STATUS:ONLINE:在线,尚不能提供服务
# FDFS_STORAGE_STATUS:ACTIVE:在线,可以提供服务

fileID

file.md -> group1/M00/00/00wKhS_VlrEf0AdIZyAAAJT0wCgr43848.md

  • group1
    • 文件上传到的存储节点的哪个组
    • 如果有多个组,组名是变化的
  • M00
    • 虚拟目录
    • 和存储节点的配置项映射
      • store_path0=/home/yuqing/fastdfs/data -> M00
      • store_path1=/home/yuqing/fastdfs1/data -> M01
  • 00/00
    • 实际路径
    • 可变
  • wKhS_VlrEfOAdIZyAAAJTOwCGr43848.md
    • 文件名包含的信息,
    • Base64编码,信息包括:
      • 源storage server ip地址
      • 文件创建时间
      • 文件大小
      • 文件CRC32校验码
        • 循环冗余校验
      • 随机数