016-docker-fastdfs

0、docker安装fastdfs

1、搜索镜像

docker search fastdfs

2、拉取合适镜像

选择合适tag:https://hub.docker.com/

docker pull delron/fastdfs

这个镜像包含了fastdfs以及nginx,降低自我安装学习时间

docker images

3、使用镜像

3.1、使用docker镜像构建tracker容器(跟踪服务器,起到调度的作用):

docker run -d -p 22122:22122 --name tracker -v /Users/lihongxu6/docker/myfastdfs/tracker:/var/fdfs delron/fastdfs tracker

使用docker镜像构建storage容器(存储服务器,提供容量和备份服务):

docker run -d -p 8888:8888 -p 23000:23000 --name storage -e TRACKER_SERVER=ip:22122 -v /Users/lihongxu6/docker/myfastdfs/storage:/var/fdfs -e GROUP_NAME=group1 delron/fastdfs storage

上面需要填写你的tracker服务的ip地址,端口默认是22122

3.2、进行服务的配置。

  进入storage容器,到storage的配置文件中配置http访问的端口,配置文件在/etc/fdfs目录下的storage.conf

docker exec -it storage /bin/bash
cd /etc/fdfs/
ls
vi storage.conf

  查看默认端口: http.server_port=8888 ,也可以不用哪个修改

配置nginx,在/usr/local/nginx目录下,修改nginx.conf文件

cd /usr/local/nginx/confvi nginx.conf

修改http配置

server {
        listen       8888;
        server_name  localhost;
        location ~/group[0-9]/ {
            ngx_fastdfs_module;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root html;
        }
    }

或者针对性修改

location /group1/M00 {
        alias  /var/fdfs;
    }

此时文件系统以搭建完毕,使用web模块进行文件的上传,将文件上传至FastDFS文件系统

4、测试

监控状态
fdfs_monitor /etc/fdfs/storage.conf
上传
fdfs_test /etc/fdfs/client.conf upload /etc/fdfs/tracker.conf.sample
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /etc/fdfs/tracker.conf.sample

url访问http://ip:8888/group1/M00/00/00/rBEAA14wRpCAcZfHAAAc3T8QekU.sample,即可

5、服务重启

pkill -9 fdfs
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf

一、概述

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

FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

1.1、简介

FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。

存储节点存储文件,完成文件管理的所有功能:就是这样的存储、同步和提供存取接口,FastDFS同时对文件的metadata进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key valuepair)方式表示,如:width=1024,其中的key为width,value为1024。文件metadata是文件属性列表,可以包含多个键值对。

tracker:跟踪服务器, 主要做调度工作, 起负载均衡的作用。 在内存中记录集群中所有存储组和存储服务器的状态信息, 是客户端和数据服务器交互的枢纽。 相比GFS中的master更为精简, 不记录文件索引信息, 占用的内存量很少。

  storage:存储服务器( 又称:存储节点或数据服务器) , 文件和文件属性( metadata) 都保存到存储服务器上。 Storage server直接利用OS的文件系统调用管理文件。
  group:组, 也可称为卷。 同组内服务器上的文件是完全相同的 ,同一组内的storage server之间是对等的, 文件上传、 删除等操作可以在任意一台storage server上进行 。

1.2、存储策略

为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。

在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。

1.2.1、上传交互过程

FastDFS向使用者提供基本文件访问接口,比如upload、download、append、delete等,以客户端库的方式提供给用户使用。

Storage Server会定期的向Tracker Server发送自己的存储信息。当Tracker Server Cluster中的Tracker Server不止一个时,各个Tracker之间的关系是对等的,所以客户端上传时可以选择任意一个Tracker。

当Tracker收到客户端上传文件的请求时,会为该文件分配一个可以存储文件的group,当选定了group后就要决定给客户端分配group中的哪一个storage server。当分配好storage server后,客户端向storage发送写文件请求,storage将会为文件分配一个数据存储目录。然后为文件分配一个fileid,最后根据以上的信息生成文件名存储文件。

016-docker-fastdfs 

1.2.2、下载交互过程

客户端uploadfile成功后,会拿到一个storage生成的文件名,接下来客户端根据这个文件名即可访问到该文件。

016-docker-fastdfs 

跟upload file一样,在downloadfile时客户端可以选择任意tracker server。tracker发送download请求给某个tracker,必须带上文件名信息,tracke从文件名中解析出文件的group、大小、创建时间等信息,然后为该请求选择一个storage用来服务读请求。

1.3、文件同步

写文件时,客户端将文件写至group内一个storage server即认为写文件成功,storage server写完文件后,会由后台线程将文件同步至同group内其他的storage server。

每个storage写文件后,同时会写一份binlog,binlog里不包含文件数据,只包含文件名等元信息,这份binlog用于后台同步,storage会记录向group内其他storage同步的进度,以便重启后能接上次的进度继续同步;进度以时间戳的方式进行记录,所以最好能保证集群内所有server的时钟保持同步。

storage的同步进度会作为元数据的一部分汇报到tracker上,tracke在选择读storage的时候会以同步进度作为参考。

1.4、结合nginx

在使用 FastDFS 部署一个分布式文件系统的时候,通过 FastDFS 的客户端 API 来进行文件的上传、下载、删除等操作。同时通过 FastDFS 的 HTTP 服务器来提供 HTTP 服务。但是 FastDFS 的 HTTP 服务较为简单,无法提供负载均衡等高性能的服务,我们使用 FastDFS 的 Nginx 模块来弥补这一缺陷。

FastDFS 通过 Tracker 服务器,将文件放在 Storage 服务器存储,但是同组之间的服务器需要复制文件,有延迟的问题.假设 Tracker 服务器将文件上传到了 192.168.1.80,文件ID已经返回客户端,这时,后台会将这个文件复制到 192.168.1.30,如果复制没有完成,客户端就用这个 ID 在 192.168.1.30 取文件,肯定会出现错误。这个 fastdfs-nginx-module 可以重定向连接到源服务器取文件,避免客户端由于复制延迟的问题,出现错误。

主要解决的问题及场景

    1 解决海量存储,同时存储容量扩展方便。
    2 解决文件内容重复,如果用户上传的文件重复(文件指纹一样),那么系统只有存储一份数据,值得一提的是,这项技术目前被广泛应用在网盘中。
    3 结合Nginx提高网站读取图片的效率。

特别适合以中小文件( 建议范围: 4KB 到 500MB ) 为载体的在线服务, 如相册网站、 视频网站等等。

 016-docker-fastdfs 

1.5、其他资源

1.6、对比

指标适合类型文件分布系统性能复杂度FUSEPOSIX备份机制通讯协议接口社区支持开发语言
FastDFS4KB~500MB小文件合并存储不分片处理很高简单不支持不支持组内冗余备份Api HTTP国内用户群C语言
TFS所有文件小文件合并,以block组织分片 复杂不支持 Block存储多份,主辅灾备API httpC++
MFS大于64K分片存储Master占内存多 支持支持多点备份动态冗余使用fuse挂在较多Perl
HDFS大文件大文件分片分块存储 简单支持支持多副本原生api较多Java
Ceph对象文件块OSD一主多从 复杂支持支持多副本原生api较少C++
MogileFS海量小图片 复杂可以支持不支持动态冗余原生api文档少Perl
ClusterFS大文件  简单支持支持  C

1.7、部署结构

  016-docker-fastdfs 

二、springboot结合

相关推荐