无限容量分布式文件存储解决方案

这篇具有很好参考价值的文章主要介绍了无限容量分布式文件存储解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

常见分布式文件系统

常见分布式文件系统比较

常见的分布式文件系统有GFS、HDFS 、Ceph 、GridFS 、TFS、FastDFS等。各自适用于不同的领域。

类 Google FS 都支持文件冗余备份,例如 Google FS、TFS 的备份数是 3。一个文件存储到哪几个存储结点,通常采用动态分配的方式。采用这种方式,一个文件存储到的结点是不确定的。举例说明,文件备份数是 3,集群中有 A、B、C、D 四个存储结点。文件 1 可能存储在 A、B、C 三个结点,文件 2 可能存储在 B、C、D 三个结点,文件 3 可能存储在 A、B、D 三个结点。

指标 HDFS GlusterFS Ceph TFS FastDFS
开发语言 Java C C++ C++ C
复杂度 简单 简单 复杂 复杂 简单
在线扩容 支持 支持 支持 支持 支持
冗余备份 支持 支持 支持 支持 支持
单点故障 不存在 不存在 不存在 存在 不存在
易用性 安装简单,官方文档专业化 安装简单,官方文档专业化 安装简单,官方文档专业化 安装复杂,官方文档少 安装简单,社区相对活跃
适用场景 适合存储大文件 跨集群云存储 单集群的大中小文件 跨集群的小文件 单集群的中小文件

分布式文件系统需要满足的要求

对一个分布式文件系统而言,有一些特性是必须要满足的,否则就无法有竞争力。主要如下:

  • 应该符合 POSIX 的文件接口标准,使该系统易于使用,同时对于用户的遗留系统也无需改造;
  • 对用户透明,能够像使用本地文件系统那样直接使用;
  • 持久化,保证数据不会丢失;
  • 具有伸缩性,当数据压力逐渐增长时能顺利扩容;
  • 具有可靠的安全机制,保证数据安全;
  • 数据一致性,只要文件内容不发生变化,什么时候去读,得到的内容应该都是一样的。

除此之外,还有些特性是分布式加分项,具体如下:

  • 支持的空间越大越好;
  • 支持的并发访问请求越多越好;
  • 性能越快越好;
  • 硬件资源的利用率越高越合理,就越好。

分布式文件系统的架构模型

无限容量分布式文件存储解决方案

从业务模型和逻辑架构上,分布式文件系统需要这几类组件:

  • 存储组件:负责存储文件数据,它要保证文件的持久化、副本间数据一致、数据块的分配 / 合并等等;
  • 管理组件:负责 meta 信息,即文件数据的元信息,包括文件存放在哪台服务器上、文件大小、权限等,除此之外,还要负责对存储组件的管理,包括存储组件所在的服务器是否正常存活、是否需要数据迁移等;
  • 接口组件:提供接口服务给应用使用,形态包括 SDK(Java/C/C++ 等)、CLI 命令行终端、以及支持 FUSE 挂载机制。

而在部署架构上,有着“中心化”和“无中心化”两种路线分歧,即是否把“管理组件”作为分布式文件系统的中心管理节点。“无中心化”的分布式系统的代表是Ceph,而存在“中心化”的分布式系统有很多,如今天要学的 FastDFS。

FastDFS 简介

概念

FastDFS 是一个轻量级、开源的、高性能、分布式的文件系统。它的主要功能包括:

  • 文件存储
  • 文件同步
  • 文件访问(文件上传和文件下载)
  • 解决了大容量存储和负载均衡的问题

FastDFS 非常适合以文件为载体的在线服务,如相册网站、视频网站等等。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制。并注重高可用、高性能等指标。使用FastDFS很容易搭建一套高性能的文件服务器集群,提供文件上传、下载等服务。

FastDFS是一种轻量级对象存储解决方案。如果您需要一个用于数据库、K8s和虚拟机(如KVM)的通用分布式文件系统,您可以了解FastCFS,它可以实现强大的数据一致性和高性能。

特点

  • 分组存储,简单灵活;
  • 对等结构,不存在单点;
  • 文件 ID 由 FastDFS 生成,作为文件访问凭证。FastDFS 不需要传统的 name server 或 meta server;
  • 大、中、小文件均可以很好支持,可以存储海量小文件;
  • 一台 storage 支持多块磁盘,支持单盘数据恢复;
  • 提供了 nginx 扩展模块,可以和 nginx 无缝衔接;
  • 支持多线程方式上传和下载文件,支持断点续传;
  • 存储服务器上可以保存文件附加属性。

角色

FastDFS包含两种角色:tracker 和 storage。

无限容量分布式文件存储解决方案

Tracker

tracker负责文件访问的调度和负载均衡,跟踪程序或存储群集中的服务器可以随时添加到群集中或从集群中删除,而不会影响在线服务。tracker集群中的服务器是对等的,可以根据服务器的压力情况随时增加或减少。Tracker server不存在单点故障。客户端请求Tracker server采用轮询方式,如果请求的tracker无法提供服务则换另一个tracker。

Storage

storage 负责存储文件,其功能是文件管理,包括:文件存储、文件同步、提供文件访问接口。它还管理元数据,这些元数据表示为文件键值对的属性。例如:name = “大都督”,其中 key为name,value为 大都督。文件元数据是文件属性列表,可以包含多个键值对。

存储服务器按文件卷/组进行组织以获得高容量,存储系统包含一个或多个卷,其文件独立于这些卷。整个存储系统的容量等于所有卷的容量之和。文件卷包含一个或多个存储服务器,这些服务器中的文件相同。文件卷中的服务器相互备份,所有这些服务器都是负载均衡的。将存储服务器添加到卷时,此卷中已有的文件将自动复制到此新服务器,复制完成后,系统将联机切换此服务器以提供存储服务。

当整个存储容量不足时,可以添加一个或多个卷以扩展存储容量。为此,您需要添加一个或多个存储服务器。

Storage server会连接集群中所有的Tracker server,定时向他们报告自己的状态,包括磁盘剩余空间、文件同步状况、文件上传下载次数等统计信息。

tracker 和 storage 包含一个或多个服务器。

用户列表

UC

无限容量分布式文件存储解决方案

支付宝

无限容量分布式文件存储解决方案

京东商城

无限容量分布式文件存储解决方案

赶集网

无限容量分布式文件存储解决方案

迅雷

无限容量分布式文件存储解决方案

除此之外,还有 58 同城等等。

FastDFS 架构

Client为使用FastDFS服务的调用方,并且也是一台服务器,它对tracker和storage的调用均为服务器间的调用。存储服务器采用分组方式,同组内的存储服务器上的文件完全相同。不同组的storage server之间不会相互通信。由storage server主动向tracker server报告状态信息,tracker server之间不会相互通信。

无限容量分布式文件存储解决方案

上传交互过程

  1. client询问tracker上传到的storage,不需要附加参数;
  2. tracker返回一台可用的storage;
  3. client直接和storage通讯完成文件上传。

客户端上传文件后,存储服务器将 文件ID 返回给客户端,此文件ID用于以后访问该文件的索引信息。

文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。

**组名:**文件上传后所在的storage组名称,在文件上传成功后由storage服务器返回,需要客户端自行保存。

**虚拟磁盘路径:**storage配置的虚拟路径,与磁盘选项store_path对应。如果配置了store_path0,则虚拟路径是M00,如果配置了store_path1,则虚拟路径是M01,以此类推。

**数据两级目录:**storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。

**文件名:**与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。

下载交换过程

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

tracker 通过组名/卷名能够很快的定位到客户端需要访问的存储服务器组,并选择合适的存储服务器提供客户端访问。

storage 根据“文件存储虚拟磁盘路径”和“数据文件两级目录”可以很快定位到文件所在目录,并根据文件名找到客户端需要访问的文件。

文件的标识由两部分组成:卷名和文件名,二者缺一不可。

FastDFS 搭建

部署规划

无限容量分布式文件存储解决方案

部署程序 集群/组 主机名称/IP 描述
tracker 1 tracker cluster linux30/192.168.10.30 tracker 高可用
tracker 2 tracker cluster linux31/192.168.10.31 tracker 高可用
storage 1 storage server group 1 linux32/192.168.10.32 storage 线性扩展
storage 2 storage server group 1 linux33/192.168.10.33 storage 线性扩展
storage 3 storage server group 2 linux34/192.168.10.34 storage 线性扩展
storage 4 storage server group 2 linux35/192.168.10.35 storage 线性扩展

由于使用Nginx提供文件的浏览访问功能,同时也需要安装Nginx服务。

环境准备

JDK1.8 安装

可以通过如下命令查看是否已经安装 JDK1.8 版本

[root@linux30 ~]# java -version

无限容量分布式文件存储解决方案

Apache Maven 3.6.1 安装

可以通过如下命令查看是否已经安装 Maven

[root@linux30 ~]# mvn -v

无限容量分布式文件存储解决方案

Git 安装

可以通过如下命令查看是否已经安装 Git

[root@linux30 ~]# git --version

无限容量分布式文件存储解决方案

FastDFS 源码

FastDFS是C语言开发,所以我们需要去FastDFS官网下载源码进行编译

[root@linux30 ~]# mkdir -p /opt/projects/
[root@linux30 ~]# cd /opt/projects/
[root@linux30 projects]# git clone https://github.com/happyfish100/fastdfs.git

无限容量分布式文件存储解决方案

如果由于网络问题导致无法使用git下载源码,则手动到官方地址下载压缩包 fastdfs-6.08.tar.gz

无限容量分布式文件存储解决方案

安装FastDFS需要编译依赖gcc环境,如果没有gcc环境,需要安装gcc

[root@linux30 projects]# yum install gcc-c++
libevent 安装

FastDFS依赖libevent库,安装命令如下:

[root@linux30 projects]# yum -y install libevent

无限容量分布式文件存储解决方案

libfastcommon 安装

libfastcommon是FastDFS官方提供的,libfastcommon包含了FastDFS运行所需要的一些基础库。下载 libfastcommon-1.0.58.tar.gz安装包,进行解压

[root@linux30 projects]# tar -zxvf libfastcommon-1.0.58.tar.gz

无限容量分布式文件存储解决方案

[root@linux30 libfastcommon-1.0.58]# ./make.sh
[root@linux30 libfastcommon-1.0.58]# ./make.sh install

无限容量分布式文件存储解决方案

安装Tracker

tracker 编译安装
[root@linux30 fastdfs-6.08]# cd /opt/projects/fastdfs-6.08
[root@linux30 fastdfs-6.08]# ./make.sh
[root@linux30 fastdfs-6.08]# ./make.sh install

无限容量分布式文件存储解决方案

配置 tracker.conf
[root@linux30 fdfs]# cd /etc/fdfs/
[root@linux30 fdfs]# vi tracker.conf
base_path = /tmp/fastdfs/tracker
启动 tracker
[root@linux30 fdfs]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
[root@linux30 fdfs]# ps -ef | grep fdfs

无限容量分布式文件存储解决方案

安装Storage

启动 linux32/192.168.10.32 虚拟机,同样需要安装 libevent、libfastcommon-1.0.58.tar.gz 以及下载 fastdfs-6.08.tar.gz 安装包,安装方法同Tracker。

无限容量分布式文件存储解决方案

Strorage 编译安装
[root@linux32 fastdfs-6.08]# cd /opt/fastdfs/fastdfs-6.08/
[root@linux32 fastdfs-6.08]# ./make.sh
[root@linux32 fastdfs-6.08]# ./make.sh install

无限容量分布式文件存储解决方案

当我们在编译过程中遇到如下报错时,是因为系统中缺少相关的运行环境,所以需要执行以下命令后,再重新编译安装

无限容量分布式文件存储解决方案

## 安装运行环境
[root@linux32 fastdfs-6.08]# yum -y install gcc gcc-c++ openssl openssl-devel pcre pcre-devel perl 
## 清空编译代码
[root@linux32 fastdfs-6.08]# ./make.sh clean
## 重新编译、安装
[root@linux32 fastdfs-6.08]# ./make.sh
[root@linux32 fastdfs-6.08]# ./make.sh install
配置 storage.conf
[root@linux32 fdfs]# vi /etc/fdfs/storage.conf
## 存储数据和日志文件的目录
base_path = /tmp/fastdfs/storage
## 基于0,存储文件
store_path0 = /tmp/fastdfs/storage/files
## tracker_server地址,
tracker_server = 192.168.10.30:22122
## 创建 base path, store path
[root@linux32 fastdfs]# mkdir -p /tmp/fastdfs/storage/files
启动 storage
[root@linux32 fdfs]# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
[root@linux32 fdfs]# ps -ef | grep fdfs

无限容量分布式文件存储解决方案

启动失败,查看日志如下:

[root@linux32 fdfs]# cd /opt/fastdfs/storage/
[root@linux32 storage]# cat logs/storaged.log

无限容量分布式文件存储解决方案

需要创建 data 目录

[root@linux32 storage]# mkdir -p /opt/fastdfs/storage/files/data
[root@linux32 storage]# fdfs_storaged /etc/fdfs/storage.conf restart
[root@linux32 storage]# ps -ef | grep fdfs

无限容量分布式文件存储解决方案

使用 FastDFS

Client 上传文件

编辑 /etc/fdfs/client.conf 文件

[root@linux30 fdfs]# vi /etc/fdfs/client.conf
## 存储客户端日志的基础路径
base_path = /tmp/fastdfs/client
## tracker server 的地址

tracker_server = 192.168.10.30:22122
## 创建 client 目录
[root@linux30 fdfs]# mkdir -p /tmp/fastdfs/client

创建 test 测试文件

[root@linux30 fdfs]# vi test.txt
My name is 大都督
This is a test file.

无限容量分布式文件存储解决方案

使用 fdfs_test 命令上传文件,其使用方法如图所示

无限容量分布式文件存储解决方案

执行上传文件命令

[root@linux30 fdfs]# fdfs_test /etc/fdfs/client.conf upload test.txt

无限容量分布式文件存储解决方案

返回的结果如下:

## 组名称
group_name=group1
## 远程文件名
remote_filename=M00/00/00/wKgKIGK-gTuAMA0UAAAAKibWwMI239.txt
Client 下载文件

语法:fdfs_test <config_file> download <group_name> <remote_filename>

执行如下命令下载文件

[root@linux30 fdfs]# fdfs_test /etc/fdfs/client.conf download group1 M00/00/00/wKgKIGK-gTuAMA0UAAAAKibWwMI239.txt

无限容量分布式文件存储解决方案

Client 删除文件

语法:fdfs_test <config_file> delete <group_name> <remote_filename>

执行如下命令删除文件

[root@linux30 fdfs]# fdfs_test /etc/fdfs/client.conf delete group1 M00/00/00/wKgKIGK-gTuAMA0UAAAAKibWwMI239.txt

无限容量分布式文件存储解决方案

登录 storage 服务器(linux32/192.168.10.32),查看是否删除成功

[root@linux32 00]# cd /tmp/fastdfs/storage/files/data/00/00
[root@linux32 00]# ll

无限容量分布式文件存储解决方案

确实已经将 wKgKIGK-gTuAMA0UAAAAKibWwMI239.txt 文件删除了,但还有一个备份文件,我们能不能在浏览器访问一下呢?记得之前返回响应是:

example file url: http://192.168.10.32/group1/M00/00/00/wKgKIGK-gTuAMA0UAAAAKibWwMI239_big.txt

无限容量分布式文件存储解决方案

无法访问此网站,所以我们需要安装 Nginx

安装 Nginx

在 storage 中安装 Nginx

找到 Nginx下载网址,下载 相应的安装包,这里我们选择 nginx-1.23.0.tar.gz安装包,上传到 linux32 服务器,解压缩

[root@linux32 opt]# tar -zxvf nginx-1.23.0.tar.gz

无限容量分布式文件存储解决方案

在编译安装 Nginx 之前,需要下载 fastdfs-nginx-module 模块,下载成功后,上传至linux32服务器,并解压

无限容量分布式文件存储解决方案

接下来,可以编译安装 Nginx

[root@linux32 nginx-1.23.0]# ./configure --prefix=/opt/fastdfs/fdfs-nginx --add-module=/opt/fastdfs/fastdfs-nginx-module-1.22/src
[root@linux32 nginx-1.23.0]# make
[root@linux32 nginx-1.23.0]# make install
[root@linux32 fdfs-nginx]# cd /opt/fastdfs/fdfs-nginx/
[root@linux32 fdfs-nginx]# ./sbin/nginx -t

无限容量分布式文件存储解决方案

配置 conf/nginx.conf 文件,添加如下内容

        location /group1/M00 {
            ngx_fastdfs_module;
        }

测试配置没问题

无限容量分布式文件存储解决方案

在启动 Nginx 之前,还需要配置 mod_fastdfs.conf 文件

## 拷贝一份 mod_fastdfs.conf 配置文件到 /etc/fdfs 目录下
[root@linux32 src]# cp /opt/fastdfs/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf /etc/fdfs/
[root@linux32 src]# vi /etc/fdfs/mod_fastdfs.conf
## 设置存储日志的基础目录
base_path=/tmp/fastdfs/fastdfs-mod
## tracker server 的地址
tracker_server=192.168.10.30:22122
## url 中存在group name,需要设置为 true !!!
url_have_group_name = true
## 存储路径必须和storage.conf文件中相同
store_path0=/tmp/fastdfs/storage/files
## 放开http配置文件
include http.conf
http.mime_types_filename=/opt/fastdfs/fdfs-nginx/conf/mime.types
http.default_content_type=application/octet-stream

启动 Nginx

[root@linux32 fdfs-nginx]# ./sbin/nginx
[root@linux32 fdfs-nginx]# ps -ef|grep nginx

无限容量分布式文件存储解决方案

再次访问

example file url: http://192.168.10.32/group1/M00/00/00/wKgKIGK-gTuAMA0UAAAAKibWwMI239_big.txt

无限容量分布式文件存储解决方案

访问 linux32/192.168.10.32 storage 服务成功获取到数据,但是访问 tracker 服务时失败,而在我们使用 FastDFS分布式文件系统时,通常我们会连接到 tracker 去获取数据,所以讲 example file url 中 IP 地址修改为 tracker 所在服务时,即:http://192.168.10.30/group1/M00/00/00/wKgKIGLBE9CAAMlcAAAAKibWwMI230.txt , 发现无法访问,如下图,所以我们需要在 tracker 中同样安装 Nginx,以实现负载均衡和数据的访问功能

无限容量分布式文件存储解决方案

在 tracker 中安装 Nginx

将 Nginx安装包上传至linux30服务器,并解压到 /opt 目录下,执行编译安装

## 编译 Nginx
[root@linux30 nginx-1.23.0]# ./configure --prefix=/opt/fastdfs/fdfs_nginx
[root@linux30 nginx-1.23.0]# make
[root@linux30 nginx-1.23.0]# make install
[root@linux30 nginx-1.23.0]# cd /opt/fastdfs/fdfs_nginx && ll

无限容量分布式文件存储解决方案

配置 nginx.conf,添加如下内容

[root@linux30 fdfs_nginx]# vi conf/nginx.conf

        upstream storage_servers {
            server 192.168.10.32:80;
        }

        location /group1/M00 {
            proxy_pass  http://storage_servers;
        }

启动 Nginx

[root@linux30 fdfs_nginx]# ./sbin/nginx
[root@linux30 fdfs_nginx]# ps -ef|grep nginx

无限容量分布式文件存储解决方案

刷新浏览器,再次访问

http://192.168.10.30/group1/M00/00/00/wKgKIGLBE9CAAMlcAAAAKibWwMI230.txt

无限容量分布式文件存储解决方案

Spring Boot 整合 FastDFS

FastDFS java client SDK

使用maven从源码安装

下载源码到本地磁盘(E:\project),执行 git clone 命令

E:\project>git clone https://github.com/happyfish100/fastdfs-client-java.git

无限容量分布式文件存储解决方案

使用maven命令打成jar包

E:\project\fastdfs-client>mvn clean package

无限容量分布式文件存储解决方案

安装到maven仓库

E:\project\fastdfs-client>mvn install:install-file -DgroupId=org.csource -DartifactId=fastdfs-client -Dversion=v1.0 -Dpackaging=jar -Dfile=target/fastdfs-client-java-1.29-SNAPSHOT.jar

创建 Spring Boot 项目

在您的maven项目pom.xml中添加依赖

<dependency>
    <groupId>org.csource</groupId>
    <artifactId>fastdfs-client</artifactId>
    <version>v1.0</version>
</dependency>

创建 fastdfs-client.properties 配置文件

######## FastDFS ######
fastdfs.connect_timeout_in_seconds=5
fastdfs.network_timeout_in_seconds=30
fastdfs.charset=UTF-8
fastdfs.http_anti_steal_token=false
# fastdfs.http_secret_key=FastDFS1234567890
fastdfs.http_tracker_http_port=80
fastdfs.tracker_servers=192.168.10.30:22122
# fastdfs.tracker_servers=10.0.11.201:22122,10.0.11.202:22122,10.0.11.203:22122
fastdfs.connection_pool.enabled=true
fastdfs.connection_pool.max_count_per_entry=500
fastdfs.connection_pool.max_idle_time=3600
fastdfs.connection_pool.max_wait_time_in_ms=1000

初始化 fastdfs-client.properties 配置文件、启动

无限容量分布式文件存储解决方案

文件的上传

无限容量分布式文件存储解决方案

文件的下载

无限容量分布式文件存储解决方案

文件的删除

无限容量分布式文件存储解决方案

总结

对于文件的操作需要使用 StorageClient,StorageClient的构造函数需要 TrackerServer 和 StorageServer,所以,我们首先通过加载配置文件,获取到 TrackerClient,再通过 TrackerClient获取 TrackerServer 和 StorageServer,最后通过 StorageClient 实现对文件的管理。

FastDFS高级特性

FastDFS 集群

上面介绍的FastDFS分布式文件系统还不满足高可用,没有对数据进行备份存储,存在单点故障问题。所以,接下来,我们需要真正的部署FastDFS的集群,实现FastDFS的高可用。并对其存储过程中的配置,特性进行详细分析。

FastDFS 集群部署

集群的架构图如下:

无限容量分布式文件存储解决方案

检查每台服务器是否已经下载了压缩包 fastdfs-6.08.tar.gz和必须的基础库 libfastcommon-1.0.58.tar.gz。

首先检查linux31(192.168.10.31)节点,需要下载FastDFS源码,创建项目目录:

## 创建项目目录
[root@linux31 opt]# mkdir -p /opt/projects
## 进入目录后,上传压缩包到该目录
[root@linux31 projects]# cd /opt/projects/
[root@linux31 projects]# ll
总用量 1024
-rw-r--r--. 1 root root 809448 8月  23 10:56 fastdfs-6.08.tar.gz
-rw-r--r--. 1 root root 235779 8月  23 10:56 libfastcommon-1.0.58.tar.gz
## 解压缩
[root@linux31 projects]# tar -zxvf fastdfs-6.08.tar.gz
[root@linux31 projects]# tar -zxvf libfastcommon-1.0.58.tar.gz

无限容量分布式文件存储解决方案

linux32节点之前安装过storage,无需重复下载。

无限容量分布式文件存储解决方案

重复上述步骤,在linux33(192.168.10.33)和linux34(192.168.10.34)服务器分别创建项目目录,上传源码

无限容量分布式文件存储解决方案

无限容量分布式文件存储解决方案

在编译之前,需要安装FastDFS依赖的环境,在每台服务器分别执行如下操作

[root@linux30 projects]# yum install gcc gcc-c++ libevent openssl openssl-devel pcre pcre-devel perl
[root@linux31 projects]# yum install gcc gcc-c++ libevent openssl openssl-devel pcre pcre-devel perl
[root@linux32 fastdfs]# yum install gcc gcc-c++ libevent openssl openssl-devel pcre pcre-devel perl
[root@linux33 projects]# yum install gcc gcc-c++ libevent openssl openssl-devel pcre pcre-devel perl
[root@linux34 projects]# yum install gcc gcc-c++ libevent openssl openssl-devel pcre pcre-devel perl

无限容量分布式文件存储解决方案

接下来,在每台服务器分别进行编译、安装

linux30:

## 进入基础库目录,执行如下命令进行编译、安装
[root@linux30 libfastcommon-1.0.58]# ./make.sh
[root@linux30 libfastcommon-1.0.58]# ./make.sh install

## 进入fastdfs-6.08根目录,进行编译、安装
[root@linux30 fastdfs-6.08]# ./make.sh
[root@linux30 fastdfs-6.08]# ./make.sh install

linux31、linux32、linux33、linux34分别执行上述操作,进行编译、安装

无限容量分布式文件存储解决方案

安装成功之后,分别对 tracker 和 storage 进行配置,我们先配置 tracker

linux30节点:

## 配置 tracker.conf
[root@linux30 fdfs]# vi /etc/fdfs/tracker.conf
# 只需修改基础路径配置即可
base_path = /tmp/fastdfs/tracker

linux31节点:

配置 tracker.conf

[root@linux31 fastdfs-6.08]# vi /etc/fdfs/tracker.conf
base_path = /tmp/fastdfs/tracker


对于linux32、linux33、linux34作为storage,需要配置 /etc/fdfs目录下的 storage.conf

linux32和linux33属于同一个组 group1,分别修改配置文件如下:

[root@linux32 fdfs]# vi /etc/fdfs/storage.conf
base_path = /tmp/fastdfs/storage
store_path0 = /tmp/fastdfs/storage/files

# 集群配置
tracker_server = 192.168.10.30:22122
tracker_server = 192.168.10.31:22122

linux34的配置略有不同,配置如下:

[root@linux34 fdfs]# vi /etc/fdfs/storage.conf
# 组名为group2
group_name = group2
base_path = /tmp/fastdfs/storage
store_path0 = /tmp/fastdfs/storage/files
tracker_server = 192.168.10.30:22122
tracker_server = 192.168.10.31:22122

启动集群:

在linux30服务器启动tracker

[root@linux30 fdfs]# fdfs_trackerd /etc/fdfs/tracker.conf start

无限容量分布式文件存储解决方案

启动失败,启动前需要创建目录

[root@linux30 fdfs]# mkdir -p /tmp/fastdfs/tracker

再次启动,成功

无限容量分布式文件存储解决方案

在linux31服务器启动tracker

无限容量分布式文件存储解决方案

接下来启动 linux32、linux33、linux34服务器的storage

在linux32节点启动storage

[root@linux32 fdfs]# fdfs_storaged /etc/fdfs/storage.conf start

出现如下报错信息,需要提前创建目录

无限容量分布式文件存储解决方案

[root@linux32 fdfs]# mkdir -p /tmp/fastdfs/storage
[root@linux32 fdfs]# mkdir -p /tmp/fastdfs/storage/files

再次启动,成功

无限容量分布式文件存储解决方案

除此之外,linux33、linux34服务器的storage启动方式和上述操作步骤相同,这里不再赘述。

无限容量分布式文件存储解决方案

无限容量分布式文件存储解决方案

集群环境已经搭建成功,接下来启动 FastDFS客户端,上传文件测试:

无限容量分布式文件存储解决方案

文件上传成功,当我们频繁上传几次文件时,依然会将文件上传到组 group1,这是为什么呢?

此时需要查看 linux30服务器的tracker.conf配置情况:

无限容量分布式文件存储解决方案

如果想实现负载均衡,轮询的效果,该如何实现呢?

FastDFS 集群负载均衡

修改 linux30(192.168.10.30)和 linux31(192.168.10.31)服务器的tracker.conf配置文件,配置如下:

vi /etc/fdfs/tracker.conf

store_lookup = 0

无限容量分布式文件存储解决方案

重启两台 tracker服务

fdfs_trackerd /etc/fdfs/tracker.conf restart

无限容量分布式文件存储解决方案

修改配置文件,只让客户端连接到一台tracker

fastdfs.tracker_servers=192.168.10.30:22122

无限容量分布式文件存储解决方案

如果连接两台tracker,则在两个tracker之间会出现轮询的现象,不易发现文件上传时的负载均衡效果。

启动客户端服务,多次上传文件后,出现轮询效果,如图:

无限容量分布式文件存储解决方案

除此之外,如果想指定组进行上传,就容易多了。往下看…

FastDFS 集群指定组

这次,我们只修改 linux31(192.168.10.31)服务器的 tracker.conf 配置文件

无限容量分布式文件存储解决方案

重启tracker

[root@linux31 ~]# fdfs_trackerd /etc/fdfs/tracker.conf restart

无限容量分布式文件存储解决方案

修改客户端配置文件,连接到 linux31节点的tracker进行测试

无限容量分布式文件存储解决方案

测试成功,所有的文件都上传到了组group2

无限容量分布式文件存储解决方案

打开浏览器,选择上传成功的文件,拼接连接地址如下:

http://192.168.10.31/group2/M00/00/00/wKgKImMEf2mAM-SIAAAAEj1ApV0947.txt

无限容量分布式文件存储解决方案

无法访问此网站,所以接下来,需要安装 Nginx

安装Nginx

大家要注意,在每台服务器上安装的Nginx的作用略有不同。其中,linux30、linux31中的Nginx为负载均衡功能,linux32、linux33、linux34服务器中的Nginx会使用扩展模块访问文件。所以,在安装Nginx时,linux30、linux31可以直接上传 nginx-1.23.0.tar.gz安装包。而linux32、linux33、linux34三台服务器除此之外,还需要上传扩展 fastdfs-nginx-module 模块。

在linux30、linux31节点上传Nginx安装包并解压

无限容量分布式文件存储解决方案

在linux32、linux33、linux34上传Nginx安装包和扩展模块。解压缩后,如图所示:

无限容量分布式文件存储解决方案

在linux30、linux31节点编译、安装Nginx

[root@linux31 nginx-1.23.0]# ./configure --prefix=/opt/fastdfs/fdfs_nginx
[root@linux31 nginx-1.23.0]# make
[root@linux31 nginx-1.23.0]# make install
[root@linux31 nginx-1.23.0]# cd ../fastdfs/fdfs_nginx/

无限容量分布式文件存储解决方案

接下来在linux32、linux33、linux34编译、安装Nginx安装包和扩展模块

[root@linux33 nginx-1.23.0]# ./configure --prefix=/opt/fastdfs/fdfs_nginx --add-module=/opt/fastdfs/fastdfs-nginx-module-1.22/src
[root@linux33 nginx-1.23.0]# make
[root@linux33 nginx-1.23.0]# make install
[root@linux33 fdfs_nginx]# cd /opt/fastdfs/fdfs_nginx

无限容量分布式文件存储解决方案

至此,Nginx的编译、安装部分已经完成

配置Nginx:

在linux30、linux31节点分别配置 conf/nginx.conf

[root@linux30 fdfs_nginx]# vi conf/nginx.conf

location ~ /group[1-9]/M0[0-9] {
    proxy_pass  http://storage_servers;
}
upstream storage_servers {
    server 192.168.10.32:80;
    server 192.168.10.33:80;
    server 192.168.10.34:80;
}

启动nginx

[root@linux30 fdfs_nginx]# ./sbin/nginx
[root@linux30 fdfs_nginx]# ps -ef|grep nginx

无限容量分布式文件存储解决方案

接下来在linux32、linux33、linux34节点分别配置 conf/nginx.conf

[root@linux33 fdfs-nginx]# vi conf/nginx.conf

        location ~ /group[1-9]/M0[0-9] {
            ngx_fastdfs_module;
        }

执行如下命令,将扩展模块中的 mod_fastdfs.conf,拷贝到 /etc/fdfs/ 目录下

[root@linux33 src]# cp /opt/fastdfs/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf /etc/fdfs/
[root@linux33 src]# cd /etc/fdfs/
[root@linux33 fdfs]# vi mod_fastdfs.conf
base_path=/tmp/fastdfs/mod-fastdfs
tracker_server=192.168.10.30:22122
tracker_server=192.168.10.31:22122
url_have_group_name = true
store_path0=/tmp/fastdfs/storage/files

include http.conf
http.mime_types_filename=/opt/fastdfs/fdfs-nginx/conf/mime.types
http.default_content_type=application/octet-stream

group_count = 2

[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/tmp/fastdfs/storage/files

[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/tmp/fastdfs/storage/files

linux32和linux33属于同一个组group1,所以上面的配置也适合linux32。

linux34属于组group2,所以只需修改组的名称即可

[root@linux34 fdfs]# vi mod_fastdfs.conf
# the group name of the local storage server
group_name=group2

启动nginx

[root@linux34 fdfs_nginx]# ./sbin/nginx
[root@linux34 fdfs_nginx]# ps -ef|grep nginx

无限容量分布式文件存储解决方案

再次访问浏览器,访问成功

无限容量分布式文件存储解决方案

Tracker的高可用,轮询方式

同组内的存储服务器是负载均衡的

扩缩容的实现

数据的安全可靠文章来源地址https://www.toymoban.com/news/detail-514368.html

到了这里,关于无限容量分布式文件存储解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 分布式文件存储系统-FastDFS

            前言:FastDFS 是一个分布式文件存储系统, 主要用于存储和管理 大规模 的 文件数据,如图片、视频、文档等 ,是淘宝前架构师为了存储图片用C语言开发出来的系统。         服务端有两个组件  Tracker Server 与 Storage Server ,对应两个角色: Tracker: 管理和调度集群

    2024年02月13日
    浏览(67)
  • 如何模拟实现分布式文件存储

    传统做法是是在宕机存储。但随着数据变多,会遇到存储瓶颈 单机纵向扩展:内存不够加内存,磁盘不够家磁盘。有上限限制,不能无限制加下去 多机横向扩展:采用 多台机器存储 ,一台不够就加机器。理论上可以无线 多台机器存储也就意味迈入了 分布式存储 当文件被分

    2024年02月16日
    浏览(47)
  • 第6章 分布式文件存储

    分布式文件存储 1、理解Oauth2.0的功能作模式 2、实现mini商城项目的权限登录 1、了解文件存储系统的概念 2、了解常用文件服务器的区别 3、掌握Minio的应用 官网:

    2024年02月12日
    浏览(35)
  • 分布式文件存储MinIO-监控

    MinIO自身提供了关于集群状态和操作的相关的Prometheus SQL指标与支持Prometheus数据模型的监控指标收集工具进行搭配使用,无论是主机部署亦或是云上部署都可以进行集成。官方选定的第三方监控软件为Prometheus和InfluxDB,使用者可以根据各自公司对于监控设施的建设进行选择。

    2024年02月11日
    浏览(53)
  • OSS文件上传、MinIO分布式文件存储系统

    阿里云OSS上传图片 实现步骤: 1. 定义OSS相关配置 application-dev.yml application.yml 2. 读取OSS配置 在sky-common模块中,已定义 3. 生成OSS工具类对象 在sky-server模块 其中,AliOssUtil.java已在sky-common模块中定义 4. 定义文件上传接口 在sky-server模块中定义接口 MinIO分布式文件存储系统 MinI

    2024年01月24日
    浏览(45)
  • Zookeeper的分布式文件系统与存储

    Zookeeper是一个开源的分布式协调服务,它为分布式应用提供一致性、可靠性和可扩展性等特性。Zookeeper的核心功能包括集群管理、配置管理、领导选举、分布式同步等。在分布式系统中,文件系统和存储是非常关键的组成部分,Zookeeper作为分布式协调服务,也可以用于管理和

    2024年02月20日
    浏览(65)
  • 淘宝分布式文件存储系统( 三 ) -TFS

    目录 : 文件重新映射的接口介绍 文件映射 mmap_file.cpp的实现 进行测试 文件重新映射 (增加 或者 减少 文件映射区域的大小) mremap() 函数的原型如下 #include sys/mman.h void *mremap( void * old_address , size_t old_size , size_t new_size , int flags ); 参数说明 : old_address :指向原映射区域的起始地

    2024年02月07日
    浏览(40)
  • 淘宝分布式文件存储系统( 二 ) -TFS

    淘宝分布式文件存储系统( 二 ) -TFS 目录 : 大文件存储结构 哈希链表的结构 文件映射原理及对应的API 文件映射头文件的定义 大文件存储结构 : 采用块(block)文件的形式对数据进行存储 , 分成索引块,主块 , 扩展块 。所有的小文件都是存放到主块中的 ,扩展块用来保存溢出的数

    2024年02月07日
    浏览(33)
  • Springboot整合fastdfs-分布式文件存储

    一、快速开始 1、添加依赖 2、添加配置项 3、新建 fdfs_client.conf(可忽略) 2、FastDFS客户端工具

    2024年02月11日
    浏览(42)
  • 分布式文件存储与数据缓存 FastDFS

    单机时代 初创时期由于时间紧迫,在各种资源有限的情况下,通常就直接在项目目录下建立静态文件夹,用于用户存放项目中的文件资源。如果按不同类型再细分,可以在项目目录下再建立不同的子目录来区分。例如: resourcesstaticfile 、 resourcesstaticimg 等。 优点 :便利,

    2024年02月16日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包