FastDFS搭建分布式文件系统
FastDFS搭建分布式文件系统
1. 什么是分布式文件系统
分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。
通俗来讲:
- 传统文件系统管理的文件就存储在本机。
- 分布式文件系统管理的文件存储在很多机器,这些机器通过网络连接,要被统一管理。无论是上传或者访问文件,都需要通过管理中心来访问
2. 什么是FastDFS
FastDFS是由淘宝的余庆先生所开发的一个轻量级、高性能的开源分布式文件系统。用纯C语言开发,功能丰富:
- 文件存储
- 文件同步
- 文件访问(上传、下载)
- 存取负载均衡
- 在线扩容
适合有大容量存储需求的应用或系统。同类的分布式文件系统有谷歌的GFS、HDFS(Hadoop)、TFS(淘宝)等。
3. FastDFS的架构
3.1 fast架构
FastDFS两个主要的角色:Tracker Server 和 Storage Server 。
- Tracker Server:跟踪服务器,主要负责调度storage节点与client通信,在访问上起负载均衡的作用,和记录storage节点的运行状态,是连接client和storage节点的枢纽。
- Storage Server:存储服务器,保存文件和文件的meta data(元数据),每个storage server会启动一个单独的线程主动向Tracker cluster中每个tracker server报告其状态信息,包括磁盘使用情况,文件同步情况及文件上传下载次数统计等信息
- Group:文件组,多台Storage Server的集群。上传一个文件到同组内的一台机器上后,FastDFS会将该文件即时同步到同组内的其它所有机器上,起到备份的作用。不同组的服务器,保存的数据不同,而且相互独立,不进行通信。
- Tracker Cluster:跟踪服务 器的集群,有一组Tracker Server(跟踪服务器)组成。
- Storage Cluster :存储集群,有多个Group组成。
3.2 上传和下载流程
上传
- Client通过Tracker server查找可用的Storage server。
- Tracker server向Client返回一台可用的Storage server的IP地址和端口号。
- Client直接通过Tracker server返回的IP地址和端口与其中一台Storage server建立连接并进行文件上传。
- 上传完成,Storage server返回Client一个文件ID,文件上传结束。
下载
- Client通过Tracker server查找要下载文件所在的的Storage server。
- Tracker server向Client返回包含指定文件的某个Storage server的IP地址和端口号。
- Client直接通过Tracker server返回的IP地址和端口与其中一台Storage server建立连接并指定要下载文件。
- 下载文件成功。
4. FastDFS安装
注意:
安装过程中,下载的源码包,均放在 /usr/local/src
4.1 安装依赖
4.1.1 安装GCC依赖
FastDFS是C编写的,我们进行编译安装需要下载gcc:
yum -y install gcc-c++
4.1.2 安装libevent
FastDFS依赖libevent,需要安装:
yum -y install libevent
4.1.3 安装libfastcommon
libfastcommon是FastDFS官方提供的,libfastcommon包含了FastDFS运行所需要的一些基础库。
下载地址: https://github.com/happyfish100/libfastcommon/releases 选择合适的版本
#切换到下载目录
cd /usr/local/src/
#下载(如果下载慢 可以将下载好的文件上传到此目录)
wget -O libfastcommon-1.0.39.tar.gz https://codeload.github.com/happyfish100/libfastcommon/tar.gz/V1.0.39
#解压
tar -zxvf libfastcommon-1.0.39.tar.gz
#进入目录
cd libfastcommon-1.0.39/
#编译安装
./make.sh
./make.sh install
注意:这里推荐下载依赖,然后上传到服务器。
到这里为止,所有依赖都已经安装完毕,接下来我们安装FastDFS:
4.2 安装FastDFS
下载地址:https://github.com/happyfish100/fastdfs/releases 选择合适的版本
#切换到下载目录
cd /usr/local/src/
#下载(如果下载慢 可以将下载好的文件上传到此目录)
wget -O fastdfs-5.11.tar.gz https://codeload.github.com/happyfish100/fastdfs/tar.gz/V5.11
#解压
tar -zxvf fastdfs-5.11.tar.gz
cd fastdfs-5.11/
#编译安装
./make.sh
./make.sh install
注意:
1)安装完成,我们应该能在/etc/init.d/
目录,看到FastDFS提供的启动脚本:
fdfs_trackerd
是tracker启动脚本fdfs_storaged
是storage启动脚本
2)我们可以在 /etc/fdfs
目录,通过命令查看到以下配置文件模板:
tarcker.conf.sample
是tracker的配置文件模板storage.conf.sample
是storage的配置文件模板client.conf.sample
是客户端的配置文件模板
4.3 配置tracker
FastDFS的tracker和storage在刚刚的安装过程中,都已经被安装了,因此我们安装这两种角色的方式是一样的。不同的是,两种需要不同的配置文件。
我们要启动tracker,就修改刚刚看到的tarcker.conf
,并且启动fdfs_trackerd
脚本即可。
进入 /etc/fdfs,复制 FastDFS 跟踪器样例配置文件 tracker.conf.sample,并重命名为 tracker.conf。
cd /etc/fdfs/
cp tracker.conf.sample tracker.conf
vim tracker.conf
编辑tracker.conf ,标红的需要修改下,其它的默认即可。
# 配置文件是否不生效,false 为生效
disabled=false # 提供服务的端口
port=22122 # Tracker 数据和日志目录地址(根目录必须存在,子目录会自动创建)
base_path=/fastdfs/tracker # HTTP 服务端口 默认8080 ,建议修改 防止冲突
http.server_port=9080
创建tracker基础数据目录,即base_path对应的目录
mkdir -p /fastdfs/tracker
在防火墙中开启端口(默认22122),启动tracker
初次成功启动,会在 /fdfsdfs/tracker/ (配置的base_path)下创建 data、logs 两个目录。
我们可以使用
sh /etc/init.d/fdfs_trackerd
启动,不过安装过程中,fdfs已经被设置为系统服务,我们可以采用熟悉的服务启动方式:注意:
此处必须先使用原始方式打开该服务
/etc/init.d/fdfs_trackerd start
接下来才可以使用以下方式:
#启动服务
systemctl start fdfs_trackerd.service
#关闭服务
systemctl stop fdfs_trackerd.service
#开机自动启动
systemctl enable fdfs_tracked.service
查看状态
systemctl status fdfs_tracker
tracker server
目录及文件结构${base_path}
|__data
| |__storage_groups.dat:存储分组信息
| |__storage_servers.dat:存储服务器列表
|__logs
| |__trackerd.log: tracker server 日志文件
4.4 配置storage
进入 /etc/fdfs 目录,复制 FastDFS 存储器样例配置文件 storage.conf.sample,并重命名为 storage.conf
cd /etc/fdfs
cp storage.conf.sample storage.conf
vim storage.conf
编辑storage.conf
# 配置文件是否不生效,false 为生效
disabled=false # 指定此 storage server 所在 组(卷)
group_name=group1 # storage server 服务端口
port=23000 # 心跳间隔时间,单位为秒 (这里是指主动向 tracker server 发送心跳)
heart_beat_interval=30 #Storage 数据和日志目录地址(根目录必须存在,子目录会自动生成) (注 :这里不是上传的文件存放的地址,之前版本是的,在某个版本后更改了)
base_path=/fastdfs/storage/base # 存放文件时 storage server 支持多个路径。这里配置存放文件的基路径数目,通常只配一个目录。
store_path_count=1 # 逐一配置 store_path_count 个路径,索引号基于 0。
#storage的上传文件存放路径 如果不配置 store_path0,那它就和 base_path 对应的路径一样。
store_path0=/fastdfs/storage # tracker的地址,有多个 tracker server 时,每个 tracker server 写一行
tracker_server=192.168.11.66:22122 # 访问端口 默认80 建议修改 防止冲突
http.server_port=9888
创建Storage基础数据目录,对应base_path目录
#对应base_path
mkdir -p /fastdfs/storage/base #这是配置的store_path0路径,有多个要创建多个
mkdir -p /fastdfs/storage/
在防火墙中开启端口(默认23000),启动tracker
启动Storage前确保Tracker是启动的。初次启动成功,会在
/fastdfs/storage/base(base_path)
目录下创建 data、 logs 两个目录。注意:
此处必须先使用原始方式打开该服务
/etc/init.d/fdfs_storaged start
接下来才可以使用以下方式:
#启动方式
systemctl start fdfs_storaged.service
#开机自启
systemctl enable fdfs_storaged.service
#查看状态
systemctl status fdfs_storaged.service
Storage目录
Storage 目录
同 Tracker,Storage 启动成功后,在base_path 下创建了data、logs目录,记录着 Storage Server 的信息。
在 store_path0/data 目录下,创建了N*N个子目录:[root@localhost ~]# ls /fastdfs/storage/data/
00 05 0A 0F 14 19 1E 23 28 2D 32 37 3C 41 46 4B 50 55 5A 5F 64 69 6E 73 78 7D 82 87 8C 91 96 9B A0 A5 AA AF B4 B9 BE C3 C8 CD D2 D7 DC E1 E6 EB F0 F5 FA FF
01 06 0B 10 15 1A 1F 24 29 2E 33 38 3D 42 47 4C 51 56 5B 60 65 6A 6F 74 79 7E 83 88 8D 92 97 9C A1 A6 AB B0 B5 BA BF C4 C9 CE D3 D8 DD E2 E7 EC F1 F6 FB
02 07 0C 11 16 1B 20 25 2A 2F 34 39 3E 43 48 4D 52 57 5C 61 66 6B 70 75 7A 7F 84 89 8E 93 98 9D A2 A7 AC B1 B6 BB C0 C5 CA CF D4 D9 DE E3 E8 ED F2 F7 FC
03 08 0D 12 17 1C 21 26 2B 30 35 3A 3F 44 49 4E 53 58 5D 62 67 6C 71 76 7B 80 85 8A 8F 94 99 9E A3 A8 AD B2 B7 BC C1 C6 CB D0 D5 DA DF E4 E9 EE F3 F8 FD
04 09 0E 13 18 1D 22 27 2C 31 36 3B 40 45 4A 4F 54 59 5E 63 68 6D 72 77 7C 81 86 8B 90 95 9A 9F A4 A9 AE B3 B8 BD C2 C7 CC D1 D6 DB E0 E5 EA EF F4 F9 FE
5. 上传测试
修改Tracker服务器中的客户端文件
cd /etc/fdfs
cp client.conf.sample client.conf
vim client.conf
修改如下配置即可,其它默认。
# Client 的数据和日志目录
base_path=/fastdfs/client # Tracker端口
tracker_server=192.168.11.66:22122
注意:
此处只需配置tracker_server的ip、端口即可。因为client访问tracker服务,tracker服务返回给client一个storage的ip、端口。
创建client基础数据目录,对应base_path目录
#对应base_path
mkdir -p /fastdfs/client
在linux内部执行如下命令上传 namei.jpeg 图片
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf namei.jpeg
上传成功后返回文件ID号:group1/M00/00/00/wKgz6lnduTeAMdrcAAEoRmXZPp870.jpeg
返回的文件ID由group、存储目录、两级子目录、fileid、文件后缀名(由客户端指定,主要用于区分文件类型)拼接而成。
6. 安装配置Nginx,http访问文件
上面将文件上传成功了,但我们无法下载。因此安装Nginx作为服务器以支持Http方式访问文件。同时,后面安装FastDFS的Nginx模块也需要Nginx环境。
Nginx只需要安装到StorageSe rver所在的服务器即可,用于访问文件。安装Nginx详见博客:
6.1 配置nginx
vim /usr/local/nginx/conf/nginx.conf
#配置如下
server {
listen 8081;
server_name 192.168.11.66;
location /group1/M00{
alias /fastdfs/storage/data/;
autoindex on;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
重启nginx
systemctl restart nginx.service
在浏览器访问之前上传的图片 http://192.168.11.66:8081/group1/M00/00/00/wKgz6lnduTeAMdrcAAEoRmXZPp870.jpeg
7. FastDFS配置nginx模块
7.1 fastdfs-nginx-module 模块说明
FastDFS 通过 Tracker 服务器,将文件放在 Storage 服务器存储, 但是同组存储服务器之间需要进行文件复制, 有同步延迟的问题。
假设 Tracker 服务器将文件上传到了 192.168.51.128,上传成功后文件 ID已经返回给客户端。
此时 FastDFS 存储集群机制会将这个文件同步到同组存储 192.168.51.129,在文件还没有复制完成的情况下,客户端如果用这个文件 ID 在 192.168.51.129 上取文件,就会出现文件无法访问的错误。
而 fastdfs-nginx-module 可以重定向文件链接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。
7.2 下载fastdfs-nginx-module
#进入目录
cd /usr/local/src
#下载文件
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/master.zip
#解压
unzip master.zip
注意:
下载方式可能随着时间失效,请查看最新下载方式。
7.3 配置nginx,添加fastdfs-nginx-module 模块
#停止nginx
systemctl stop nginx
#进入nginx源码目录
cd /usr/local/src/nginx-1.15.12/
#添加fastdfs-nginx-module模块
./configure --add-module=/usr/local/src/fastdfs-nginx-module-master/src
#重新编译安装nginx
make
make install
#验证是否加载fastdfs-nginx-module模块是否 ,有如下部分表示成功
/usr/local/nginx/sbin/nginx -V
如下显示:
nginx version: nginx/1.15.12
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)
configure arguments: --add-module=/usr/local/src/fastdfs-nginx-module-master/src
复制 fastdfs-nginx-module 源码中的配置文件 mod_fastdfs.conf 到/etc/fdfs 目录, 并修改
cp /usr/local/src/fastdfs-nginx-module-master/src/mod_fastdfs.conf /etc/fdfs/
vim /etc/fdfs/mod_fastdfs.conf
#修改如下配置,其它默认
# 连接超时时间
connect_timeout=10
# Tracker Server
tracker_server=192.168.11.66:22122
# StorageServer 默认端口
storage_server_port=23000
# 如果文件ID的uri中包含/group**,则要设置为true
url_have_group_name = true
# Storage 配置的store_path0路径,必须和storage.conf中的一致
store_path0=/fastdfs/storage
复制 FastDFS 的部分配置文件到/etc/fdfs 目录
cd /usr/local/src/fastdfs-6.03/conf
cp anti-steal.jpg http.conf mime.types /etc/fdfs/
配置nginx,修改nginx.conf
vim /usr/local/nginx/conf/nginx.conf
#修改配置,其它的默认
#在80端口下添加fastdfs-nginx模块
location ~/group([0-9])/M00 {
ngx_fastdfs_module;
}
nginx的完整配置:
user root;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name 192.168.11.66;
# location /group1/M00{
# alias /fastdfs/storage/data/;
# autoindex on;
#}
location ~/group[0-9]/ {
ngx_fastdfs_module;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
启动nginx
systemctl start nginx.service
在地址栏访问。
注意:
和之前直接使用nginx路由访问不同的是,这里配置 fastdfs-nginx-module 模块,可以重定向文件链接到源服务器取文件。
参考博客:
https://blog.csdn.net/prcyang/article/details/89946190
FastDFS搭建分布式文件系统的更多相关文章
- 云存储?不依赖三方服务自己也可以搞,利用Docker来搭建分布式文件系统FastDfs
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_78 对于文件存储来说,一般情况下简单的处理就是在Django配置文件中配置存储目录,按照规则对文件进行上传或者下载. 实际上,当文 ...
- 从零搭建分布式文件系统MinIO比FastDFS要更合适
前两天跟大家分享了一篇关于如何利用FastDFS组件来自建分布式文件系统的文章,有兴趣的朋友可以阅读下<用asp.net core结合fastdfs打造分布式文件存储系统>.通过留言发现大 ...
- Docker来搭建分布式文件系统FastDfs
对于文件存储来说,一般情况下简单的处理就是在Django配置文件中配置存储目录,按照规则对文件进行上传或者下载. 实际上,当文件较少的时候,Django是可以应付的过来的.但当文件以海量形式出现的时候 ...
- IPFS搭建分布式文件系统 - 访问控制
IPFS 一个内容可寻址.对等的超媒体分发协议. IPFS网络中的节点形成分布式文件系统. 为什么要用IPFS? “IPFS and the Blockchain are a perfect matc ...
- FastDFS轻量级分布式文件系统部署
FastDFS介绍 FastDFS 是一个由 C 语言实现的开源轻量级分布式文件系统,作者余庆,支持 Linux.FreeBSD.AID 等 Unix 系统,解决了大数据存储和读写负载均衡等问题,适合 ...
- 基于Nginx+FastDFS搭建图片文件系统
Nginx+fastdfs:https://www.cnblogs.com/chiangchou/p/fastdfs.html#_label0_1 缩略图:https://blog.csdn.net/ ...
- FastDFS+Nginx分布式文件系统部署安装
安装: ##安装tracker.storage参考:http://www.cnblogs.com/zclzhao/p/5025229.html nginx代理设置参考:http://www.cnblo ...
- 分布式文件系统FastDFS
fastdfs_百度百科https://baike.baidu.com/item/fastdfs/5609710 用FastDFS一步步搭建文件管理系统 - bojiangzhou - 博客园http ...
- CentOS7搭建FastDFS V5.11分布式文件系统-第一篇
1.绪论 最近要用到fastDFS,所以自己研究了一下,在搭建FastDFS的过程中遇到过很多的问题,为了能帮忙到以后搭建FastDFS的同学,少走弯路,与大家分享一下.FastDFS的作者淘宝资深架 ...
随机推荐
- django-Views之常见的几种错误视图代码(三)
1.404 page not found(找不到对应的页面) 2.500 server error(服务器错误) 3.400 bad request(无效的请求) 4.403 HTTP forbidd ...
- 关于ArcGIS的OBJECTID生成策略拙见
目录 诉求SDEOBJECTIDArcMap编辑重置OBJECTID 诉求 非GIS专业的人员可能很难理解ArcSDE中的表OBJECTID的重要性,要么总想着自己动手去维护,要么就想直接忽略它,导致 ...
- spring boot项目启动报错
在eclipse中运行没有任何问题,项目挪到idea之后就报错 Unable to start EmbeddedWebApplicationContext due to miss EmbeddedSe ...
- 第三十九章 POSIX信号量与互斥锁
POSIX信号量相关函数 sem_open 功能: initialize and open a named semaphore 原型: sem_t *sem_open(const char *name ...
- 重邮二进制群-pwn1
给学弟们练手的题目,做的过程中接触一些基本概念 #include <stdio.h> #include <unistd.h> int main() { ]; welcome() ...
- 和35岁刘阿姨一起自测 Python 流程控制基本功
0.突然降临的困惑 流程控制语句.布尔值.布尔值操作符都属于 python 的基础功.大好周末我写这篇笔记,不是为了整理这些基础知识点,而是记录几个令我突然迷惑的代码段.--代码本身很简单,但即便已经 ...
- 在线热备份数据库之innobackupex 完整备份InnoDB
在线热备份数据库innobackupex 完整备份InnoDB XtraBackup xtrabackup C程序,支持InnoDB/XtraDB innobackupex : 以Perl脚本封装xt ...
- javaScript中this到底指向谁
1.前言 在JavaScript中,this的指向一直是大多数初学者的易错点,总是搞不清楚this到底指向谁,而在求职面试中,this的指向问题往往又是高频考点.本篇博文就来总结一下在JavaScri ...
- jmeter-利用While Controller控制器实现接口报错时的重试机制
预期功能:在jmter脚本报错的时候重试,最多重试5次 1.添加While Controller 2.添加请求 3.添加断言,在断言不符合预期的时候加上代码:vars.put("status ...
- linux 自启动 | 三种方式自启动
linux 实现自启动有多种方式,通过Linux 底层启动原理介绍,便可以理解以下几种方式 这里简单介绍一下这几种方式 一.自定义开机程序 /etc/rc.d/rc.local 1.vim / ...