分布式文件存储-FastDFS环境搭建

news2024/11/17 23:54:58

FastDFS简介

FastDFS是什么?我们这里可以看一下度娘的解释。FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。我这里使用服务器环境是 Centos7.
注意:FastDFS只能上传500MB的小文件

FastDFS角色简介

tracker:跟踪者,负责调度存储服务。
storage:用于文件存储。
client:调用tracker

集群示例图

在这里插入图片描述跟踪器(Tracter)和存储节点(Storage)都可以由一台多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。
为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷 的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起 到了冗余备份和负载均衡的作用。
在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。
当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。
FastDFS中的文件标识分为两个部分:卷名和文件名,者缺一不可。

上传文件交互过程

1.client询问tracker上传到的storage,不需要附加参数;
2.tracker返回一台可用的storage;
3.client直接和storage通讯完成文件上传;
在这里插入图片描述

下载文件交互过程

1.client询问tracker下载文件的storage,参数为文件标识(卷名和文件名);
2.tracker返回一台可用的storage;
3.client直接和storage通讯完成文件下载。

安装准备

FastDFS相关包可在https://github.com/happyfish100下载.
在这里插入图片描述
nginx安装包可在http://nginx.org/en/download.html下载
在这里插入图片描述
我已经上传到百度网盘了,大家可以下载快些
链接:https://pan.baidu.com/s/1jB1koQIBwR1OC07J6mb4mg
提取码:frfc
上传下面4个文件到 /usr/local/fastdfs 目录下面
在这里插入图片描述

开始安装

安装libfastcommon

cd  /usr/local/fastdfs
unzip libfastcommon-master.zip
cd libfastcommon-master

如果之前没有安装过gcc,则要按照gcc

yum -y install gcc-c++

编译

./make.sh
./make.sh install

建立软连接

ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so

安装FastDFS

/usr/local/fastdfs目录,解压FastDFS安装包

cd /usr/local/fastdfs
unzip fastdfs-master.zip
cd fastdfs-master
yum -y install perl
./make.sh
./make.sh install

重上图能看到已经安装到了/etc/fdfs目录中中,复制一下3个默认的配置文件后面编辑需要使用。

cd /etc/fdfs/
cp client.conf.sample client.conf
cp storage.conf.sample storage.conf
cp tracker.conf.sample tracker.conf

至此FastDFS已经安装完毕,接下来的工作就是依次配置Tracker和Storage了。

配置

配置tracker

创建tracker工作目录
在配置Tracker之前,首先需要创建Tracker服务器的文件路径,即用于存储Tracker的数据文件和日志文件等,我这里选择在/opt目录下创建一个fastdfs/tracker目录用于存放Tracker服务器的相关文件:

mkdir -p /opt/fastdfs/tracker

修改tracker配置文件
配置下面4个配置:

vi /etc/fdfs/tracker.conf
#启用配置文件,默认启用配置文件(默认值)
disabled=false 
#设置tracker的端口号,通常采用22122这个默认端口 (默认值)
port=22122 
#设置tracker的数据文件和日志目录
base_path=/opt/fastdfs/tracker
#设置http端口号,(默认值)
http.server_port=8080 

启动tracker

service fdfs_trackerd start

查看启动日志

tail -f /opt/fastdfs/tracker/logs/trackerd.log

通过netstat命令查看一下端口监听情况

netstat -unltp|grep fdfs

配置storage

为storage配置工作目录
步骤基本与配置Tracker一致,首先是创建Storage服务器的文件目录,需要注意的是同Tracker相比我多建了一个目录,因为Storage还需要一个文件存储路径,用于存放接收的文件:

mkdir -p  /opt/fastdfs/storage_data /opt/fastdfs/storage

修改storage配置文件

vi /etc/fdfs/storage.conf
#启用配置文件(默认值)
disabled=false 
#组名,根据实际情况修改 (默认值)
group_name=group1 
#设置storage的端口号,默认是23000,同一个组的storage端口号必须一致 (默认值)
port=23000 
#设置storage数据文件和日志目录
base_path=/opt/fastdfs/storage 
#存储路径个数,需要和store_path个数匹配 (默认值)
store_path_count=1  
#实际文件存储路径
store_path0=/opt/fastdfs/storage_data 
#tracker 服务器的 IP地址和端口号,如果是单机搭建,IP不要写127.0.0.1,否则启动不成功(此处的ip是我的CentOS虚拟机ip)
tracker_server=192.168.100.128:22122
#设置 http 端口号  (默认值)
http.server_port=8888 

启动storage

service fdfs_storaged start

如果启动成功,/opt/fastdfs/storage中就可以看到启动后新生成的data和logs目录,端口23000也应被正常监听,还有一点就是文件存储路径下会生成多级存储目录,那么接下来看看目录下面是否有文件

#查看目录
ls /opt/fastdfs/storage/data
#查看端口监听情况
netstat -unltp|grep fdfs

查看日志

tail -f /opt/fastdfs/storage/logs/storaged.log

验证是否配置成功
fastdfs的东西都已安装完成,最后我们还要确定一下,storage是否注册到了tracker中去

/usr/bin/fdfs_monitor /etc/fdfs/storage.conf

为什么 安装 FastDFS的nginx模块

我们在使用FastDFS部署一个分布式文件系统的时候,通过FastDFS的客户端API来进行文件的上传、下载、删除等操作。同时通过FastDFS的HTTP服务器来提供HTTP服务。但是FastDFS的HTTP服务较为简单,无法提供负载均衡等高性能的服务,所以FastDFS的开发者——淘宝的架构师余庆同学,为我们提供了Nginx上使用的FastDFS模块(也可以叫FastDFS的Nginx模块)。
FastDFS通过Tracker服务器,将文件放在Storage服务器存储,但是同组之间的服务器需要复制文件,有延迟的问题.假设Tracker服务器将文件上传到了192.168.100.128,文件ID已经返回客户端,这时,后台会将这个文件复制到192.168.100.128,如果复制没有完成,客户端就用这个ID在192.168.100.128取文件,肯定会出现错误。这个fastdfs-nginx-module可以重定向连接到源服务器取文件,避免客户端由于复制延迟的问题,出现错误。
正是这样,FastDFS需要结合nginx,所以取消原来对HTTP的直接支持。

FastDFS的nginx模块安装

安装nginx依赖

#安装nginx依赖
yum -y install pcre pcre-devel
yum -y install zlib zlib-devel
yum -y install openssl openssl-devel
mkdir -p /usr/local/nginx
#安装nginx并添加fastdfs-nginx-module
cd /usr/local/fastdfs
tar -zxvf nginx-1.18.0.tar.gz 
unzip fastdfs-nginx-module-master.zip
#解压后进入nginx目录编译安装nginx,并添加fastdfs-nginx-module:
cd /usr/local/fastdfs/nginx-1.18.0
./configure --prefix=/usr/local/nginx --add-module=/usr/local/fastdfs/fastdfs-nginx-module-master/src

修改fastdfs配置
把FastDFS的安装目录/usr/local/fastdfs/fastdfs-master/conf目录下得http.conf和mime.types和/usr/local/fastdfs/fastdfs-nginx-module-master/src目录下的mod_fastdfs.conf 拷贝到/etc/fdfs目录下:

cp /usr/local/fastdfs/fastdfs-master/conf/http.conf  /etc/fdfs/
cp /usr/local/fastdfs/fastdfs-master/conf/mime.types  /etc/fdfs/
cp /usr/local/fastdfs/fastdfs-nginx-module-master/src/mod_fastdfs.conf  /etc/fdfs/

修改mod_fastdfs.conf配置文件

vi /etc/fdfs/mod_fastdfs.conf
#保存日志目录
base_path=/opt/fastdfs/storage  
#tracker服务器的IP地址以及端口号
tracker_server=192.168.100.128:22122
#storage服务器的端口号(默认值)
storage_server_port=23000 
#文件 url 中是否有 group 名
url_have_group_name = true 
#存储路径
store_path0=/opt/fastdfs/storage_data
#设置组的个数,事实上这次只使用了group1,设置了group_count = 1,接下来就需要在文件尾部追加这1个group setting:
6.group_count = 1  

[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs/storage_data

修改nginx.conf配置文件

编辑 /usr/local/nginx/conf/nginx.conf,在http模块中添加一个server如下

  server {
        listen       9999;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
	    location ~/group1/M00 { 
	        #fdfs配置的数据存储路径
            root  /opt/fastdfs/storage_data/data;
            ngx_fastdfs_module;
        }
}

启动nginx

/usr/local/nginx/sbin/nginx

设置开机自启动

编辑/etc/rc.d/rc.local让系统开机自启动fdfs服务

vi /etc/rc.d/rc.local
#在尾部增加下面一行命令 
service fdfs_trackerd start
service fdfs_storaged start
/usr/local/nginx/sbin/nginx

修改文件权限

chmod +x /etc/rc.d/rc.local

总结

通过上述的说明是不是FastDFS 可以搭建成功,下面我们就使用spring boot 来作为客户端来使用FastDFS 存储等相关操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/82679.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

grid布局 笔记

这次给大家带来的是grid布局,之前听说过但没接触过,一起来学一下吧,提升一下css认知。 1、开启方式 给父级盒子开启grid布局 display: grid2、gap 间隙 所有盒子的行列间隙为10px gap: 10px行/列 colomn-gap: 20px;row-gap: 15px注意&#…

java计算机毕业设计ssm迎新系统pv83c(附源码、数据库)

java计算机毕业设计ssm迎新系统pv83c(附源码、数据库) 项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项…

[MySQL]-压力测试之性能监测指标

[MySQL]-压力测试之性能监测指标 森格 | 2022年12月 本文主要是介绍在数据库的压测过程中,要时刻的一些指标,尤其是当数据库的性能达到瓶颈时,要注意哪个指标已经打满。 一、前文回顾 在前面量两篇文章中,分别介绍了两款压测数据…

数据标注过程中会遇到哪些难题 | 景联文科技

“近年来,⼈⼯智能发展迅速,影响着我们⽣活中的方方面面。随着⼈⼯智能应⽤场景不断增加,作为⼈⼯智能的上游基础⾏业,数据标注行业也快速发展,但许多不成熟的标注团队组织由于管理水平有限,且没有系统的标…

【C++笔试强训】第五天

文章目录选择题编程题选择题 在上下文和头文件均正常情况下,以下程序的输出结果是() int x 1; do{printf("%2d\n",x) }while(x--);A 1 B 无任何输出 C 2 D 陷入死循环 x1,x是后置,先使用,在加…

Python之路200个小例子网页版,真诚奉献,从一而终!

前言 历史两个月,利用所有业余时间,与朋友一起搜集、创作Python小例子,截止目前已超过200个例子: Python之路 1 简洁之美 2 Python绘图 3 Python动画 4 Python数据分析 5 Python机器学习 6 Python-GUI 一、Python基础 1…

Acrel-EIOT免调试抄表系统

安科瑞 华楠 一、远程抄表系统应用场景-互联网用户(能源参与者) 二、远程抄表系统互联网用户的痛点 2.1 数据系统价格偏高 一套系统需要前期勘察、画图、出方案、报价,建设投入服务器、网络布线、交换机,网关、人工施工及调试&…

Vue中使用vxe-table组件分页查询,多页选择数据回显,分页记录保存选中的数据

官方示例:vxe-table v3https://vxetable.cn/v3/#/table/advanced/page 当表格中需要渲染的数据量比较大,有几万几十万条数据时,在前端分页将会非常慢,建议将当前页码和每页数量传递个后端,后端分好后给前端渲染。 后端…

电脑重装小白系统没内存怎该如何解决

很多网友想要重装系统,但是在用小白系统安装的时候提示没内存怎么办呢?我们可以卸载自己的电脑软件,或者是扩充一下自己电脑内存。不知道如何处理相关问题的小伙伴可以直接看看下面小编分享的文章小白系统没内存怎么办。 工具/原料: 系统版…

MySQL主从复制-----读写分离

MySQL主从复制是一个异步的复制过程,底层是基于Mysql数据库自带的二进制日志功能。就是一台或多台Mysql数据库(slave从库)从另一台mysql数据库(master,主库)进行日志的复制然后再解析日志并应用到自身,最终…

nacos--基础--2.5--部署--集群--传统

nacos–基础–2.5–部署–集群–传统 前提 使用hd用户登陆 完成基础环境搭建https://blog.csdn.net/zhou920786312/article/details/1182123021、机器 IP端口备注192.168.187.1718848xx192.168.187.1728848xx192.168.187.1738848xx 2、tar.gz安装 2.1、安装 参考 nacos–基…

javaee之黑马旅游网4

下面来做旅游线路的查询功能 1.查询参数传递 在header.html 我们先找到这部分的位置 上面就加了两个id 引入这个js文件 控制搜索框 那我们现在来说一下,cid怎么来获取,换句话说cid是从什么地方传过来的? 首先header.html页面是被包含在r…

人力资源杂志人力资源杂志社人力资源编辑部2022年第20期目录

专题研究《人力资源》投稿:cnqikantg126.com 破解高端人才引聚难 林翠玲; 1-3 如何凸显集团企业人力资源管理价值 刘鹏飞; 4-5 中长期激励,激活科研人员创新力 刘灿;汪思源; 6-7 改革人才评价体系,助推“双一流”建设 杨帆; …

STM32CUBEMX_配置stm32f103c8t6的bootloader_USB升级

STM32CUBEMX_配置stm32f103c8t6的bootloader_USB升级 1、使用stm32cubemx配置好工程(版本6.3.0),生成keil工程 2、移植必须要的一些函数 3、使用dfusedemo工具软件测试 ①配时钟外设 ②配ST-Link调试接口(防止无法二次烧录程序&a…

理解Python的协程(Coroutine)

生成器(Generator) yield表达式的使用生产者和消费者模型yield from表达式协程(Coroutine) asyncio.coroutineasync/await总结参考链接 由于GIL的存在,导致Python多线程性能甚至比单线程更糟。 GIL: 全局解释器锁(英语:Global Interpreter Lo…

InvocationException: GraphViz‘s executables not found【BUG已解决】

项目场景: 在机器学习框架中遇到了一个bug:安装了GraphViz模块后,在对着sklearn的决策树文档操作输出决策树模型结果时,还是爆出了如下的错误: 报错位置为: display(Image(graph.create_png())) graph.wr…

艾美捷低内毒素CpG ODN寡聚脱氧核苷酸全家族系列

免疫佐剂,是一类可以增强抗原免疫原性的免疫调节分子、化合物或大分子复合物。大多数佐剂可以通过启动先天免疫系统来辅助抗原应答。先天免疫系统通过模式识别受体(pattern recognition receptor,PRR)来感知各种微生物表达的病原体…

SQL通用语法及分类

目录 MySQL的启动和连接&数据模型 SQL通用语法及分类 Data Definition Language DDL - 数据库操作 DDL - 表操作 表操作 - 创建&&查询 表操作 - 数据类型 表操作-修改&&删除 DDL总结 Data Manipulation Language DML - 插入数据insert DML - 更…

高佣金流量卡上线

01 流量卡业务 常规的运营商套餐相对都比较贵,少则六七十一个月,多则几百块一个月,这样的套餐让运营商赚盆满钵满。 随着5G需求越来越多,其他第三方运营商也开始市场化营销,流量卡的CPA基本在60-200之间一张卡&…

汽车喷漆车间风淋室八大参数TENAISU

汽车喷漆车间风淋室风淋室配置八大参数 汽车喷漆车间风淋室及汽车涂装车间风淋室配置八大参数,光电感应自动功能系统、自动身份识别功能系统、自动臭氧杀菌功能系统、自动紫外线杀菌功能系统、自动除静电离子发生功能系统、可调延时开门功能系统、过滤器失效预警功能系统、自动…