1. FastDFS简介
1.1 FastDFS体系结构
FastDFS是一个开源的轻量级分布式文件系统
,他对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储
和负载均衡
的问题。特别适合以文件为载体
的在线服务,如相册网站、视频网站等。
FastDFS为互联网量身定制,充分考虑了冗余备份
、负载均衡
、线性扩容
等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能文件服务器集群提供文件的上传、下载等服务。
FastDFS架构包括Tracker Server和Storage Server。客户端请求Tracker Server进行文件上传、下载,通过Tracker Server 调度最终由Storage Server完成文件上传和下载。
Tracker Server作用是负载均衡
和调度
,通过Tracker Server在文件上传时可以根据一定的策略找到storage server提供文件上传服务。可以将tracker server称为追踪服务器
或调度服务器
。storage server作用是文件存储
,客户端上传的文件最终存储在storage服务器上,storage server没有实现自己的文件系统,而是利用操作系统的文件系统来管理文件。可以将storage称为存储服务器。
1.2 上传流程
客户上传文件后,存储服务器将文件ID返回给客户端,此文件ID用户以后访问该文件的索引信息。文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名
组名:文件上传后所在的storage组名,在文件上传成功后由storage服务器返回,需要客户端自行保存。
虚拟磁盘路径:storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。
数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。
文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储
服务器 IP 地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。
2. FastDFS搭建
2.1 安装FastDFS镜像
我们使用Docker搭建FastDFS的开发环境
-
拉取镜像
[root@iZe9dbx33shi0fZ ~]# docker pull morunchang/fastdfs
-
查看镜像
[root@iZe9dbx33shi0fZ ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE morunchang/fastdfs latest a729ac95698a 5 years ago 460MB
-
运行tracker
[root@iZe9dbx33shi0fZ ~]# docker run -d --name tracker --net=host morunchang/fastdfs sh tracker.sh
-
运行storage
参数解读: -d 后台运行 --name 给容器起名字 --net 使用的网络模式 -e 设置变量 [root@iZe9dbx33shi0fZ ~]# docker run -d --name storage --net=host -e TRACKER_IP=121.43.116.109:22122 -e GROUP_NAME=group1 morunchang/fastdfs sh storage.sh
- 使用的网络模式是-net=host
- 121.43.116.109宿主机的ip(自己服务器的公网ip)
- group1是组名,即storage的组
- 如果想要增加新的storage服务器,再次运行该命令,注意更换 新组名
2.2 配置Nginx
Nginx在这里主要提供对FastDFS图片访问的支持,Docker容器(刚才搭建的FastDFS容器)中已经集成了Nginx,我们需要修改nginx的配置,进入storage的容器内部,修改nginx.conf配置文件
-
进入容器
参数解读: -it 以交互模式运行容器 [root@iZe9dbx33shi0fZ ~]# docker exec -it storage /bin/bash
-
编辑配置文件
root@iZe9dbx33shi0fZ:/# vi /etc/nginx/conf/nginx.conf
-
加入以下配置文件内容
location ~ /M00 { root /data/fast_data/data; ngx_fastdfs_module; }
默认文件中已经添加了
-
禁止缓存
add_header Cache-Control no-store;
修改完以后的文件如下图所示
-
退出容器
root@iZe9dbx33shi0fZ:/# exit
-
重启storage容器
[root@iZe9dbx33shi0fZ ~]# docker restart storage
-
查看启动的容器
[root@iZe9dbx33shi0fZ ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c5ae007af5b2 morunchang/fastdfs "sh storage.sh" 15 minutes ago Up 39 seconds storage e2aa3965b4e2 morunchang/fastdfs "sh tracker.sh" 17 minutes ago Up 17 minutes tracker
-
开机自启设置
[root@iZe9dbx33shi0fZ ~]# docker update --restart=always tracker tracker [root@iZe9dbx33shi0fZ ~]# docker update --restart=always storage storage
自此FastDFS搭建安装完成,但是用java客户端连接的时候会出现连接超时的情况,下面是解决方案
3. 解决java客户端连接出现连接超时的问题
修改fdfs的配置文件
-
进入交互模式
[root@iZe9dbx33shi0fZ ~]# docker exec -it storage /bin/bash
-
进入配置文件所在的目录
root@iZe9dbx33shi0fZ:/# cd /etc/fdfs
-
查看文件
主要修改以上三个文件
将这三个文件中出现
tracker_server:xxx.xx.xx.xx:22122
的地方换成tracker_server:自己服务器的ip地址:22122
好像就只有client.conf文件中出现了。
修改完以后,不要忘记重启两个容器
[root@iZe9dbx33shi0fZ ~]# docker restart tracker
tracker
[root@iZe9dbx33shi0fZ ~]# docker restart storage
storage
三个重要端口
- storage server的端口号 默认23000 【在storage.conf中】
- tracker server的端口号 默认22122 【在tracker.conf中】
- nginx的端口号 默认8080 【在tracker.conf中】
三个重要端口
- storage server的端口号 默认23000 【在storage.conf中】
- tracker server的端口号 默认22122 【在tracker.conf中】
- nginx的访问端口 默认8080【在nginx.conf中】