FastDFS集群搭建及StringBoot整合

简介

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!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值