FastDFS集群搭建及StringBoot整合

news2024/11/25 14:39:45

简介

FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。
存储节点存储文件,完成文件管理的所有功能:就是这样的存储、同步和提供存取接口,FastDFS同时对文件的metadata进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key value)方式表示,如:width=1024,其中的key为width,value为1024。文件metadata是文件属性列表,可以包含多个键值对。
跟踪器和存储节点都可以由一台或多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。
为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。
在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。
当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。
FastDFS中的文件标识分为两个部分:卷名和文件名,二者缺一不可。
在这里插入图片描述

环境准备
1.JDK1.8 安装(已安装请忽略),通过如下命令查看是否已经安装

java -version

下载地址

https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
账号密码:(网友分享,也可以自己注册,用于下载JDK)
Oracle Account: 602205528@qq.com
Oracle Password:Hkk.520.1314
在这里插入图片描述

在linux服务上创建jdk安装的目录

mkdir  /usr/java #创建jdk安装路径
cd /usr/java #进入java安装目录

通过xftp将压缩包传输到新创建的目录下/usr/java

tar -zxvf  jdk-8u371-linux-x64.tar.gz   #对压缩包解压

配置环境变量

vim /etc/profile

shift + i 进入insert 编辑模式
在文件末尾添加

JAVA_HOME=/usr/java/jdk1.8.0_371
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH

在这里插入图片描述
重新加载配置文件

source /etc/profile

验证jdk是否安装成功

java -version

在这里插入图片描述
2. Apache Maven 安装(已安装请忽略)
通过如下命令查看是否已经安装 Maven

mvn -v

在linux服务上创建maven安装的目录
(这里建议用老一点的版本,比较稳定,最开始下了3.9.1,3.8.6,依赖一直拉不下来,最后下了3.3.9,镜像库是用的阿里云镜像库,但是阿里云镜像库有很多种版本,在网上查了很多解决方案,最后的出一个结论maven大版本对应的阿里云镜像库是不同的,如果配置错误就会导致依赖拉不下来,不过没有去验证,没必要在maven配置上浪费太多时间,能用就好了)

mkdir  /usr/maven #创建maven安装路径
cd /usr/maven #进入maven 安装目录

## 下载
wget https://archive.apache.org/dist/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz

## 解压
tar -zxvf apache-maven-3.3.9-bin.tar.gz

修改Maven阿里云镜像(shell上操作不方便可以用xftp拉到本地修改后再上传)

vi /usr/maven/apache-maven-3.3.9/conf/settings.xml

## 添加下面配置
 <mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>

配置maven环境变量

vi /etc/profile

添加到末尾

export MAVEN_HOME=/opt/home/apache-maven-3.8.6
export PATH=$PATH:$MAVEN_HOME/bin

重新加载

source /etc/profile
#测试
mvn -v

Git 安装

## 通过如下命令查看是否已经安装 Git
git --version

## 安装git
yum install -y git

FastDFS 源码

官网: https://github.com/happyfish100
在这里插入图片描述
创建一个fastdfs 路径 下载下载压缩包到当前路径
远程拉取失败的话,可以到官网手动下载并上传压缩包

mkdir -p /usr/local/fastdfs/
cd /usr/local/fastdfs/

## wget方式下载
wget https://github.com/happyfish100/fastdfs/archive/refs/tags/V6.06.tar.gz

解压
tar -zxvf V6.06.tar.gz

在这里插入图片描述
安装FastDFS需要编译依赖gcc环境,如果没有gcc环境,需要安装gcc

yum install gcc-c++

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

yum -y install libevent

libfastcommon 安装
libfastcommon是FastDFS官方提供的,libfastcommon包含了FastDFS运行所需要的一些基础库。

##进入安装目录
cd /usr/local/fastdfs/
##下载压缩包
wget https://github.com/happyfish100/libfastcommon/archive/refs/tags/V1.0.58.tar.gz
##解压
tar -zxvf V1.0.58.tar.gz
## 进入解压目录
cd /usr/local/fastdfs/libfastcommon-1.0.58
##编译
./make.sh
##安装
./make.sh install

安装Tracker

tracker 编译安装

yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
## 进入到解压目录
cd /usr/local/fastdfs/fastdfs-6.06

编译安装
./make.sh
./make.sh install

编译安装后会再/uer/bin 目录下生成fafs相关的命令

cd /usr/bin
ll fdfs*    # 查看所有以fdfs开头的内容

在这里插入图片描述
配置 tracker.conf

## 创建tracker目录
[root@VM-12-6-centos fastdfs-6.06]# mkdir -p /data/fastdfs/tracker

## 切换到/etc/fdfs/目录
[root@VM-12-6-centos fastdfs-6.06]# cd /etc/fdfs/

## 修改 tracker.conf 文件
[root@VM-12-6-centos fdfs]# vi tracker.conf

## 修改base_path的路径
base_path = /data/fastdfs/tracker

启动 tracker

## 启动
[root@VM-12-6-centos fdfs]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start

## 停止
[root@VM-12-6-centos fdfs]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf stop

## 重启
[root@VM-12-6-centos fdfs]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

## 查看进程
[root@linux1 fdfs]# ps -ef | grep fdfs

安装Storage (在另一台服务器或虚拟机上搭建相同的环境,Strorage 与 Tracker 不同的地方配置文件的配置不同,同上)

同样需要安装 libevent、libfastcommon-1.0.58.tar.gz 以及下载 fastdfs-6.06.tar.gz 安装包,安装方法同Tracker。
Strorage 编译安装

yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
## 切换/usr/local/fastdfs/fastdfs-6.08目录
[root@VM-12-7-centos fastdfs-6.06]# cd /usr/local/fastdfs/fastdfs-6.06

## 编译安装
[root@VM-12-7-centos fastdfs-6.06]# ./make.sh
[root@VM-12-7-centos fastdfs-6.06]# ./make.sh install

配置 storage.conf

## 创建 base path, store path
[root@VM-12-7-centos fastdfs-6.06]# mkdir -p /data/fastdfs/storage/files
[root@VM-12-7-centos fastdfs-6.06]# mkdir -p /data/fastdfs/storage/logs
[root@VM-12-7-centos fastdfs-6.06]# vi /etc/fdfs/storage.conf

## 存储数据和日志文件的目录
base_path = /data/fastdfs/storage/logs
## 基于0,存储文件
store_path0 = /data/fastdfs/storage/files
## tracker_server地址,多台 tracker_server 服务配置多个地址
tracker_server = 192.168.2.133:22122
#tracker_server = 192.168.209.122:22122

启动 storage

## 启动
[root@VM-12-7-centos fastdfs-6.06]# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf start

## 停止
[root@VM-12-7-centos fastdfs-6.06]# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf stop

## 重启
[root@VM-12-7-centos fastdfs-6.06]# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

## 查看进程
[root@VM-12-7-centos fastdfs-6.06]# ps -ef | grep fdfs
## 查看日志
[root@VM-12-7-centos fastdfs-6.06]# cd /data/fastdfs/storage/logs
[root@VM-12-7-centos logs]# cat storaged.log

在Tracker服务配置客户端日志

## 创建 client 目录
[root@VM-12-6-centos fdfs]# mkdir -p /data/fastdfs/client

## 编辑配置文件
[root@VM-12-6-centos fdfs]# vi /etc/fdfs/client.conf

## 存储客户端日志的基础路径
base_path = /data/fastdfs/client

## tracker server 的地址 多台 tracker_server 服务配置多个地址
tracker_server = 192.168.2.133:22122
#tracker_server = 192.168.0.101:22122

测试

#任意创建一个路径上传一个文件或新建一个txt文件都可以用来作为上传的内容
mkdir /usr/local/fastdfs/test
进入路径
cd /usr/local/fastdfs/test

我这里通过XFTP上传了一张图片
在这里插入图片描述
通过命令上传文件

[root@VM-12-6-centos test]# fdfs_test /etc/fdfs/client.conf upload kaven.png

返回

[2023-05-10 17:24:53] DEBUG - base_path=/usr/local/fastdfs/fastdfs-6.06/client, connect_timeout=5, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s, use_storage_id=0, storage server id count: 0

tracker_query_storage_store_list_without_group: 
	server 1. group_name=, ip_addr=192.168.2.133, port=23000
group_name=group1, ip_addr=192.168.2.133, port=23000
storage_upload_by_filename
group_name=group1, remote_filename=M00/00/00/AQz5S2RbYuWAWS2-AAAt1Ka3Hzc043.png
source ip address: 192.168.2.133
file timestamp=2023-05-10 17:24:53
file size=11732
file crc32=2797018935
example file url: http://192.168.2.133/group1/M00/00/00/AQz5S2RbYuWAWS2-AAAt1Ka3Hzc043.png
storage_upload_slave_by_filename
group_name=group1, remote_filename=M00/00/00/AQz5S2RbYuWAWS2-AAAt1Ka3Hzc043_big.png
source ip address: 192.168.2.133
file timestamp=2023-05-10 17:24:53
file size=11732
file crc32=2797018935
//浏览器访问路径  此时还无法访问成功,需要搭建nginx
example file url: http://192.168.2.133/group1/M00/00/00/AQz5S2RbYuWAWS2-AAAt1Ka3Hzc043_big.png

安装Nginx

在 storage 中安装

官网下载 https://nginx.org/download/nginx-1.22.1.tar.gz
在这里插入图片描述

在编译安装 Nginx 之前,需要下载 fastdfs-nginx-module 模块,下载成功后,上传至linux3服务器,并解压。
https://github.com/happyfish100/fastdfs-nginx-module/archive/refs/tags/V1.22.tar.gz

yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
## 切换到/usr/local/fastdfs/目录
[root@VM-12-7-centos fastdfs]# cd /usr/local/fastdfs/

##在编译安装 Nginx 之前,需要下载 fastdfs-nginx-module 模块,下载成功后,上传至linux3服务器,并解压。
## 下载 
[root@VM-12-7-centos fastdfs]# wget https://github.com/happyfish100/fastdfs-nginx-module/archive/refs/tags/V1.22.tar.gz

## 解压
[root@VM-12-7-centos fastdfs]# tar -zxvf fastdfs-nginx-module-1.22.tar.gz

## 下载  远程下载失败就手动到官网下载再XFTP上传到服务器
[root@VM-12-7-centos fastdfs]# wget https://nginx.org/download/nginx-1.22.1.tar.gz

## 解压
[root@VM-12-7-centos fastdfs]# tar -zxvf nginx-1.22.1.tar.gz

编译安装nginx

## 创建目录
[root@VM-12-7-centos fastdfs]# mkdir -p /usr/local/fastdfs/fdfs-nginx

## 进入到nginx目录
[root@VM-12-7-centos fastdfs]# cd /usr/local/fastdfs/nginx-1.22.1

[root@VM-12-7-centos nginx-1.22.1]# ./configure --prefix=/usr/local/fastdfs/fdfs-nginx --add-module=/usr/local/fastdfs/fastdfs-nginx-module-1.22/src

## 编译安装
 [root@VM-12-7-centos nginx-1.22.1]# make && make install
 
## 进入到 fast-nginx 目录
[root@VM-12-7-centos nginx-1.22.1]# cd /usr/local/fastdfs/fdfs-nginx/

## 校验配置文件
[root@VM-12-7-centos fast-nginx]# ./sbin/nginx -t

在这里插入图片描述
配置conf/nginx.conf文件
根据需要配置, 如果需要独立配置server 则需要独立配置server,下面只是在80端口的server下增加了一个转发配置

root@VM-12-7-centos fast-nginx]# vi conf/nginx.conf

##根据需要配置, 如果需要独立配置server 则需要独立配置server,下面只是在80端口的server下增加了一个转发配置
## 添加以下配置
location /group1/M00 {
	ngx_fastdfs_module;
}

配置mod_fastdfs.conf文件

## 拷贝一份 mod_fastdfs.conf 配置文件到 /etc/fdfs 目录下
[root@VM-12-7-centos fast-nginx]# cp /usr/local/fastdfs/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf /etc/fdfs/

## 编辑文件
[root@VM-12-7-centos fast-nginx]# vi /etc/fdfs/mod_fastdfs.conf

## 创建目录
mkdir -p /data/fastdfs/fastdfs-mod
## 设置存储日志的基础目录
base_path=/data/fastdfs/fastdfs-mod
## tracker server 的地址
tracker_server=192.168.2.133:22122
## url 中存在group name,需要设置为 true !!!
url_have_group_name = true
## 存储路径必须和storage.conf文件中相同
store_path0=/data/fastdfs/storage/files
## 放开http配置文件
include http.conf
http.mime_types_filename=/usr/local/fastdfs/fast-nginx/conf/mime.types
http.default_content_type=application/octet-stream

启动 Nginx

## 启动
[root@VM-12-7-centos fast-nginx]# ./sbin/nginx

## 查看进程,启动成功
[root@VM-12-7-centos fdfs-nginx]# ps -ef | grep nginx
root      69468      1  0 16:50 ?        00:00:00 nginx: master process ./sbin/nginx
nobody    69017  69473  0 17:02 ?        00:00:00 nginx: worker process
root      69532  37817  0 17:02 pts/2    00:00:00 grep --color=auto nginx

## 启动失败查看日志文件
[root@VM-12-7-centos fdfs-nginx]# cat logs/error.log

再次访问文件

http://1.12.249.75/group1/M00/00/00/AQz5S2RbYuWAWS2-AAAt1Ka3Hzc043_big.png
在这里插入图片描述

在 tracker 中安装

安装编译工具及库文件

[root@VM-12-6-centos fastdfs]# yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel

下载 相应的安装包,上传到 tracker 服务器的安装路径,解压缩

## 切换到/usr/local/fastdfs/目录
[root@VM-12-6-centos fastdfs]# cd /usr/local/fastdfs/

## 下载  远程下载失败就手动到官网下载再XFTP上传到服务器
[root@VM-12-6-centos fastdfs]# wget https://nginx.org/download/nginx-1.22.1.tar.gz

## 解压
[root@VM-12-6-centos fastdfs]# tar -zxvf nginx-1.22.1.tar.gz

tracker 服务只是做转发给storage 服务,这里不加nginx模块,所以不需要fastdfs-nginx-module插件,所以 编译安装 Nginx。

## 创建目录
[root@VM-12-6-centos fastdfs]# mkdir -p /usr/local/fastdfs/fdfs-nginx

## 进入到nginx目录
[root@VM-12-6-centos fastdfs]# cd /usr/local/fastdfs/nginx-1.22.1

[root@VM-12-6-centos nginx-1.22.1]# ./configure --prefix=/usr/local/fastdfs/fdfs-nginx

## 编译安装
 [root@VM-12-6-centos fast-nginx]# make && make install
 
## 进入到 fast-nginx 目录
[root@VM-12-6-centos nginx-1.22.1]# cd /usr/local/fastdfs/fdfs-nginx/

配置conf/nginx.conf文件
根据需要配置, 如果需要独立配置server 则需要独立配置server,下面只是在80端口的server下增加了一个转发配置

## 修改配置文件
[root@VM-12-6-centos fdfs-nginx]# vi conf/nginx.conf

## 添加以下配置
	    upstream storage_servers {
            server 192.168.0.103:80;
        }

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

在这里插入图片描述
启动Nginx

## 启动
[root@VM-12-6-centos fdfs-nginx]# ./sbin/nginx

## 查看进程
[root@VM-12-6-centos fdfs-nginx]# ps -ef | grep nginx
root       4369      1  0 20:15 ?        00:00:00 nginx: master process ./sbin/nginx
nobody     4391   4389  0 20:16 ?        00:00:00 nginx: worker process
root       4374   1751  0 20:14 pts/0    00:00:00 grep --color=auto nginx

再次通过tracker IP访问图片路径也可以成功

SpringBoot整合 FastDFS

准备工作

关闭FastDFS 服务集群防火墙
放开服务器 22122 / 23000 端口
这是FastDFS 默认端口如需自定义端口,可以在配置文件中修改

按官方提供的整合办法,需要先下载 客户端SDK包,然后打包到本地maven仓库,再到项目中引用依赖,比较麻烦
在这里插入图片描述
github上有码友基于官方1.26版二次封装了客户端并且加入到了maven中央仓库里面,所以不需要我们自己下载依赖再手动打包,并且二次封装的API使用起来教官方原生API更方便

1.添加依赖

        <dependency>
            <groupId>com.github.tobato</groupId>
            <artifactId>fastdfs-client</artifactId>
            <version>1.27.2</version>
        </dependency>
         <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.10</version>
        </dependency>

2.添加fdfx配置

fdfs:
  so-timeout: 2000 # 读取时间
  connect-timeout: 1000 # 连接超时时间
  thumb-image: # 生成缩略图
    height: 150 # 缩略图高度
    width: 150 # 缩略图宽度
  tracker-list: # tracker 服务器地址,这里是数组类型,可以配置多台
    - 1.12.249.75:22122
  web-server-url: http://1.12.249.75:80/ # storage 服务器上nginx的地址
  pool: # 可参考 ConnectionPoolConfig
    #从池中借出的对象的最大数目(配置为-1表示不限制)
    max-total: -1
    #获取连接时的最大等待毫秒数(默认配置为5秒)
    max-wait-millis: 5000
    #每个key最大连接数  key配置的是连接服务端的地址(IP+端口)连接情况,如果有连接不够用的情况可以调整以上参数
    max-total-per-key: 50
    #每个key对应的连接池最大空闲连接数
    max-idle-per-key: 10
    #每个key对应的连接池最小空闲连接数
    min-idle-per-key: 5
    #向调用者输出“连接”资源时,是否检测有效性
    test-on-borrow: true

API接口

import com.github.tobato.fastdfs.domain.conn.FdfsWebServer;
import com.github.tobato.fastdfs.domain.fdfs.MetaData;
import com.github.tobato.fastdfs.domain.fdfs.StorePath;
import com.github.tobato.fastdfs.domain.proto.storage.DownloadByteArray;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.Charsets;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * fastdfs 文件上传和下载控制器
 * @author huan.fu
 * @date 2022/10/8 - 20:24
 */
@RestController
@AllArgsConstructor
@RequestMapping("/fdfs")
@Slf4j
public class FastdfsController {

    private final FastFileStorageClient fastFileStorageClient;
    private final FdfsWebServer fdfsWebServer;

    /**
     * 上传文件
     */
    @PostMapping("/uploadFile")
    public List<String> uploadFile(MultipartFile file) throws IOException {
        String fileName = file.getOriginalFilename();
        // 获取文件扩展名
        String extension = FilenameUtils.getExtension(fileName);
        // 文件元数据信息
        Set<MetaData> metaData = new HashSet<>(4);
        metaData.add(new MetaData("fileName",fileName));
        // 上传文件
        StorePath storePath = fastFileStorageClient.uploadImageAndCrtThumbImage(file.getInputStream(), file.getSize(), extension, metaData);
        log.info("文件上传路径:[{}]",storePath.getFullPath());
        String viewPath = fdfsWebServer.getWebServerUrl() + storePath.getFullPath();
        log.info("可访问路径:[{}]",viewPath);

        extension = FilenameUtils.getExtension(viewPath);
        String xthumbPath = viewPath.replace("." + extension, "")+"_150x150."+extension;
        log.info("缩略图路径:[{}]",xthumbPath);


        List<String> result = new ArrayList<>(3);
        result.add(viewPath);
        result.add(xthumbPath);
        result.add(storePath.getFullPath());

        return result;
    }

    /**
     * 下载文件
     */
    @GetMapping("download")
    public void downloadFile(String filePath, HttpServletResponse response) throws IOException {
        log.info("需要下载的文件:[{}]",filePath);
        String group = filePath.substring(0, filePath.indexOf("/"));
        String path = filePath.substring(filePath.indexOf("/") + 1);
        Set<MetaData> metadata = fastFileStorageClient.getMetadata(group, path);
        String fileName = metadata.iterator().next().getValue();
        byte[] bytes = fastFileStorageClient.downloadFile(group, path, new DownloadByteArray());
        response.setContentType("application/octet-stream");
        response.addHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(fileName, Charsets.UTF_8.displayName()));
        IOUtils.write(bytes,response.getOutputStream());
    }

    /**
     * 下载文件
     */
    @GetMapping("delete")
    public void deleteFile(String filePath) throws IOException {
        log.info("需要删除的文件:[{}]",filePath);
        fastFileStorageClient.deleteFile(filePath);
    }
}

postman测试结果
在这里插入图片描述

FastDFS 集群

上面介绍的FastDFS分布式文件系统还不满足高可用,没有对数据进行备份存储,存在单点故障问题。所以,接下来,我们需要真正的部署FastDFS的集群,实现FastDFS的高可用。并对其存储过程中的配置,特性进行详细分析。
在这里插入图片描述
准备 2 /4/ 6 台服务器 这里以6台设备为例子

检查每台服务器是否安装好了环境并已经下载了压缩包 fastdfs-6.08.tar.gz 和必须的基础库 libfastcommon-1.0.58.tar.gz
192.168.0.101
192.168.0.102
192.168.0.103
192.168.0.104
192.168.0.105
192.168.0.106

资源下载路径

fastdfs

https://github.com/happyfish100/fastdfs/archive/refs/tags/V6.08.tar.gz

nginx

https://nginx.org/download/nginx-1.22.1.tar.gz

libfastcommon

https://github.com/happyfish100/libfastcommon/archive/refs/tags/V1.0.58.tar.gz

fastdfs-nginx-module

https://github.com/happyfish100/fastdfs-nginx-module/archive/refs/tags/V1.22.tar.gz

对每一台设备都安装安装FastDFS依赖的环境

yum install gcc gcc-c++ libevent openssl openssl-devel pcre pcre-devel perl

## 创建项目目录
mkdir -p /usr/local/fastdfs

## 进入目录后,下载到该目录
cd /usr/local/fastdfs

## wget方式下载  无法远程下载就手动下载安装包上传
wget https://github.com/happyfish100/fastdfs/archive/refs/tags/V6.08.tar.gz
wget https://github.com/happyfish100/libfastcommon/archive/refs/tags/V1.0.58.tar.gz

## 解压
tar -zxvf V6.08.tar.gz
tar -zxvf V1.0.58.tar.gz

## 进入基础库目录,执行如下命令进行编译、安装
cd /usr/local/fastdfs/libfastcommon-1.0.58/
./make.sh
./make.sh install

## 进入fastdfs-6.08根目录,进行编译、安装
cd /usr/local/fastdfs/fastdfs-6.08/
./make.sh
./make.sh install

安装成功之后,分别对 tracker 和 storage 进行配置。
我们先配置 tracker 192.168.0.101 \ 192.168.0.102 作为tracker 节点

## 创建tracker目录
mkdir -p /data/fastdfs/tracker

## 切换到/etc/fdfs/目录
[root@VM-12-6-centos fastdfs-6.06]# cd /etc/fdfs/

## 配置 tracker.conf
vi /etc/fdfs/tracker.conf

## 只需修改基础路径配置即可
base_path = /data/fastdfs/tracker

再配置storage,需要配置 /etc/fdfs目录下的 storage.conf
以 192.168.0.103 \ 192.168.0.104 \ 192.168.0.105 \ 192.168.0.106 四台机器作为storage服务节点

192.168.0.103 和192.168.0.104属于同一个组 group1(默认组所以不需要修改),分别修改配置文件如下:

#创建日志存储路径
mkdir -p /data/fastdfs/storage/logs
#创建文件保持路径
mkdir -p /data/fastdfs/storage/files

## 配置 storage.conf
 vi /etc/fdfs/storage.conf

## 修改以下配置
base_path = /data/fastdfs/storage/logs
store_path0 = /data/fastdfs/storage/files
# 集群配置
tracker_server = 192.168.0.101:22122
tracker_server = 192.168.0.102:22122

192.168.0.105 / 192.168.0.106 为group2的配置略有不同,配置如下:

#创建日志存储路径
mkdir -p /data/fastdfs/storage/logs
#创建文件保持路径
mkdir -p /data/fastdfs/storage/files

## 配置 storage.conf
 vi /etc/fdfs/storage.conf

## 修改以下配置
# 组名为group2
group_name = group2
base_path = /data/fastdfs/storage/logs
store_path0 = /data/fastdfs/storage/files
tracker_server = 192.168.0.101:22122
tracker_server = 192.168.0.102:22122

启动集群:
分别启动 192.168.0.101 \ 192.168.0.102 tracker节点

/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start

启动 192.168.0.103 / 192.168.0.104 / 192.168.0.105 / 192.168.0.106 服务器的storage节点

/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start

集群环境已经搭建成功,可以测试文件上传!

负载均衡机制
查看tracker 节点的配置文件,这里以192.168.0.101 为例:

[root@192.168.0.101 fastdfs-6.08]#vi /etc/fdfs/tracker.conf

在这里插入图片描述
根据需要修改负载均衡机制,修改后重启服务

/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

安装Nginx

集群安装nginx与普通版本的类似,tracker中的Nginx为负载均衡功能,storage中的Nginx会使用扩展模块访问文件
资源:

nginx

wget https://nginx.org/download/nginx-1.22.1.tar.gz

fastdfs-nginx-module

https://github.com/happyfish100/fastdfs-nginx-module/archive/refs/tags/V1.22.tar.gz

tracker 节点: 192.168.0.101 \ 192.168.0.102 分别上传nginx安装包

## 切换到/usr/local/fastdfs/目录
cd /usr/local/fastdfs/

## 下载  远程下载失败就手动到官网下载再XFTP上传到服务器
wget https://nginx.org/download/nginx-1.22.1.tar.gz

## 解压
tar -zxvf nginx-1.22.1.tar.gz

## 创建目录
mkdir -p /usr/local/fastdfs/fdfs-nginx

## 进入到nginx目录
cd /usr/local/fastdfs/nginx-1.22.1

./configure --prefix=/usr/local/fastdfs/fdfs-nginx

## 编译安装
make && make install
 
## 进入到 fast-nginx 目录 shell编辑不方便,可以用xftp拉取到本地修改后再上传覆盖
cd /usr/local/fastdfs/fdfs-nginx/

upstream storage_servers {
    server 192.168.0.103:80;
    server 192.168.0.104:80;
    server 192.168.0.105:80;
    server 192.168.0.106:80;
}

location ~ /group[1-9]/M0[0-9] {
    proxy_pass  http://storage_servers;
}


#分别启动nginx服务,这里以192.168.0.101为例
[root@192.168.0.101 fdfs-nginx]# ./sbin/nginx
[root@192.168.0.101 fdfs-nginx]# ps -ef | grep nginx
root       9835      1  0 02:33 ?        00:00:00 nginx: master process ./sbin/nginx
nobody     9836   9845  0 02:33 ?        00:00:00 nginx: worker process
root       9838   1488  0 02:33 pts/0    00:00:00 grep --color=auto nginx

测试文件路径访问!

storage节点: 192.168.0.103 / 192.168.0.104 / 192.168.0.105 \ 192.168.0.106 分别上传nginx安装包和 fastdfs-nginx-module 插件安装包

yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
## 切换到/usr/local/fastdfs/目录
cd /usr/local/fastdfs/

##在编译安装 Nginx 之前,需要下载 fastdfs-nginx-module 模块,下载成功后,上传至linux3服务器,并解压。
## 下载 
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/refs/tags/V1.22.tar.gz

## 解压
tar -zxvf fastdfs-nginx-module-1.22.tar.gz

## 下载  远程下载失败就手动到官网下载再XFTP上传到服务器
wget https://nginx.org/download/nginx-1.22.1.tar.gz

## 解压
tar -zxvf nginx-1.22.1.tar.gz

## 创建目录
mkdir -p /usr/local/fastdfs/fdfs-nginx

## 进入到nginx目录
cd /usr/local/fastdfs/nginx-1.22.1

./configure --prefix=/usr/local/fastdfs/fdfs-nginx --add-module=/usr/local/fastdfs/fastdfs-nginx-module-1.22/src

## 编译安装
make && make install

## 进入到 fast-nginx 目录
cd /usr/local/fastdfs/fdfs-nginx/
## 校验配置文件
./sbin/nginx -t

修改nginx.conf

vi conf/nginx.conf

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

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

## 拷贝一份 mod_fastdfs.conf 配置文件到 /etc/fdfs 目录下
cp /usr/local/fastdfs/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf /etc/fdfs/

## 创建目录
mkdir -p /data/fastdfs/mod-fastdfs

## 切换/etc/fdfs/目录
cd /etc/fdfs/
## 编辑文件
vi mod_fastdfs.conf

修改 mod_fastdfs.conf 文件根据,默认组名是group1 不需要修改,其他的组需要修改组名同storage.conf文件中配置的组名

192.168.0.103 / 192.168.0.104 group1
192.168.0.105 \ 192.168.0.106 group2

## 设置存储日志的基础目录
group_name=group2
base_path=/data/fastdfs/mod-fastdfs
tracker_server=192.168.0.101:22122
tracker_server=192.168.0.102:22122
url_have_group_name = true
store_path0=/data/fastdfs/storage/files

include http.conf
http.mime_types_filename=/opt/home/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=/data/fastdfs/storage/files

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

分别启动nginx服务

cd /usr/local/fastdfs/fdfs-nginx/
./sbin/nginx

扩容

需要扩展新的机器时,例如对group2分组进行扩容根据storage节点的搭建方式进行配置并启动就可以实现扩容,再将节点加入到tracker 节点的Nginx配置路由转发路路径中,重启nginx,扩容完成!

end!

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

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

相关文章

MySQL-5.56-MariaDB 转到MySQL-8.0.33过程笔记

MySQL-5.56-MariaDB 转到MySQL-8.0.33过程笔记 将MySQL 5中的数据导出并导入到MySQL8中在MySQL8中执行带有 GROUP BY的语句时会报错&#xff1a;同样的SQL查询语句&#xff0c;在MySQL5&#xff08;这里测试是5.5版本-MaraiaDB&#xff09;执行速度正常&#xff0c;但是在MySQL…

<IBM AIX> 《AIX中HA的网卡IP确认方法》

《HA网卡确认方法》 1 HA IP地址类型2HA IP地址设置原则3 HA网卡日常查看方法3.1 查看hosts文件3.2 查看网卡和IP 4 通过命令方式直接查看5 直接查看HA配置4 HA网卡SMIT查看方法&#xff08;暂不完整&#xff09;4.1 根据hosts文件确认IP对应的别名4.2 根据serviceIP确认Persis…

具有区域/边缘一致性的形状感知弱/半监督Disc and Cup状物分割

文章目录 Shape-Aware Weakly/Semi-Supervised Optic Disc and Cup Segmentation with Regional/Marginal Consistency摘要本文方法Modified Signed Distance Function (mSDF )Dual Consistency Regularisation of Semi-SupervisionDifferentiable vCDR estimation of Weakly S…

vue3+vite+多页面应用(MPA)示例

环境配置&#xff1a; 在硬盘里找个地方放项目内容&#xff1a;如&#xff1a;E:\vue3vitepros&#xff0c; 打开vscode,菜单》终端》新建终端&#xff0c;输入命令&#xff1a;cd E:\vue3vitepros 回车,然后依次运行下面命令&#xff1a; 1&#xff0c;安装vite:安装过的忽略此…

【开发必备】推荐几个非常好用的前端VsCode插件,快来看看你都用过哪些?

VSCode是前端开发的武器&#xff0c;下面给大家推荐几个必备的、非常好用的前端VsCode插件 1.Better Align Better Align就是一款能够实现代码规范的工具&#xff0c;它主要用于代码的上下对齐。它能够用冒号&#xff08;&#xff1a;&#xff09;、赋值&#xff08;&#xf…

Mybatis根据Bean生成对应的SQL语句工具类

Mybatis根据Bean生成对应配置SQL的语句 前言为什么不用MyBatis-PlusMybatis的困扰插入和更新查询 crud工具类MybatisCrudHelp.java 测试类需要注意的点 前言 在进入这一节知道MyBatis-Plus的人可能有人要问了&#xff1a;为什么我不用Mybatis-plus&#xff1f; 为什么不用MyB…

【JAVAEE】单例模式的介绍及实现(懒汉模式和饿汉模式)

目录 1.单例模式 1.1概念 1.2单例模式的实现方式 怎么去设计一个单例 饿汉模式 懒汉模式 懒汉模式-多线程版 解决懒汉模式多线程不安全问题-synchronized 解决懒汉模式多线程不安全问题-volatile 1.单例模式 1.1概念 单例是一种设计模式。 啥是设计模式 ? 设计模式…

机器学习——弹性网估计

机器学习——弹性网估计 文章目录 机器学习——弹性网估计[toc]1 模型介绍2 模型设定3 弹性网估计 1 模型介绍 弹性网估计属于惩罚回归&#xff0c;常见的惩罚回归包括岭回归(ridge)、套索回归(lasso)和弹性网(elasticnet)回归等。 岭回归用于缓解高维数据可能的多重共线性问…

aws exam

Route 53 Route 53 是AWS的一个服务&#xff0c;它的主要功能如下&#xff0c;下面会一一介绍每个功能 Domain registration&#xff08;域名注册&#xff09;DNS management&#xff08;DNS管理&#xff09;Health check&#xff08;健康检查&#xff09;Routing polices&am…

K8S系列之NetworkPolicy

什么是NetworkPolicy IP 地址或端口层面&#xff08;OSI 第 3 层或第 4 层&#xff09;控制网络流量&#xff0c; 则你可以考虑为集群中特定应用使用 Kubernetes 网络策略&#xff08;NetworkPolicy&#xff09;。 NetworkPolicy 是一种以应用为中心的结构&#xff0c;允许你设…

浅析EasyCVR视频汇聚技术在城市智慧文旅数智平台中的应用意义

一、背景分析 根据文化和旅游部4月21日公布的2023年一季度国内旅游数据情况抽样调查统计结果显示&#xff0c;2023年一季度&#xff0c;国内旅游总人次12.16亿&#xff0c;比上年同期增加3.86亿&#xff0c;同比增长46.5%。其中&#xff0c;城镇居民国内旅游人次9.44亿&#x…

消息和消息队列、以及作用场景(一)

“消息”是在两台计算机间传送的数据单位。消息可以非常简单&#xff0c;例如只包含文本字符串&#xff1b;也可以更复杂&#xff0c;可能包含嵌入对象。 “消息队列”是在消息的传输过程中保存消息的容器。 目前的消息队列有很多&#xff0c;例如&#xff1a;Kafka、RabbitMQ…

包装三年经验拿21K,试用期没过完就被裁了....

最近翻了一些网站的招聘信息&#xff0c;把一线大厂和大型互联网公司看了个遍&#xff0c;发现市场还是挺火热的&#xff0c;虽说铜三铁四&#xff0c;但是软件测试岗位并没有削减多少&#xff0c;建议大家有空还是多关注和多投简历&#xff0c;不要闭门造车&#xff0c;错过好…

Redis命令详解

Redis是一个高性能的内存键值数据库&#xff0c;它支持多种数据结构&#xff0c;包括字符串、哈希、列表、集合、有序集合等。Redis通过提供一组命令来实现对数据的操作&#xff0c;这些命令可以通过Redis客户端发送给Redis服务器&#xff0c;从而对数据库进行操作。 Redis的一…

阿里云刘伟光:2 万字解读金融级云原生

作者&#xff1a;刘伟光&#xff0c;阿里云智能新金融&互联网行业总裁、中国金融四十人论坛常务理事&#xff0c;毕业于清华大学电子工程系 01 前言 2015年云原生理念提出的时候&#xff0c;彼时全球金融百年发展形成的信息化到数字化的背后&#xff0c;金融级的技术服务…

好用工具第1期:手机电脑同屏QtScrcpy

QtScrcpy 可以通过 USB / 网络连接Android设备&#xff0c;并进行显示和控制。无需root权限。 同时支持 GNU/Linux &#xff0c;Windows 和 MacOS 三大主流桌面平台。 QtScrcpy 是一个开源项目, 项目地址是: https://github.com/barry-ran/QtScrcpy 它专注于: 精致 (仅显示设…

Java 责任链模式详解

责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为型设计模式&#xff0c;它用于将请求的发送者和接收者解耦&#xff0c;使得多个对象都有机会处理这个请求。在责任链模式中&#xff0c;有一个请求处理链条&#xff0c;每个处理请求的对象都是一个…

mysql数据库基础知识,mysql数据库简介(一看就懂,一学就会)

目录 一、MySQL学习路线二、MySQL常见操作1、查看所有数据库show databases。2、MySQL 创建数据库3、删除数据库4、选择数据库use databasename5、查看该数据库下所有表show tables6、创建数据库表7、删除数据库 三、增删改查1、插入数据2、查询数据3、where子句4、更新语句5、…

微前端应用(qiankun+umi+antd)

1.微前端介绍以应用选型 1.1什么是微前端? 微前端是一种前端架构模式&#xff0c;它将前端应用程序拆分成多个小型的、独立开发、独立部署的子应用&#xff0c;然后将这些子应用组合成一个大型的、复杂的前端应用。每个子应用都有自己的技术栈、独立的代码库、独立的开发、测…

Linux快捷命令

目录 一、快捷排序——sort 常用选项&#xff1a; 示例 二、快捷去重——uniq 常用选项&#xff1a; 示例&#xff1a; ​编辑 ​编辑 ​编辑 三、快捷替换——tr 用于windows的编写的脚本格式转换为Linux格 方法一&#xff1a; 方法二&#xff1a; 四、快速裁…