FastDFS 简介
FastDFS
服务端有两个角色:跟踪器(tracker
)和存储节点(storage
)。跟踪器主要做调度工作,在访问上起负载均衡的作用;存储节点存储文件,完成文件管理的所有功能。
FastDFS
同时对文件的 metadata
进行管理。所谓文件的 metadata
就是文件的相关属性,以键值对方式表示,如:width=1024,其中的 key
为 width,value
为 1024。文件 metadata
是文件属性列表,可以包含多个键值对。
跟踪器和存储节点都可以由一台或多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。
为了支持大容量,存储节点(服务器)采用了 分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。
在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。
当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。
FastDFS
中的文件标识分为两个部分:卷名 和 文件名,二者缺一不可。
文件交互过程
上传交互过程
- client 询问
tracker
上传到的storage
,不需要附加参数; tracker
返回一台可用的storage
;- client 直接和
storage
通讯完成文件上传。
下载交互过程
- client 询问
tracker
下载文件的storage
,参数为文件标识(卷名和文件名); tracker
返回一台可用的storage
;- client 直接和
storage
通讯完成文件下载。
FastDFS 为什么要结合 Nginx
我们在使用 FastDFS
部署一个分布式文件系统的时候,通过 FastDFS
的客户端 API 来进行文件的上传、下载、删除等操作。同时通过 FastDFS
的 HTTP 服务器来提供 HTTP 服务。但是 FastDFS
的 HTTP 服务较为简单,无法提供负载均衡等高性能的服务,我们使用 FastDFS
的 Nginx
模块来弥补这一缺陷。
FastDFS
通过 tracker
服务器,将文件放在 Storage
服务器存储,但是同组之间的服务器需要复制文件,有延迟的问题。假设 tracker
服务器将文件上传到了 192.168.1.100,文件 ID 已经返回客户端,这时后台会将这个文件复制到 192.168.1.100,如果复制没有完成,客户端就用这个 ID 在 192.168.1.100 取文件,肯定会出现错误。而 fastdfs-nginx-module
可以重定向连接到源服务器取文件,避免客户端由于复制延迟的问题出现错误。
部署 FastDFS 服务端
服务器地址:192.168.1.100
所需环境配置文件已上传至百度网盘。
提取链接:https://pan.baidu.com/s/1ptM7psDH9IJuH4P7Cd0L9A
提取码:qdxe
在 Linux 服务器上创建 /usr/local/docker/fastdfs
目录和 /usr/local/docker/fastdfs/environment
目录
目录说明:
/usr/local/docker/fastdfs
:用于存放docker-compose.yml
文件和FastDFS
的数据卷。/usr/local/docker/fastdfs/environment
:用于存放Dockerfile
文件和刚刚提取的环境文件。
注意:因为 Shell 创建后是无法直接使用的,所以将 entrypoint.sh
文件拷贝到服务器目录里以后,需要赋予执行的权限,执行以下命令:
1 | $ chmod +x entrypoint.sh |
各环境配置文件说明
tracker.conf
FastDFS
跟踪器配置,容器中路径为:/etc/fdfs
,修改以下配置:
1 | base_path=/fastdfs/tracker |
storage.conf
FastDFS
存储配置,容器中路径为:/etc/fdfs
,修改以下配置:
1 | base_path=/fastdfs/storage |
client.conf
FastDFS
客户端配置,容器中路径为:/etc/fdfs
,修改以下配置:
1 | base_path=/fastdfs/tracker |
config
fastdfs-nginx-module
配置文件,容器中路径为:/usr/local/src/fastdfs-nginx-module/src
,修改以下配置:
1 | # 修改前 |
mod_fastdfs.conf
fastdfs-nginx-module
配置文件,容器中路径为:/usr/local/src/fastdfs-nginx-module/src
,修改以下配置:
1 | connect_timeout=10 |
nginx.conf
Nginx
配置文件,容器中路径为:/usr/local/src/nginx-1.13.6/conf
,完整配置如下:
1 | user root; |
Dockerfile
在 /usr/local/docker/fastdfs/environment
目录下创建 Dockerfile 文件:
1 | FROM ubuntu:xenial |
docker-compose.yml
在 /usr/local/docker/fastdfs/environment
目录下创建 docker-compose.yml 文件:
1 | version: '3.1' |
启动容器
1 | $ docker-compose up -d |
服务端上传文件
1 | # 交互式进入容器 |
结合服务器反馈的信息,得出文件上传后地址为:http://192.168.1.100:8888/group1/M00/00/00/wKhLi1oHVMCAT2vrAAAeSwu9TgM3976771
If you like this blog or find it useful for you, you are welcome to comment on it. You are also welcome to share this blog, so that more people can participate in it. If the images used in the blog infringe your copyright, please contact the author to delete them. Thank you !