[XXX商城项目-笔记] 文件存储方案FastDFS

文件存储方案FastDFS

1. FastDFS介绍

  • c语言编写的一款开源的轻量级分布式文件系统。

  • 功能包括:文件存储、文件访问(文件上传、文件下载)、文件同步等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

  • 为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标。

  • 可以帮助我们搭建一套高性能的文件服务器集群,并提供文件上传、下载等服务。
    在这里插入图片描述

  • Client 客户端集群,发起请求

  • Tracker 调度集群,调度存储服务器,查询哪个storage有空余空间

  • Storage 存储集群,存储文件

  • FastDFS架构
    包括 Client,Tracker serverStorage server

  • Client请求Tracker进行文件上传、下载,Tracker再调度Storage完成文件上传和下载。

  • Client: 客户端,业务请求的发起方,通过专有接口,使用TCP/IP协议与TrackerStorage进行数据交互。FastDFS提供了uploaddownloaddelete等接口供客户端使用。

  • Tracker server:跟踪服务器,主要做调度工作,起负载均衡的作用。在内存中记录集群中所有存储组和存储服务器的状态信息,是客户端和数据服务器交互的枢纽。

  • Storage server

    :存储服务器(存储节点或数据服务器),文件和文件属性都保存到存储服务器上。Storage server直接利用OS的文件系统调用管理文件。

    • Storage群中的横向可以扩容,纵向可以备份

2. FastDFS上传和下载流程

在这里插入图片描述
在这里插入图片描述

3. FastDFS文件索引

在这里插入图片描述

  • FastDFS上传和下载流程

    可以看出都涉及到一个数据叫

    文件索引(file_id)

    • **文件索引(file_id)**是客户端上传文件后Storage返回给客户端的一个字符串,是以后访问该文件的索引信息。
  • 文件索引(file_id)信息包括:组名、虚拟磁盘路径、数据两级目录、文件名等信息。

    • 组名:文件上传后所在的 Storage 组名称。
    • 虚拟磁盘路径:Storage 配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。
    • 数据两级目录:Storage 服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。
    • 文件名:由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。
      在这里插入图片描述

Docker和FastDFS上传和下载文件

1. Docker安装运行FastDFS

1.获取FastDFS镜像

# 从仓库拉取镜像
$ sudo docker image pull delron/fastdfs

2.开启tracker容器

  • 我们将 tracker 运行目录映射到宿主机的 /var/fdfs/tracker目录中。
$ sudo docker run -dit --name tracker --network=host -v /home/docker/fastdfs/tracker:/var/fdfs delron/fastdfs tracker

在这里插入图片描述

3.开启storage容器

  • TRACKER_SERVER=Tracker的ip地址:22122(Tracker的ip地址不要使用127.0.0.1)
  • 我们将 storage 运行目录映射到宿主机的 /var/fdfs/storage目录中。
$ sudo docker run -dti --name storage --network=host -e TRACKER_SERVER=192.168.140.128:22122 -v /home/docker/fastdfs/storage:/var/fdfs delron/fastdfs storage

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YBNpB03J-1608529366793)(D:/main/images/29安装storage.png)]

4.查看宿主机映射路径

在这里插入图片描述
在这里插入图片描述

注意:如果无法重启storage容器,可以删除/var/fdfs/storage/data目录下的fdfs_storaged.pid 文件,然后重新运行storage。

firewall-cmd --zone=public --add-port=22122/tcp --permanent
firewall-cmd --zone=public --add-port=8888/tcp --permanent
firewall-cmd --zone=public --add-port=23000/tcp --permanent

直接关闭虚拟机防火墙,瞬间就能正常访问了,233333333

1.2 windows下docker启动fastdfs

这个暂时没成功…
整完之后storage容器可以访问tracker容器,但是本机确无妨访问tracker服务
…赶进度中,暂时先搁置

--network=host模式启动,storage容器总是无法访问tracker容器
日志输出如下:
connect to tracker server 192.168.1.100:22122 fail, errno: 111, error info: Connection refused

于是采取定义容器间子网的方式为tracker容器指定ip地址

第一步:创建自定义网络
docker network rm docker-br0
docker network create --subnet=172.172.0.0/24 docker-br0

第二步:在你自定义的网段选取任意IP地址作为你要启动容器IP
docker stop tracker
docker rm tracker
docker run -dit --name tracker --net docker-br0 --ip 172.172.0.10 -v E:\programming\docker\fastdfs\tracker:/var/fdfs delron/fastdfs tracker
备注:创建容器时,在第一步创建的网段中选取了172.172.0.10作为静态IP地址。并且以docker-br0网桥启动 -v是将本地路径挂载到容器内指定路径下

docker stop storage
docker rm storage
docker run -dti --name storage --net docker-br0 --ip 172.172.0.11 -e TRACKER_SERVER=172.172.0.10:22122 -v E:\programming\docker\fastdfs\storage:/var/fdfs delron/fastdfs storage

查看storage文件夹下的日志有如下输出
在这里插入图片描述
在这里插入图片描述
参考资料:
Docker 配置容器固定IP
https://blog.csdn.net/liufuwu1/article/details/88096213?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.control

原文地址:http://blog.csdn.net/qq_34021712/article/details/75948566 ©王赛超

docker stop tracker
docker rm tracker
docker run -dit --name tracker --network=host -v E:\programming\docker\fastdfs\tracker:/var/fdfs delron/fastdfs tracker

docker stop storage
docker rm storage
docker run -dti --name storage --network=host -e TRACKER_SERVER=192.168.1.100:22122 -v E:\programming\docker\fastdfs\storage:/var/fdfs delron/fastdfs storage

2. FastDFS客户端上传文件

1.安装FastDFS客户端扩展

  • 安装准备好的fdfs_client-py-master.zip到虚拟环境中
$ pip install fdfs_client-py-master.zip
$ pip install mutagen
$ pip isntall requests

2.准备FastDFS客户端扩展的配置文件

  • meiduo_mall.utils.fastdfs.client.conf

在这里插入图片描述

base_path=FastDFS客户端存放日志文件的目录
tracker_server=运行Tracker服务的机器ip:22122

3.FastDFS客户端实现文件存储

# 使用 shell 进入 Python交互环境
$ python manage.py shell
# 1. 导入FastDFS客户端扩展
from fdfs_client.client import Fdfs_client
# 2. 创建FastDFS客户端实例
client = Fdfs_client('meiduo_mall/utils/fastdfs/client.conf')
# 3. 调用FastDFS客户端上传文件方法
ret = client.upload_by_filename('/Users/zhangjie/Desktop/kk.jpeg')
ret = {
'Group name': 'group1',
'Remote file_id': 'group1/M00/00/00/wKhnnlxw_gmAcoWmAAEXU5wmjPs35.jpeg',
'Status': 'Upload successed.',
'Local file name': '/Users/zhangjie/Desktop/kk.jpeg',
'Uploaded size': '69.00KB',
'Storage IP': '192.168.103.158'
 }
ret = {
'Group name': 'Storage组名',
'Remote file_id': '文件索引,可用于下载',
'Status': '文件上传结果反馈',
'Local file name': '上传文件全路径',
'Uploaded size': '文件大小',
'Storage IP': 'Storage地址'
 }

在这里插入图片描述

3. 浏览器下载并渲染图片

思考:如何才能找到在Storage中存储的图片?

  • 协议

    • http
  • IP地址

    192.168.103.158
    
    • Nginx服务器的IP地址。
    • 因为 FastDFS 擅长存储静态文件,但是不擅长提供静态文件的下载服务,所以我们一般会将 Nginx 服务器绑定到 Storage ,提升下载性能。
  • 端口

    8888
    
    • Nginx服务器的端口。
  • 路径

    group1/M00/00/00/wKhnnlxw_gmAcoWmAAEXU5wmjPs35.jpeg
    
    • 文件在Storage上的文件索引。
  • 完整图片下载地址

    • http://192.168.103.158:8888/group1/M00/00/00/wKhnnlxw_gmAcoWmAAEXU5wmjPs35.jpeg

编写测试代码:meiduo_mall.utils.fdfs_t.html

<img src="http://192.168.103.158:8888/group1/M00/00/00/wKhnnlxw_gmAcoWmAAEXU5wmjPs35.jpeg" width="320" height="480">
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值