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命令文件才能够应用
...