云盘项目(一)——基于fastDFS的分布式文件系统搭建

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

分布式文件系统

一般地,我们的电脑上装的Windows或者linux操作系统,都会自带一个文件系统(比如fat32,ntfs,ext3,ext4等格式),用来管理和存储电脑上的文件。当然,如果你电脑上装了双系统,那每个操作系统都对应一个文件系统。

如果一台电脑的磁盘空间不够了,可以继续加硬盘,但这种本地扩容的手段很难满足大规模数据的存储。而分布式文件系统突破了这个限制,通过将存储节点放在不同的主机上,不同的主机组成网络,用户不用关心数据到底存放在那台主机上,就像使用本地文件系统一样。

fastDFS概述

fastDFS是淘宝架构师余庆用C语言编写的一款开源的分布式文件系统,它为互联网应用量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标。借助fastDFS可以很容易地搭建一套高性能的文件服务器集群,提供文件上传、下载等服务。

fastDFS属于应用层级的文件系统,不能进行挂载、卸载的mount操作(U盘的插拔就属于这种操作)。

fastDFS架构

分布式文件系统一般采用一台管理服务器和多台存储服务器的架构:管理服务器记录每个存储服务器的状态(容量、存储记录、IP地址等),可以存储数据也可以不存储数据;而存储服务器专门用来存储数据。
云盘项目(一)——基于fastDFS的分布式文件系统搭建_第1张图片
在fastDFS文件系统中对应了三个角色:客户端(client)追踪器(tracker)存储节点(storage)

这三个角色的关系可以这样描述:

  1. client和storage主动连接tracker
  2. storage主动向tracker报告自身状态信息
    • 磁盘剩余情况
    • 文件同步状况
    • 文件上传、下载次数
    • storage会启动一个单独的线程来完成对一台tracker的连接和定时报告。
  3. client需要上传文件时
    • 先向tracker发送上传连接请求,tracker返回某个存储空间足够的目标storage的ip和端口,client与storage断开连接
    • 向目标storage上传文件(包括文件名和文件数据),storage存储文件后,向client返回重新编码后的file_id(包含存储路径信息和文件名),storage与client断开连接
  4. client需要下载文件时
    • 先向tracker发送下载连接请求,tracker查询后返回目标storage的ip和端口,client与storage断开连接
    • 向目标storage发送需要下载的文件的file_id,storage向client发送文件,storage与client断开连接
  5. storage和client之间基于TCP协议进行文件传输

fastDFS集群

集群(cluster)技术可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益。一个客户端与集群相互作用时,集群像是一个独立的服务器。
云盘项目(一)——基于fastDFS的分布式文件系统搭建_第2张图片
fastDFS通过集群配置提高文件系统的可用性和可缩放性。

  1. tracker集群

    • 多个tracker server之间是相互平等关系同时提供服务,tracker server之间进行数据同步
    • 通过集群,tracker server不存在单点故障。
    • client请求Tracker server时采用轮询方式,如果请求的tracker无法提供服务则换另一个tracker。
  2. storage集群

    • storage集群采用了分组存储方式,由一个或多个组(group)构成
    • 集群存储总容量为集群中所有组的存储容量之和
    • 一个组由一台或多台storage存储服务器组成,组内的storage server之间是平等关系,组内的storage进行数据同步,冗余备份;不同组的Storage server之间不会相互通信
    • 一个组的存储容量为该组内storage存储服务器容量最小的那个
    • 通过添加group组进行文件系统的容量扩充–横向扩容
    • 组内添加storege节点进行数据备份–纵向扩容

Linux环境下fastDFS的安装与配置

fastDFS安装

  1. 新建/fdfs-package路径,下载libfastcommon、fastdfs包并解压
wget https://github.com/happyfish100/libfastcommon/archive/V1.0.39.tar.gz -SO libfastcommon.tar.gz
wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz -SO fastdfs.tar.gz
#解压命令 tar -xf xxx.tar.gz

小提示:提示权限不够时,一般都可以在命令前加上sudo 解决。
2. 编译安装基础库包 libfastcommon

cd libfastcommon-1.0.39
./make.sh
./make.sh install
#可能需要创建动态库软连接
#sudo ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
  1. 编译安装fastDFS
cd fastdfs-5.11
./make.sh
./make.sh install

安装结束后的程序命令在/usr/bin目录下,而配置文件是在/etc/fdfs目录下,可以通过fdfs_test命令测试是否安装成功。

fastDFS配置

需要对fastDFS的配置文件进行修改,才能正常使用。一般不直接对提供的示例配置文件进行修改,所以会先复制一份。

  1. 复制client、tracker、storage的配置文件
cd /etc/fdfs
sudo cp tracker.conf.sample  tracker.conf
sudo cp storage.conf.sample storage.conf
sudo cp client.conf.sample client.conf
  1. 修改tracker的配置文件tracker.conf
    • bind_addr=192.168.82.253
      绑定当前主机IP
    • port=22122
      绑定的端口,一般先检查端口空闲
    • base_path=/home/robin/fastDFS/tracker
      日志文件log存放的目录,需为可用的路径
    • 修改完成之后,就可以启动tracker服务了
      • 启动tracker:fdfs_trackerd /etc/fdfs/tracker.conf
      • 重启:fdfs_trackerd /etc/fdfs/tracker.conf restart
      • 关闭:fdfs_trackerd /etc/fdfs/tracker.conf stop
  2. 修改storage的配置文件
    • group_name=group1
      该存储节点所属的组名
    • bind_addr=192.168.82.253
      绑定当前的IP
    • port=23000
      绑定的端口
    • base_path=/home/robin/fastDFS/storage
      日志文件log存放的目录,需为可用的路径
    • store_path_count=1
      存储目录的个数
    • store_path0=/home/robin/fastDFS/storage
      具体的存储目录,需可用,且与存储目录个数对应
    • tracker_server=192.168.82.253:22122
      连接的tracker的IP和端口
    • 修改完成之后,就可以启动storage服务了
      • fdfs_storaged /etc/fdfs/storage.conf
      • sudo fdfs_storaged /etc/fdfs/storage.conf restart
      • sudo fdfs_storaged /etc/fdfs/storage.conf stop
  3. 修改client的配置文件
    • base_path=/home/robin/fastDFS/client
      • 日志文件log存放的目录,需为可用的路径
    • tracker_server=192.168.82.253:22122
      • 连接tracker时候需要的iP和端口信息
    • 修改完成后,就可以使用命令测试文件的上传和下载了
  4. 检测当前fdfs环境是否搭建成功
fdfs_monitor/etc/fdfs/client.conf

你可能感兴趣的:(云盘项目(一)——基于fastDFS的分布式文件系统搭建)