在上一篇文章的fastdfs结构图中,我们可以看出FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器(tracker)主要做
调度工作,就像公交车站里面的调务员一样,它负责通过负载均衡选出最优的存储节点(storage)。存储节点(storage)顾名思义就是负责存储、
数据同步、数据的操作的一个服务。今天我们将会重点对Storage server进行介绍。
概述
Storage server(简称storage)以组group为单位,如上图一个group内包含多台storage机器,数据互为备份,存储空间以group内容量最小的
storage为准,建议group内的多个storage尽量配置相同,以免造成存储空间的浪费。以group为单位组织存储能方便的进行应用隔离、负载均衡
、副本数定制(group内storage server数量即为该group的副本数),比如将不同应用数据存到不同的group就能隔离应用数据,比如group1为内
网访问数据,group2为外网访问数据。同时还可根据应用的访问情况来将应用分配到不同的group来做负载均衡;缺点是group的容量受单机存储
容量的限制比如gourp1中有3个storage,storage1为100G、storage2为120G、storage为110G,那么对于group1来说存储空间大小就是100G。
当group中有机器坏掉时,数据的恢复只能依赖group中的其他机器,所以恢复时间会特别的长。
storage存储
在group中每个storage的存储依赖于本地文件系统,所以storage可以动态增加存储空间大小,比如fastdfs系统使用一段时间之后group1的空间使
用完了,那我们可以动态为group1下面的所有storage主机挂载更多的磁盘。而且可以指定那些盘为storage的存储目录比如有5块磁盘,分别挂载
在/data/disk1-/data/disk5,那么可将这5个存储目录都配置为storage的数据存储目录。
当storage接受到客户端或其它storage同步的写文件请求时,将会根据配置好的规则,选择其中一个存储目录来存储文件。
为了防止单个目录下的文件数太多,在storage第一次启动时,会在每个数据存储目录里创建2级子目录,每级256个,总共65536个文件,新写的文
件会以hash的方式被路由到其中某个子目录下,然后将文件数据直接作为一个本地文件存储到该目录中。
storage的同步策略:
文件同步是由独立的线程负责的,每个Storage都有到同组中其他Storage的同步线程,如一组三个Storage,那么每个Storage都有两个线程负责到其他
两个Storage的同步。同步线程由Tracker通讯线程启动,因为只有Tracker才知道一组中有哪些Storage。
同步线程的执行过程主要由源同步与Binlog同步两部分组成,具体的同步过程我将会在另一篇文章中进行详细的介绍。
注:本文部分资料参考chinaunix和其它网站