什么是FastDFS
1. FastDFS介绍
-
用c语言编写的一款开源的轻量级分布式文件系统。
-
功能包括:文件存储、文件访问(文件上传、文件下载)、文件同步等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
-
为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标。
-
可以帮助我们搭建一套高性能的文件服务器集群,并提供文件上传、下载等服务。
-
FastDFS架构 包括Client、Tracker server和Storage server。
Client请求Tracker进行文件上传、下载,Tracker再调度Storage完成文件上传和下载。 -
Client: 客户端,业务请求的发起方,通过专有接口,使用TCP/IP协议与Tracker或Storage进行数据交互。FastDFS提供了upload、download、delete等接口供客户端使用。
-
Tracker server:跟踪服务器,主要做调度工作,起负载均衡的作用。在内存中记录集群中所有存储组和存储服务器的状态信息,是客户端和数据服务器交互的枢纽。
-
Storage server:存储服务器(存储节点或数据服务器),文件和文件属性都保存到存储服务器上。Storage server直接利用OS的文件系统调用管理文件。
-
Storage群中的横向可以扩容,纵向可以备份。
图解FastDFS上传下载文件流程
上传文件
下载文件
通过docker运行FastDFS并访问上传的文件
- Linux安装docker
# cd进入源码目录
cd docker
#
sudo apt-key add gpg
# 安装3个压缩包
sudo dpkg -i containerd.io_1.3.9-1_amd64.deb
sudo dpkg -i docker-ce-cli_19.03.15_3-0_ubuntu-bionic_amd64.deb
sudo dpkg -i docker-ce_19.03.15_3-0_ubuntu-bionic_amd64
# 查看docker版本
docker -v
- docker拉取FastDFS镜像
# cd 进入到fastdfs_docker压缩包目录下
# 加载fastdfs镜像
sudo docker load -i fastdfs_docker.tar
运行tracker服务器:
映射在宿主机的文件夹要手动创建 /var/fdfs/tracker
tracker服务器的IP地址要写自己的ip端口默认22122
-dit 后台交互运行
--name 别名
--network 指定网络模式为host
-v 文件夹映射
-e 指定Tracker服务器ip地址
sudo docker run -dit --name tracker --network=host -v /var/fdfs/tracker:/var/fdfs delron/fastdfs tracker
运行storage服务器:
sudo docker run -dti --name storage --network=host -e TRACKER_SERVER=自己的ip:22122 -v /var/fdfs/storage:/var/fdfs delron/fastdfs storage
这样通过tracker服务器的ip端口8888就可以访问到上传的文件
文件在宿主机上存储的方式
存储的方式类似一个二维矩阵,文件夹套文件夹
上传文件
配置文件client.conf
# connect timeout in seconds
# default value is 30s
connect_timeout=30
# network timeout in seconds
# default value is 30s
network_timeout=120
# the base path to store log files
base_path=F:/my_project/django_project/meiduo_project/fdfs/storage/logs
# tracker_server can ocur more than once, and tracker_server format is
# "host:port", host can be hostname or ip address
# tracker服务器ip地址
tracker_server=自己的ip:22122
#standard log level as syslog, case insensitive, value list:
### emerg for emergency
### alert
### crit for critical
### error
### warn for warning
### notice
### info
### debug
log_level=info
# if use connection pool
# default value is false
# since V4.05
use_connection_pool = false
# connections whose the idle time exceeds this time will be closed
# unit: second
# default value is 3600
# since V4.05
connection_pool_max_idle_time = 3600
# if load FastDFS parameters from tracker server
# since V4.05
# default value is false
load_fdfs_parameters_from_tracker=false
# if use storage ID instead of IP address
# same as tracker.conf
# valid only when load_fdfs_parameters_from_tracker is false
# default value is false
# since V4.05
use_storage_id = false
# specify storage ids filename, can use relative or absolute path
# same as tracker.conf
# valid only when load_fdfs_parameters_from_tracker is false
# since V4.05
storage_ids_filename = storage_ids.conf
#HTTP settings
http.tracker_server_port=80
#use "#include" directive to include HTTP other settiongs
##include http.conf
测试上传文件
mutagen依赖包必须为1.40 高版本出错 不可解决
必须先安装依赖包才能安装fdfs_client-py-master
如果安装fdfs_client-py-mater报错请参考博客:
ls_ange博客
pip install mutagen==1.40
pip install requests
pip install fdfs_client-py-master.zip
from fdfs_client.client import Fdfs_client
# 指定配置文件 client.conf
client = Fdfs_client('utils/fastdfs/client.conf')
# 上传图片 有返回值
test1 = client.upload_by_filename('test.jpg')
print(test1)
返回值为上传文件的url