FastDFS搭建文件服务器
一.为什么需要文件服务器?
在我们的项目中,文件上传下载(其中包括图片)是经常需要我们去开发的,我们可以根据前端传过来的文件保存到本地服务器中,但是这会导致两个问题,其一,当系统发展到后面,逐渐的单一的服务器支撑不了巨大的访问量,我们就会采用集群分布式的架构方式去搭建我们的服务器环境,当使用这种架构之后原来我们存在我们服务器A中的文件服务器B是没有的,加入nginx负载均衡到服务器B就会加载不出图片,因为我们上传的图片在服务器A中,因此我们必须独立出一台服务器作为文件(图片)服务器,其二是如果我们是开发供用户使用的门户网站系统的话(例如抖音),那么用户上传的图片文件会非常的多,存储在我们项目的web服务器的开销不来的,因此分布式文件系统就诞生了。
我们这里说的是用FastDFS搭建出的文件系统,简单介绍一下FastDFS:
FastDFS是用c语言编写的一款开源的分布式文件系统,它是由淘宝资深架构师余庆编写并开源。FastDFS专为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
1.FastDFS的工作原理:
在FastDFS的架构中主要包括Tracker server和Storage server。客户端通过访问Tracker server,根据Tracker server回调的Storage server的ip去访问进行文件上传以及下载。
下面是FastDFS的架构:
(1)Tracker server:Tracker server主要作为是负载均衡和调度,当client要上传或者下载文件时,首先访问Tracker server,Tracker server会根据具体的访问策略去找到具体的Storage server给client,client根据返回的地址信息去直接访问Storage server,所以可以称Tracker server为追踪服务器或者调度服务器。
(2)Storage server:Storage server的作用就是用来文件存储的,是整个FastDFS最终的实现的目的,客户端最终上传的文件都存储在Storage server中,但是Storage server并没有实现自己的文件系统,而是采用服务器本身的文件系统去存储,所以Storage server也称为存储服务器。
Storage集群采用了分组的存储方式。集群由一组或者多组组成,一组Storage server有一台或者多台组成,不同组的Storage server不会互相通信,同一组的Storage server会互相网络连接通信进行文件同步,保证一组上每一台server的文件都是一致的,一组的存储容量为该组中容量最少的那一台server
2.文件上传流程
首先客户端发起上传文件的请求给Tracker server,Tracker server负责调度Storage server集群,从集群中查看空闲的Storage server的信息返回给客户端,客户端拿到信息之后直接根据该信息去与Storage server进行文件上传的交互,文件上传完成后Storage server会返回一个文件id给客户端去存储,下次下载该文件的时候直接发送该文件id即可在这里我们可以看到Tracker server完全是一个中间人的身份去完成文件的上传,Storage server会定时发送心跳给Tracker server汇报自己的状态。
3.下载流程
客户端发送下载请求给Tracker server,Tracker server查询可用的Storage server信息返回给客户端,客户端拿着之前保存的file_id去请求Storage server进行文件的下载。
文件id,例如:
group1是组名,M00是Storage server的存储的虚拟路径,在Storage server的配置文件中如果我们设置了store_path0的话就是M00,store_path1的话就是M01,然后后面就是store_path下面的相对路径。
二.FastDFS的配置
安装FastDFS这里就不说了,这里讲的只要是配置文件的说明。
1.Tracker server的配置
我这里的tracker和server都是在本机,所以两者的配置文件目录我都放在了/etc/fdfs目录
其中tracker.conf,storage.conf分别为tracker和storage的配置文件
打开tracker.conf
主要配置有
端口:port=22122
存储策略:store_lookup=0(轮询向storage存储文件),1(指定具体的group),2(负载均衡,选择空闲的storage存储)
tracker基础目录:base_path=/home/fastdfs,tracker在运行时会在此目录存储storage的管理数据以及会在此目录下创建一个logs目录存放一个trackerd.log文件记录tracker的运行日志
2.Storage server的配置
打开storage.conf
组名:group_name=group1
端口:23000
向tracker发送心跳的时间间隔(秒):heart_beat_interval=30
storage的基础目录:base_path=/home/fastdfs,在此目录下会创建一个logs目录存在一个storaged.conf文件记录storage的运行日志。
store_path0=/home/fastdfs/fdfs_storage,此目录就是上面说的文件id里面的M00,如果有多个存储目录就可以设置store_path1
上报tracker的地址:tracker_server=192.168.157.137:22122,有多个tracker的话可以配置多个tracker的地址
3.运行FastDFS
分别运行tracker和storage的脚本起启动tracker以及storage
启动tracker:/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start (tracker脚本 tracker.conf的路径)
启动storage:/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start (storage脚本 storage.conf的路径)
下面是我已经运行之后并且已经通过客户端向fastdfs存储的文件的目录:
,其中data就是tracker通过base_path的设置在/home/fastdfs中创建了一个data目录去存放管理storage server的信息,logs记录tracker和storage的运行日志,fafs_storage就是我在storage.conf中设置的store_path0,里面就是存放的文件。
三.搭建图片虚拟主机
我们上面已经成功运行了FastDFS,当我们在上面存储了图片之后通常我们都要通过http对其进行访问,例如说我们向服务端上传了一个头像的图片,服务端把图片保存在了storage server中之后要把图片的http地址返回给客户端,让客户端能够直接访问该url去加载该图片显示给用户看,那么我们该怎样的到我们上传给storage server的http地址尼,可能这时候有人就会想到用nginx进行映射了,对,这里我们也是使用的nginx对storage server里面的图片进行映射。
我们这里打算是这样子,在最外面套上一层nginx代理,然后nginx代理经过转发给它后面的storage server,而我们上面说过,storage server是一组的,一组可能会有多个storage server,那么我们就需要在这一组中再套上一层nginx代理进行负载均衡。
首先我们对于storage server这一层的nginx需要安装FastDFS-nginx-module模块,安装过程我们这里就不述说了。
然后在安装的nginx的ngin.conf文件中编辑:
server {listen 80;server_name 192.168.157.137;location /group1/M00/ {root /home/FastDFS/fdfs_storage/data;ngx_FastDFS_module;}
}
然后在最外面的一层nginx中打开ngin.conf编辑:
#图片服务upstream img_server_pool1{server 192.168.157.137:80 weight=10;}upstream img_server_pool2{server 192.168.157.138:80 weight=10;}server {listen 80;server_name img.imgserver.com;location /group1 {proxy_pass http://img_server_pool1/group1;}location /group2 {proxy_pass http://img_server_pool2/group2;}}
假如我们后面的storage不止一组的话,可以配置多个location和多个upstream。
FastDFS搭建文件服务器相关推荐
- 在CentOS7上使用FastDFS搭建文件服务器
1. 系统环境准备 首先需要自己在虚拟机上安装CentOS或者本机直接就是CentOS,安装及其它配置过程这里不再介绍,请参考笔者的CentOS7初始配置即可. 2. 软件环境准备 首先要安装GCC等 ...
- FastDFS分布式文件服务器部署与运用
FastDFS分布式文件服务器部署与运用 FastDFS介绍 FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大 ...
- 文件管理系统(2/3)FastDFS搭建分布式文件管理系统
参考案例:Java+Nginx+FastDFS 分布式文件系统fastdfs_使用python操作fastdfs 一.简介 这里介绍使用python操作fastdfs.python操作需要依赖py3F ...
- 四种方式搭建文件服务器
最近做工程,文件存储.图片存储没有一个统一的管理方式,很不爽. 准备搭建个文件服务器来玩玩,百度了一圈,找到了主流的四种搭建服务器的方式,并且把它部署到了我的阿里云服务器上. 四种搭建文件服务器的方式 ...
- 基于docker - 单机版FastDFS搭建
基于docker - 单机版FastDFS搭建 ###### 安装单机版 ###### # make docker container docker run -it -P -v /home/insun ...
- linux中使用Vsftpd+nginx 搭建文件服务器
目录标题 搭建文件服务器 1.安装 vsftpd 2.给文件服务器添加一个用户 3.设置开机自启动 vsftpd常用操作命令 安装Nginx 搭建文件服务器 1.安装 vsftpd yum -y in ...
- vps怎么做文件服务器,vps搭建文件服务器
vps搭建文件服务器 内容精选 换一换 方法一:在VSCode上选择"文件 > 首选项 > 设置",再选择"工作区",并在输入框搜索"ku ...
- Centos 7 x64 搭建文件服务器HFS
Centos 7 x64 搭建文件服务器HFS 提供文件服务器的方法有很多,tomcat自己就带文件服务器的功能,但是我自己上传部分一直配置失败..百度以后Windows有可以直接用的文件服务器HFS ...
- 文件服务器搭建 xp,xp搭建文件服务器
xp搭建文件服务器 内容精选 换一换 本节操作介绍华为云上云服务器的跨账号跨区域迁移,建议采用镜像迁移方式.服务器迁移的常见场景与常用的迁移方式请参考迁移的背景知识.跨账号跨区域迁移的方法请参考方案介 ...
- 【python中级】 FastDFS删除文件服务器上的文件
[python中级] FastDFS删除文件服务器上的文件 1.背景 2.使用示例 3.删除验证 1.背景 将文件上传至FastDFS文件服务器可以参考: [python中级] FastDFS通过bu ...
最新文章
- vue 中watch函数名_vue中避免使用函数来绑定依赖
- html文件嵌入到reportlab,Reportlab的Code128条形码作为HTML图像标签,在Python中使用数据URI方案...
- 24 React.createRef()用法细节分析
- 如何构建一个拖垮整个公司的备份系统
- gatsby_将Gatsby默认启动程序转换为使用样式化组件
- VS中使用define和undef实现条件编译(csc.exe条件编译)
- bzoj 1664 (贪心)
- 在 Windows 10 中查找 BitLocker 恢复密钥
- java的基本循环结构_Java基础之(九):循环结构
- linux网络问题-子网掩码与网关不在同一段的处理
- html页面能直接用vuex吗,vuex(多用于不同页面之间的数据共用和修改)
- 新中大财务软件服务器路径修改,新中大软件最常用的操作手册
- java 泛型对象实例化_java泛型对象的实例化
- USB网卡驱动分析(rt8152)
- 进击----Helix QAC自动化静态测试
- pycharm备份还原
- 个人号微信SCRM客服系统功能介绍
- 响应式网页设计学习笔记
- 钉钉群机器人关键词自动回复_企业微信群机器人怎么用?企业微信群机器人有什么功能?...
- Pycharm设置快捷键放大缩小字体
热门文章
- 算法:Reverse String(反转字符串)
- java为什么要连接Mysql_为什么要启动mysql workbech,java才能连接mysql数据库呢?
- 2021-09-1031. 下一个排列 数组
- 216.组合总和III
- AttributeError: 'numpy.int64' object has no attribute 'translate'
- android 扩展textview,Android可收缩/扩展的TextView【1】
- python备注(持续更新……)
- 使用Caronte在CTF比赛中完成网络流量分析
- 跟小丸子学基础口语16-20
- web@h,c小总结