TFS学习笔记

一、简介

TFS(Taobao File System)是一个高可扩展、高可用、高性能、面向互联网服务的分布式文件系统。主要针对海量的非结构化数据。

它构建在Linux机器集群上,可为外部提供高可靠、高并发的存储访问。TFS为淘宝提供了海量小文件存储,通常文件大小不超过1M,满足了淘宝对小文件存储的需求。

1、TFS采用了HA架构:有一个活动节点和备份节点,当活动节点挂了,备份节点会检测到,并顶上。

2、平滑扩容

二、TFS总体结构

一个TFS集群由两个NameServer节点(一主一备),和多个DataServer节点组成,这些服务程序都是作为一个用户级的普通程序运行在Linux虚拟机上的。

在TFS中,将大量的小文件(如图片)合并成一个大文件,这个大文件称为Block(块),每个block块拥有一个集群内唯一的BlockID, 这是由NameServer创建Block时分配的,NameServer负责维护Block和DataServer的关系,Block信息(Block元文件)都存储在NameServer上,而Block实际的数据都存储在DataServer上,每台DataServer服务器上基本都会有很多DataServer进程,他们通常挂载一个独立的磁盘文件目录,以降低磁盘损坏带来的影响。
在这里插入图片描述

2.1、NameServer的主要功能

NameServer负责管理维护Block和DataServer相关信息,包括DataServer加入、退出、心跳等信息,Block和DataServer的对应关系建立、解除。

正常情况下,一个block会在DataServer上存在,主NameServer负责Block的创建、删除、复制、均衡、整理,NameServer不负责实际数据的读写,实际数据的读写有DataServer完成。

NameServer主机绑定对外VIP(也就是主机的IP)提供服务,当主宕机后,迅速将VIP绑定到备份NameServer,并将其切换为主机对外提供服务,HeartAgent完成此功能。

2.2、DataServer的主要功能

DataServer主要负责实际数据的存储和读写

在这里插入图片描述
在上图中:
1)HeartAgent:负责监听NameServer和Slave NameServer
2)sync data:同步数据NameServer中关于Block信息都存储在内存中,所以快。

APP访问NameServer主机,然后NameServer主机给APP分配DataServer和Block,然后APP在上面读写。

TFS块的大小,可配置,通常块大小为64M。
FTS的设计目标是海量小文件的存储,所以每个块中会存储许多不同的小文件。

DataServer进程会给Block中的每个文件分配一个ID(File ID, 该ID在每个Block中唯一),并将每个文件在Block中的信息存放在Block对应的index文件中。这个index文件一般都会全部load在内存,触发出现DataServer服务器内存不够。

2.3、TFS还支持跨集群同步

可以再创建一个和TFS对等的集群,由主集群负责写入这个集群,和同步数据,这个集群只对外提供读功能,当主集群挂了,这个集群会顶上。

2.4、平滑扩容

由于NameServer和DataServer直接通过心跳机制来通信的,如果集群要扩容,只需要将新的DataServer服务器部署好,然后启动即可。这些DataServer服务器会想NameServer发送心跳。

NameServer的写入策略是给容量小、负载低的DataServer分配写请求。

三、TFS的容错机制

3.1、集群容错

TFS可配置主从集群,会放在不同的机房,主集群提供所有功能,从集群只提供读。主集群挂了,从集群可顶上。

3.2、NameServer容错

NameServer采用了HA结构,一主一备。主NameServer操作会同步到备NameServer。如果主NameServer挂了,备NameServer顶上。

另外,NameServer和DataServer之间有心跳机制。DataServer会将他的Block信息定时发送到NameServer上,NameServer会根据这些信息重建Block和DataServer的关系。

3.3、DataServer容错

TFS采用备份多个BLock来实现DataServer容错,每个Block在集群中存了多份,并且他们分别部署在不同网段的不同DataServer上,一般存3份(可配置)

对于写入请求,必须等待所有的Block备份完成后,才算写入成功。当出现磁盘损坏或DataServer宕机时,TFS会启动复制流程,通过心跳机制获得这些DataServer上BLock的信息,把那备份数小于3的block尽快复制到其他DataServer上去。

3.4、对单个文件的容错

TFS对每个文件会记录校验crc,当客户端访问这个文件的时候发现crc和文件不匹配的时候,会自动切换到一个好的Block上去读取,伺候客户端会修复单个文件损坏的情况

四、TFS的并发机制

对于同一个文件,TFS支持并发的读,但不支持并发的写,其实单个Block也不支持并发的写。

五、TFS文件结构

TFS的文件名由块号和文件号通过某种对应关系组成,最大长度为18字节,文件名固定以T开始,第二字节为该机器的变换(1~9),余下的字节由Block ID和File ID通过一定的编码方式得到,文件名由客户端程序进行编码和解码。

对象存储要考虑的点:

  • 单个DataServer/NameServer挂了,怎样保证高可用?
  • 存储原理是什么?怎样保证数据不丢失?
  • DataServer/NameServer怎样扩容?
  • 集群宕机和单个服务宕机怎样处理?
  • 磁盘损坏,怎样保证高可用?
  • 阿里某个可用区挂了,会怎样?
  • 怎样保证的高吞吐?
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值