分布式文件系统 FastDFS
cookqq ›博客列表 ›docker+node.js+zookeeper构建微服务

分布式文件系统 FastDFS

2019-03-06 10:25:00.0|分类: docker+node.js+zookeeper构建微服务|浏览量: 2847

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

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

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

FastDFS系统结构如下图所示:


跟踪器和存储节点都可以由一台多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。


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

在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。

当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。
FastDFS中的文件标识分为两个部分:卷名和文件名,二者缺一不可。

 

                               FastDFS file upload

上传文件交互过程:
1. client询问tracker上传到的storage,不需要附加参数;
2. tracker返回一台可用的storage;
3. client直接和storage通讯完成文件上传。 

 

                         FastDFS file download

下载文件交互过程:

1. client询问tracker下载文件的storage,参数为文件标识(卷名和文件名);
2. tracker返回一台可用的storage;
3. client直接和storage通讯完成文件下载。

需要说明的是,client为使用FastDFS服务的调用方,client也应该是一台服务器,它对tracker和storage的调用均为服务器间的调用。

搜索镜像文件

blob.png

下载镜像文件

blob.png

创建tracker容器

docker run -ti -d --name trakcer -v ~/tracker_data:/fastdfs/tracker/data --net=host 
season/fastdfs tracker

Tracker服务器的端口默认是22122,你可以查看是否启用端口

blob.png
查看容器是否启动

blob.png

构建storage容器(存储服务器,提供容量和备份服务)

docker run -tid --name storage -v ~/storage_data:/fastdfs/storage/data 
-v ~/store_path:/fastdfs/store_path --net=host -e TRACKER_SERVER:192.168.99.100:22122 
-e GROUP_NAME=group1 season/fastdfs storage

查看storage容器是否开启

blob.png

进行storage服务的配置

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

docker exec -it storage bash

blob.png

查看storage.conf参数设置,发现tracker_server=192.168.209.121:22122,ip和上面自己设置的ip不一样,所以要进行修改

blob.png

退出storage容器,并将配置文件拷贝一份出来:

docker cp storage:/fdfs_conf/storage.conf ~/
vi ~/storage.conf

将修改后的配置文件拷贝到storagee的配置目录下:

docker cp ~/storage.conf storage:/fdfs_conf/

重启启动容器

blob.png

查看tracker容器和storage容器的关联

docker exec -it storage bash
cd fdfs_conf
fdfs_monitor storage.conf

blob.png



docker模拟客户端上传文件到storage容器

docker run -tid --name fdfs_sh --net=host season/fastdfs sh
docker cp ~/storage.conf  fdfs_sh:/fdfs_conf/
docker exec -it fdfs_sh bash
echo hello>a.txt
cd fdfs_conf
fdfs_upload_file storage.conf /a.txt

blob.png

到宿主主机查看存储的文件

blob.png



参考文档:

https://hub.docker.com/r/season/fastdfs/


https://blog.csdn.net/weixin_43683052/article/details/84792338


java上传客户端

https://github.com/luhuiguo/fastdfs-client

https://blog.csdn.net/zhangcongyi420/article/details/82958495




https://mvnrepository.com/artifact/com.github.tobato/fastdfs-client

http://maven-repository.com/artifact/com.github.tobato/fastdfs-client/1.25.1-RELEASE



一键分享文章

分类列表

  • • struts源码分析
  • • flink
  • • struts
  • • redis
  • • kafka
  • • ubuntu
  • • zookeeper
  • • hadoop
  • • activiti
  • • linux
  • • 成长
  • • NIO
  • • 关键词提取
  • • mysql
  • • android studio
  • • zabbix
  • • 云计算
  • • mahout
  • • jmeter
  • • hive
  • • ActiveMQ
  • • lucene
  • • MongoDB
  • • netty
  • • flume
  • • 我遇到的问题
  • • GRUB
  • • nginx
  • • 大家好的文章
  • • android
  • • tomcat
  • • Python
  • • luke
  • • android源码编译
  • • 安全
  • • MPAndroidChart
  • • swing
  • • POI
  • • powerdesigner
  • • jquery
  • • html
  • • java
  • • eclipse
  • • shell
  • • jvm
  • • highcharts
  • • 设计模式
  • • 列式数据库
  • • spring cloud
  • • docker+node.js+zookeeper构建微服务
版权所有 cookqq 感谢访问 支持开源 京ICP备15030920号
CopyRight 2015-2018 cookqq.com All Right Reserved.