美文网首页数客联盟我的微服务Python
海量文件存储及FastDFS容器化部署及访问

海量文件存储及FastDFS容器化部署及访问

作者: 许鑫_22d4 | 来源:发表于2019-06-26 12:05 被阅读122次

    一. 背景

         当我们需要存储海量文件的时候,可能想到的几种方式:

             1.   将文件存储于本地文件系统中,然后将其路径存储于关系型数据库。

              2.  部署HDFS,将文件存储于HDFS分布式文件系统中,然后记录其存储路径。

              3.  通过HBase MOB机制进行小文件的存储。

              4.  将文件存储于FastDFS这样的分布式文件系统中/

           如何选择存储方式会对文件的读写性能产生大的影响,因此需要根据使用场景匹配其适合的存储场景:

              1. 第一种是最传统的软件系统的存储方式,仅适合存储数量较少,临时使用,可周期性删除的文件的,由于文件存储在本地,因此文件的安全,存储的扩展都不能得到支持,如若没有定时删除机制迟早会将磁盘写满,对系统和应用的稳定性产生影响。

              2. 第二种方式是大数据的常用存储手段,由于hdfs中namenode的元数据数量限制及其有限节点性能的压力,不适合存储海量的小文件(如互联网应用中的用户头像)以及数据频繁的更新的场景。hdfs中适合存储大文件,并且适合一次写入多次读取的批量计算的情况。

              3.  第三种方式通过HBase 的MOB机制进行文件的存储,这种方式因为涉及到图片的压缩会带来region性能的下降,因此存储小于10K的文件比较适合,如果超过100K的文件会经常造成regionserver不可用的问题。

              4.  第四种方式FastDFS本文主要讨论,适合海量小文件的分布式存储,支持storage从节点的横向扩展,结合storage负载均衡机制,可大大提高海量小文件的访问性能。Fastdfs不适合存储GB以上的大文件,会造成传输超时等问题。

    二. Fastdfs原理

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

    fastdfs架构

    三. FastDFS容器化安装

        FastDFS本地化安装比较复杂,需要大量的配置及相关插件安装,不利于分布式环境的部署和迁移。因此将其所有的配置容器化打包为docker镜像进行部署,仅仅需要一两步即可完成,使用起来非常方便。本文采用的是已经封装好的镜像。

        1、服务规划

    服务规划

        2、节点先安装docker服务

                vm1,vm2,vm3 节点都执行。

                参考:https://www.cnblogs.com/yufeng218/p/8370670.html

        3、获取FastDFS容器镜像

                vm1,vm2,vm3 节点都执行。

                执行命令:docker pull delron/fastdfs

         4.  启动tracker服务:

                vm3节点执行。

                执行命令:docker run -dti --network=host --name tracker -eTRACKER_SERVER=192.168.1.53:22122-v /var/fdfs/tracker:/var/fdfs delron/fastdfs tracker

                注:可根据实际需要修改挂在本地卷路径,当前挂载在本地/var/fdfs/tracker下)

           5.  启动storage服务:

                vm1,vm2,vm3 节点都执行。

                执行命令:docker run -dti --network=host --name storage -eTRACKER_SERVER=192.168.1.53:22122-v /var/fdfs/storage:/var/fdfs delron/fastdfs storage

                 (注:可根据实际需要修改挂在本地卷路径,当前挂载在本地/var/fdfs/storage下)

            6. 启动成功后,可以在本地路径下找到其挂在目录(每个存储节点都一样):

    文件目录

    四. FastDFS命令行文件操作

         通过命令行的方式来操作文件,由于FastDFS的命令都被封装在容器环境中需要进入容器中进行操作:

        1. 查看已经运行容器

    docker ps

        2. 进入tracker或者storage容器 

            执行命令:docker exec -it 45a8fde90694 /bin/bash

        3. 上传文件到fastdfs集群:

            执行命令:/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /anaconda-post.log

            命令返回:group1/M00/00/00/wKgBNF0R_kuAOCx_AAAuyAYKcJ4393.log

            其中: /anaconda-post.log为需要上传的文件绝对路径

        4. 退出容器

            执行命令:exit

        5. 查看已上传的文件

            在本地系统中路径/var/fdfs/storage/data/00/00/下查看已经上传的文件wKgBNF0R_kuAOCx_AAAuyAYKcJ4393.log,fastdfs会将上传的文件重命名为一个随机的名称。

    查看文件实际存储

    五. 通过http方式直接访问文件

         若需要直接通过浏览器访问存储的文件(例如图片),需要用到FastDFS的http服务(默认8888端口)。其访问方式如下:

        http://192.168.1.51:8888/group1/M00/00/00/group1/M00/00/00/wKgBNV0SytyAYKipANXq6U4HsAU139.jpg

        http://192.168.1.52:8888/group1/M00/00/00/group1/M00/00/00/wKgBNV0SytyAYKipANXq6U4HsAU139.jpg

        http://192.168.1.53:8888/group1/M00/00/00/group1/M00/00/00/wKgBNV0SytyAYKipANXq6U4HsAU139.jpg

    独立地址访问

        FastDFS的HTTP服务较为简单,即需要直接访问某一个storage的地址,而无法提供统一的地址负载均衡等高性能的服务。因此需要我们手动配置nginx来实现这三台服务器统一的访问及负载均衡。

        此处nginx同样使用容器进行部署(docker pull nginx:1.15),nginx.conf文件主要配置如下:

    负载均衡配置

        即访问192.168.1.51:8808链接会被随机映射到实际的vm1,vm2,vm3三台服务器上获取数据,这样就解决了统一访问链接和负载均衡的问题,如下:

    统一地址访问

    六. 通过java操作FastDFS的文件操作

        1. 新建maven项目,在pom中添加依赖:

    maven包依赖

        2. 添加fastdfs操作配置文件fdfs_client.conf:

    配置文件 配置信息(与/etc/fdfs/client.conf一致)

          2. fastdfs操作类:

              文件上传:

    文件上传

           文件下载:

    文件下载

           文件删除:

    文件删除

           文件信息获取:

    文件信息获取

    七. FastDFS在企业中的应用

            海量的小文件的频繁读取,包括:

                 -文档、图片、音频、视频

    相关文章

      网友评论

        本文标题:海量文件存储及FastDFS容器化部署及访问

        本文链接:https://www.haomeiwen.com/subject/sxsqcctx.html