FastDFS分布式文件系统_Linux

一、分布式文件系统概述

1.单机时代

初创初期由于时间紧,在各种资源有限的情况下,通常就直接在项目目录下建立静态文件夹,用于存放项目中的文件资源。如果按不同类型再细分,可以在项目目录下再建立不同的子项目来区分。例如resource/static/file、resource/static/img等
优点是便利,使用方便;缺点是文件越多存放越混乱。

2.独立文件服务器

随着公司业务不断发展,将代码和文件放在同一服务器的弊端就会越来越明显。为了解决上面的问题,引入独立文件服务器。
工作流程:项目上传文件时,首先通过ftp或者ssh将文件上传到图片服务器的某个目录下,再通过nginx或者apache来访问此目录下的文件,返回一个独立域名的图片URL地址,前端使用文件时就通过这个URL地址读取。

3.分布式文件系统

随着业务继续发展,单台服务器存储和响应也很快达到了瓶颈,新的业务需要文件访问具有高响应性、高可用性来支持系统。
优点:
扩展能力:扩展能力是一个分布式文件系统最重要的特点。
高可用性:在分布式文件系统中,高可用性包含两层,一是整个文件系统的高可用性,二是数据的完整和一致性。
弹性存储:可以根据业务需要灵活的增加或缩减数据存储以及增删存储池中的资源,而不需要中断系统运行。
缺点:系统复杂度高,需要更多服务器

独立文件服务器的缺点是容灾、单点故障问题、垂直扩展性稍差。
垂直扩展:我们通过增加系统成员的生产效率来获得期望的负荷量。
水平扩展:就是增加服务器的数量。

4.FastDFS

FastDFS是一个开源的轻量级分布式文件系统。它解决了大数据量存储和负载均衡等问题。特别适合以中小文件(48k<file_size<500mb)为载体的在线服务,如相册网站、视频网站等等。
FastDFS特性:
文件不分块存储,上传的文件和OS文件系统中的文件一一对应
支持相同内容的文件只保存一份,节约磁盘空间
下载文件支持HTTP协议,可以使用Web Server,也可以和其他Web Server配合使用
支持在线扩容
支持主从文件
分布式文件服务提供商有阿里的OSS、七牛云存储、百度云存储。

5.FastDFS核心概念

tracker,跟踪服务器,主要做调度工作,起负载均衡作用。在内存中记录集群中所有存储组和存储服务器状态信息,是客户端和数据服务器交互的枢纽。

storage,存储服务器(又称存储节点或数据服务器),文件和文件属性(meta data)都保存到存储服务器上。Storage server直接利用OS文件系统调用管理文件。

client,客户端,作为业务请求的发起方,通过专有接口,使用TCP/IP协议与服务器或存储节点进行数据交互。FastDFS向使用者提供基本文件访问接口,比如upload、download、append、delete等,以客户端库的方式提供给用户使用。
group,组,也可称卷。同组内服务器上的文件是完全相同的,同组内的storage server之间是对等的,文件上传、删除等操作可以在任意一台storage server上进行。

traker相当于FastDFS的大脑,不论是上传还是下载都是通过tracker来分配资源;客户端一般可以使用nginx等静态服务器来做调用或做一部分缓存;存储服务器成为组(或卷),组与组之间是平行的关系,根据资源使用情况可以随时增加,组内服务器文件相互同步备份,以达到容灾的目的。

工作流程:client发起业务请求,通过tracker,tracker告诉你该找哪个storage并记录,client上传文件到storage,storage操作(上传时group内同步操作),最后返回结果给client。

6.上传机制

首先客户端请求Tracker服务获取到存储服务器的ip地址和端口,然后客户端根据返回的ip地址和端口请求上传文件,存储服务器接收到请求后生产文件,并且将文件内容写入磁盘并返回给客户端file_id、路径信息、文件名等信息,客户端保存相关信息上传完毕。
上传的工作流程:
1.storage server向tracker server定时上传状态信息
2.client上传连接请求到tracker server
3.tracker server查看可用的storage server
4.tracker server返回信息(storage的ip和端口)给client,(剩余空间最多的优先返回给client)
5.上传文件(file content和meta data)到storage server
6.storage server生成file_id以及路径信息和文件名
7.storage server将上传内容写入磁盘
8.storage server返回file_id以及路径信息和文件名给client
9.client存储storage返回的文件信息

生成file_id:选定存储目录后,storage会为文件生成一个file_id,由storage server ip、文件创建时间,文件大小、文件crc32和一个随机数拼接而成,然后将这个二进制串进行base64编码,转换为可打印的字符串

Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看RFC2045~RFC2049,上面有MIME的详细规范。
Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。

生成文件名:当文件存储到某个子目录后,即认为该文件存储成功,接下来会为该文件生成一个文件名,文件名由group、存储目录、两级子目录、file_id、文件后缀名(由客户端指定,主要用于区分文件类型)拼接而成。

7.下载机制

客户端将带上文件名信息请求tracker服务获取到存储服务器的ip地址和端口,然后客户端根据返回的IP地址和端口号请求下载文件,存储服务器接收到请求后返回文件给客户端。
下载的工作流程:
1.storage server向tracker server定时上传状态信息
2.client带文件名向tracker server发起下载连接请求
3.查询可用storage(检验同步状态)
4.返回信息(storage的ip和端口)给client
5.client向storage server下载文件,并传递file_id(组名,路径、文件名)
6.storage server查找文件
7.storage server返回文件内容file_content给client

二、分布式文件系统实践

1.环境搭建

  • 通过yum下载安装gcc:yum -y install gcc-c++ perl-devel pcre-devel openssl-devel zlib-devel wget,gcc-c++即下载c++的编译器。
  • 从github下载安装FastDFS:wget https://github.com/happyfish100/fastdfs/archive/V6.06.tar.gz
  • 从github下载安装FastDFS依赖:wget https://github.com/happyfish100/libfastcommon/archive/V1.0.43.tar.gz
  • 解压V1.0.43.tar.gz到/usr/local目录:tar -zxvf V1.0.43.tar.gz -C /usr/local
  • 解压V6.06.tar.gz到/usr/local目录:tar -zxvf V6.06.tar.gz -C /usr/local
  • cd进入到/usr/local/libfastcommon-1.0.43目录下,启动make.sh脚本并安装:./make.sh&&./make.sh install
  • cd进入到/usr/local/fastdfs-6.06目录下,启动make.sh脚本并安装:./make.sh&&./make.sh install
  • 进入到/etc/fdfs目录下,将4个文件的sample后缀去掉:cp client.conf.sample client.confcp storage.conf.sample storage.confcp tracker.conf.sample tracker.conf

tracker:

  • 递归创建tracker目录:mkdir -p /data/fastdfs/tracker
  • 编辑/etc/fdfs/tracker.conf文件,修改tracker的数据文件和日志的目录base_path以及http端口号http.server_port:base_path = /data/fastdfs/trackerhttp.server_port = 8888;路径后面不要加注释
  • 进入到/etc/init.d/目录下,启动tracker服务:./fdfs_trackerd start
  • 查看FastDFS状态:ps -ef|grep fastdfs,ps -ef|grep用来查找特定进程。
    检查FastDFS服务:netstat -lntup |grep fdfs,此时有tracker一个角色

storage:

  • 创建storage日志目录:mkdir /data/fastdfs/base
  • 创建storage目录:mkdir /data/fastdfs/storage
  • 编辑/etc/fdfs/storage.conf文件,修改storage日志记录的目录base_path、数据文件存储的目录base_path0以及tracker服务器的ip地址和端口号:base_path = /data/fastdfs/basebase_path0 = /data/fastdfs/storagetracker_server = 192.168.126.11:22122;路径后面不要加注释
    此时storage的日志记录和数据文件存储目录是分开的,而tracker是一起的。
  • 进入到/etc/init.d/目录下,启动storage服务: ./fdfs_storaged start
  • 检查FastDFS服务:netstat -lntup |grep fdfs,此时有storage和tracker俩个角色

client:

  • 创建client日志目录:mkdir /data/fastdfs/client
  • 编辑/etc/fdfs/client.conf文件,修改client的数据文件和日志的目录base_path以及tracker_server的ip地址和端口号:base_path = /data/fastdfs/clienttracker_server = 192.168.126.11:22122;路径后面不要加注释

2.FastDFS指令操作

  • 上传指令:fdfs_upload_file <config_file> <local_filename> [storage_ip:port] [store_path_index]
    <config_file>:配置文件路径
    <local_filename>:本地文件路径
    [storage_ip:port]:可选参数
    [store_path_index]:可选参数

  • 下载指令:fdfs_download_file <config_file> <file_id> [local_filename] [<download_offset> <download_bytes>]
    <config_file>:配置文件路径
    <file_id>:文件在FastDFS中的唯一文件标识,即卷名+文件名
    [local_filename]:可选参数,文件下载后的存放地址
    <download_offset> :可选参数,文件下载开始时间
    <download_bytes>:可选参数,文件下载的字节数

  • 查看指令:fdfs_file_info <config_file> <file_id>
    <config_file>:配置文件路径
    <file_id>:文件在FastDFS中的唯一文件标识,即卷名+文件名

  • 删除指令:fdfs_delete_file <config_file> <file_id>
    <config_file>:配置文件路径
    <file_id>:文件在FastDFS中的唯一文件标识,即卷名+文件名

实践示例:

上传:

  • 在/opt目录下上传一张图1.jpg;然后再将图片上传至FastFDS:fdfs_upload_file /etc/fdfs/client.conf /opt/1.jpg,此时返回group1/M00/00/00/wKh-C2LlN-WAHjmXAALqcbRjO_Y336.jpg
    即上传至/data/fastdfs/storage/data/00/00wKh-C2LlN-WAHjmXAALqcbRjO_Y336.jpg

下载:

  • 在/opt目录下,从FastDFS中下载一张图片:fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/wKh-C2LlN-WAHjmXAALqcbRjO_Y336.jpg,在/opt目录会出现这张图片wKh-C2LlN-WAHjmXAALqcbRjO_Y336.jpg

查看:

  • 从FastDFS查看图片信息:fdfs_file_info /etc/fdfs/client.conf group1/M00/00/00/wKh-C2LlN-WAHjmXAALqcbRjO_Y336.jpg

删除:

  • 从FastDFS中删除一张图片:fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/wKh-C2LlN-WAHjmXAALqcbRjO_Y336.jpg

总结:

1.FastDFS的工作流程是storage server向tracker server定时发送状态信息;然后client向tracker server发起业务请求,tracker server 查看storage server组,在组中将合适的storage server的ip地址和端口号返回给client;而client根据ip地址和端口号下载/上传/查看/删除文件;storage server group同步处理业务;最后返回结果给client。
即client请求tracker server,tracker server返回storage server的端口号和ip地址,client根据端口号和ip地址对storage server操作,处理业务。
2.小项目可以直接将文件保存在项目中,不小不大的可以使用独立文件服务器,大项目用分布式文件系统。但是也要根据业务的需要来决定。
3.FastDFS是一个分布式文件系统,适合文件大小为48k到500m之间的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值