关于分布式文件系统:主流分布式文件系统对比

本文较长,倡议细细品读,必有不同的播种。 一、概述分布式文件系统是分布式畛域的一个根底利用,其中最驰名的毫无疑问是 HDFS/GFS。现在该畛域曾经趋向于成熟,但理解它的设计要点和思维,对咱们未来面临相似场景/问题时,具备借鉴意义。 并且,分布式文件系统并非只有 HDFS/GFS 这一种状态,在它之外,还有其余形态各异、各有千秋的产品状态,对它们的理解,也对扩大咱们的视线有所俾益。 本文试图剖析和思考,在分布式文件系统畛域,咱们要解决哪些问题、有些什么样的计划、以及各自的抉择根据。 二、过来的样子在几十年以前,分布式文件系统就曾经呈现了,以 Sun 在 1984 年开发的“Network File System (NFS)”为代表,那时候解决的次要问题,是网络状态的磁盘,把磁盘从主机中独立进去。 这样不仅能够取得更大的容量,而且还能够随时切换主机,还能够实现数据共享、备份、容灾等,因为数据是电脑中最重要的资产。NFS 的数据通信图如下: 部署在主机上的客户端,通过 TCP/IP 协定把文件命令转发到近程文件 Server 上执行,整个过程对主机用户通明。 到了互联网时代,流量和数据快速增长,分布式文件系统所要解决的次要场景变了,开始须要十分大的磁盘空间,这在磁盘体系上垂直扩容是无奈达到的,必须要分布式,同时分布式架构下,主机都是可靠性不是十分好的一般服务器,因而容错、高可用、长久化、伸缩性等指标,就成为必须要考量的个性。 三、对分布式文件系统的要求对一个分布式文件系统而言,有一些个性是必须要满足的,否则就无奈有竞争力。次要如下: 应该合乎 POSIX 的文件接口标准,使该零碎易于应用,同时对于用户的遗留零碎也无需革新;对用户通明,可能像应用本地文件系统那样间接应用;长久化,保证数据不会失落;具备伸缩性,当数据压力逐步增长时能顺利扩容;具备牢靠的平安机制,保障数据安全;数据一致性,只有文件内容不发生变化,什么时候去读,失去的内容应该都是一样的。除此之外,还有些个性是分布式加分项,具体如下: 反对的空间越大越好;反对的并发拜访申请越多越好;性能越快越好;硬件资源的利用率越高越正当,就越好。四、架构模型从业务模型和逻辑架构上,分布式文件系统须要这几类组件: 存储组件:负责存储文件数据,它要保障文件的长久化、正本间数据统一、数据块的调配 / 合并等等;治理组件:负责 meta 信息,即文件数据的元信息,包含文件寄存在哪台服务器上、文件大小、权限等,除此之外,还要负责对存储组件的治理,包含存储组件所在的服务器是否失常存活、是否须要数据迁徙等;接口组件:提供接口服务给利用应用,状态包含 SDK(Java/C/C++ 等)、CLI 命令行终端、以及反对 FUSE 挂载机制。而在部署架构上,有着“中心化”和“无中心化”两种路线一致,即是否把“治理组件”作为分布式文件系统的核心治理节点。两种路线都有很优良的产品,上面别离介绍它们的区别。 1、有核心节点以 GFS 为代表,核心节点负责文件定位、保护文件 meta 信息、故障检测、数据迁徙等管理控制的职能,下图是 GFS 的架构图: 该图中GFS master 即为 GFS 的核心节点,GF chunkserver 为 GFS 的存储节点。其操作门路如下: Client 向核心节点申请“查问某个文件的某局部数据”;核心节点返回文件所在的地位 (哪台 chunkserver 上的哪个文件) 以及字节区间信息;Client 依据核心节点返回的信息,向对应的 chunk server 间接发送数据读取的申请;chunk server 返回数据。在这种计划里,个别核心节点并不参加真正的数据读写,而是将文件 meta 信息返回给 Client 之后,即由 Client 与数据节点间接通信。其次要目标是升高核心节点的负载,避免其成为瓶颈。这种有核心节点的计划,在各种存储类零碎中失去了广泛应用,因为核心节点易管制、功能强大。 ...

June 6, 2021 · 2 min · jiezi

关于分布式文件系统:分布式文件系统怎么做终于有个人把分布式文件上传讲清楚了

FastDFS概念FastDFS是开源的轻量级分布式文件系统,实现文件治理, 次要性能: 文件存储文件同步文件拜访(文件上传,文件下载)解决了大容量存储和负载平衡的问题,特地适宜以文件为载体的在线服务:相册网站,视频网站FastDFS为互联网量身定制,充分考虑了冗余备份,负载平衡,线性扩容等机制,并重视高可用,高性能等指标,应用FastDFS能够很不便地搭建一套高性能的文件服务器集群提供文件上传,下载等服务 FastDFS文件系统架构FastDFS服务端有两个角色: 跟踪器(tracker): 次要做调度工作,在拜访上起负载平衡作用 跟踪器和存储节点都能够由一台服务器或多台服务器形成,跟踪器和存储节点中的服务器能够随时减少或下线而不会影响下线服务.跟踪器中所有服务都是对等的,能够依据服务器的压力状况随时减少或缩小存储节点(storage): 存储文件,实现文件治理的所有性能 就是这样的存储同步存储接口提供存储接口FastDFS同时对文件metadata进行治理,文件metadata是文件属性列表,能够蕴含多个键值对 文件metadata: 文件的相干属性,以键值对形式示意为了反对大容量,存储节点采纳分卷的组织形式 存储系统由一个卷或多个卷组成,卷与卷之间的文件是互相独立的,所有卷的文件容量累加就是整个存储系统的文件容量一个卷能够由一台或多台存储服务器组成,一个卷下的存储服务器中文件都是雷同的,卷中的多台服务器起到了冗余备份和负载平衡作用在卷中减少服务器时,同步已有的文件由零碎主动实现,同步实现后,零碎主动将新增服务器切换到线上提供服务当存储空间有余或行将耗尽时,能够动静增加卷,只须要减少一台或多台服务器,配置一个新的卷,这样扩充存储系统的容量FastDFS 文件标识分为两局部: 卷名文件名 高可用要有解体复原的能力服务集群要有同步的性能否则就要有负载平衡上传交互过程client询问tracker上传到的storage,不须要附加参数tracker返回一台可用的storageclient间接和storage通信实现文件上传 client为应用FastDFS的调用方,client也是一台服务器,对tracker和对storage的调用均为服务器间的调用下载交互过程client询问tracker下载文件的storage,参数为文件标识(卷名和文件名)tracker返回一台可用的storageclient间接和storage通信实现文件下载 client为应用FastDFS的调用方,client也是一台服务器,对tracker和对storage的调用均为服务器间的调用FastDFS联合Nginx应用FastDFS部署分布式文件系统时,通过FastDFS的客户端API进行文件的上传,下载,删除等操作,同时通过FastDFS和HTTP服务器来提供HTTP服务.然而FastDFS的HTTP服务较为简单,无奈提供负载平衡等高性能的服务.须要应用FastDFS的Nginx模块补救这一缺点FastDFS通过tracker服务器,将文件放在storage服务器存储,然而同组之间的服务器须要复制文件,有提早的问题,能够通过fastdfs-nginx-module能够重定向连贯到源服务器取文件,防止客户端因为复制提早的问题,呈现谬误 基于Docker装置FastDFS环境筹备: libfastcommon: FastDFS拆散出的一些专用函数包FastDFS: FastDFS本体fastdfs-nginx-module: FastDFS和nginx的关联模块nginx: nginx1.15.4创立工作目录: 在Linux中创立 /usr/local/docker/fastdfs/environment/usr/local/docker/fastdfs:用于寄存docker-compose.yml配置文件及FastDFS数据卷/usr/local/docker/fastdfs/environment:用于寄存Dockerfile镜像配置文件及FastDFS所需环境在 /usr/local/docker/fastdfs/environment目录中创立Dockerfile # 更新数据源WORKDIR /etc/aptRUN echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse' > sources.listRUN echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse' >> sources.listRUN echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse' > sources.listRUN echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse' > sources.listRUN apt-get update# 装置依赖RUN apt-get install make gcc libpcre3-dev zliblg-dev --assume-yes# 复制工具包ADD fastdfs-5.11.tar.gz /usr/local/srcADD fastdfs-nginx-module_v1.16.tar.gz /usr/local/srcADD libfastcommon.tar.gz /usr/local/srcADD nginx-1.15.4.tar.gz /usr/local/src# 装置libfastcommonWORKDIR /usr/local/src/libfastcommonRUN ./make.sh && ./make.sh install# 装置 FastDFSWORKDIR /usr/local/src/fastdfs-5.11RUN ./make.sh && ./make.sh install# 配置FastDFS trackerADD tracker.conf /etc/fdfsRUN mkdir -p /fastdfs/tracker# 配置FastDFS storageADD storage.conf /etc/fdfsRUN mkdir -p /fastdfs/storage# 配置FastDFS客户端ADD client.conf /etc/fdfs# 配置fastdfs-nginx-moduleADD config /usr/local/src/fastdfs-nginx-modules/src# FastDFS与Nginx集成WORKDIR /usr/local/src/nginx-1.13.6RUN ./configure --add-module=/usr/local/src/fastdfs-nginx-module/srcRUN make && make installADD mod_fastdfs.conf /etc/fdfsWORKDIR /usr/local/src/fastdfs-5.11/confRUN cp http.conf mime.types /etc/fdfs/# 配置NginxADD nginx.conf /usr/local/nginx/confCOPY entrypoint.sh /usr/local/bin/ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]WORKDIR /EXPOSE 8888CMD ["/bin/bash"]在/usr/local/docker/fastdfs/environment创立entrypoint.sh,创立实现的后要执行 chmod +x entrypoint.sh命令文件才能够应用 ...

May 21, 2021 · 3 min · jiezi

关于docker:在Docker中运行MinIO-springboot实战电商项目mall4j

在Docker中运行MinIO。 springboot实战电商我的项目mall4j (https://gitee.com/gz-yami/mall4j) MinIO 须要一个长久卷来存储配置和利用数据。不过, 如果只是为了测试一下, 您能够通过简略地传递一个目录(在上面的示例中为/ data)启动MinIO。这个目录会在容器启动时在容器的文件系统中创立,不过所有的数据都会在容器退出时失落。 docker run -p 9000:9000 \ -e "MINIO_ROOT_USER=AKIAIOSFODNN7EXAMPLE" \ -e "MINIO_ROOT_PASSWORD=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" \ minio/minio server /data要创立具备永恒存储的MinIO容器,您须要将本地长久目录从主机操作系统映射到虚构配置~/.minio 并导出/data目录。 为此,请运行以下命令 GNU/Linux 和 macOSdocker run -p 9000:9000 \ --name minio1 \ -v /mnt/data:/data \ -e "MINIO_ROOT_USER=AKIAIOSFODNN7EXAMPLE" \ -e "MINIO_ROOT_PASSWORD=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" \ minio/minio server /dataWindowsdocker run -p 9000:9000 \ --name minio1 \ -v D:\data:/data \ -e "MINIO_ROOT_USER=AKIAIOSFODNN7EXAMPLE" \ -e "MINIO_ROOT_PASSWORD=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" \ minio/minio server /dataDocker Compose容许定义和运行单主机,多容器Docker应用程序。 应用Compose,您能够应用Compose文件来配置MinIO服务。 而后,应用单个命令,您能够通过你的配置创立并启动所有分布式MinIO实例。 分布式MinIO实例将部署在同一主机上的多个容器中。 这是建设基于分布式MinIO的开发,测试和预公布环境的好办法。 ...

April 7, 2021 · 2 min · jiezi