FastDFS集群搭建

一、部署规划

在这里插入图片描述

署程序集群/组主机名称/IP描述
tracker 1tracker clusterlinux1/192.168.0.101tracker 高可用
tracker 2tracker clusterlinux2/192.168.0.102tracker 高可用
storage 1storage server group 1linux3/192.168.0.103storage 线性扩展
storage 2storage server group 1linux4/192.168.0.104storage 线性扩展
storage 3storage server group 2linux5/192.168.0.105storage 线性扩展
storage 4storage server group 2linux6/192.168.0.106storage 线性扩展

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

二、环境准备

2.1、JDK1.8 安装

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

java -version

2.2、Apache Maven 安装

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

mvn -v

1、下载解压

## 切换目录
cd /opt/home

## 下载
wget https://dlcdn.apache.org/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.tar.gz

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

2、修改Maven阿里云镜像

vi /opt/home/apache-maven-3.8.6/conf/settings.xml

## 添加下面配置
    <mirror>
	    <!--This is used to direct the public snapshots repo in the 
	          profile below over to a different nexus group -->
	 <id>nexus-public-snapshots</id>
	 <mirrorOf>public-snapshots</mirrorOf> 
	 <url>http://maven.aliyun.com/nexus/content/repositories/snapshots/</url>
    </mirror>

3、配置maven环境变量

vi /etc/profile

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

4、重新加载

source /etc/profile

5、测试

mvn -v

2.3、Git 安装

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

## 安装git
yum install -y git

2.4、FastDFS 源码

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

[root@linux1 home]# mkdir -p /opt/home/fastdfs/

[root@linux1 home]# cd /opt/home/fastdfs/

[root@linux1 fastdfs]# git clone https://github.com/happyfish100/fastdfs.git

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

## wget方式下载
[root@linux1 fastdfs]# wget https://github.com/happyfish100/fastdfs/archive/refs/tags/V6.08.tar.gz

## 解压
[root@linux1 fastdfs]# tar -zxvf V6.08.tar.gz

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

[root@linux1 fastdfs]# yum install gcc-c++

2.5、ibevent 安装

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

[root@linux1 fastdfs]# yum -y install libevent

2.6、libfastcommon 安装

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

## 进入/opt/home/fastdfs目录
[root@linux1 fastdfs]# cd /opt/home/fastdfs

## 下载
[root@linux1 fastdfs]# wget https://github.com/happyfish100/libfastcommon/archive/refs/tags/V1.0.58.tar.gz

## 解压
[root@linux1 fastdfs]# tar -zxvf V1.0.58.tar.gz

## 进入/opt/home/fastdfs/libfastcommon-1.0.58目录
[root@linux1 fastdfs]# cd /opt/home/fastdfs/libfastcommon-1.0.58

## 编译安装
[root@linux1 libfastcommon-1.0.58]# ./make.sh
[root@linux1 libfastcommon-1.0.58]# ./make.sh install

三、安装Tracker

3.1、tracker 编译安装

## 切换/opt/home/fastdfs/fastdfs-6.08目录
[root@linux1 fastdfs]# cd /opt/home/fastdfs/fastdfs-6.08

## 编译安装
[root@linux1 fastdfs-6.08]# ./make.sh
[root@linux1 fastdfs-6.08]# ./make.sh install

3.2、配置 tracker.conf

## 创建tracker目录
[root@linux1 fastdfs-6.08]# mkdir -p /data/fastdfs/tracker

## 切换到/etc/fdfs/目录
[root@linux1 fastdfs-6.08]# cd /etc/fdfs/

## 修改 tracker.conf 文件
[root@linux1 fdfs]# vi tracker.conf

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

3.3、启动 tracker

## 启动
[root@linux1 fdfs]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start

## 停止
[root@linux1 fdfs]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf stop

## 重启
[root@linux1 fdfs]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

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

四、安装Storage

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

4.1、Strorage 编译安装

## 切换/opt/home/fastdfs/fastdfs-6.08目录
[root@linux3 fastdfs-6.08]# cd /opt/home/fastdfs/fastdfs-6.08

## 编译安装
[root@linux3 fastdfs-6.08]# ./make.sh
[root@linux3 fastdfs-6.08]# ./make.sh install

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

## 安装运行环境
[root@linux3 fastdfs-6.08]# yum -y install gcc gcc-c++ openssl openssl-devel pcre pcre-devel perl 

## 清空编译代码
[root@linux3 fastdfs-6.08]# ./make.sh clean

## 重新编译、安装
[root@linux3 fastdfs-6.08]# ./make.sh
[root@linux3 fastdfs-6.08]# ./make.sh install

4.2、配置 storage.conf

[root@linux3 fastdfs-6.08]# vi /etc/fdfs/storage.conf

## 存储数据和日志文件的目录
base_path = /data/fastdfs/storage
## 基于0,存储文件
store_path0 = /data/fastdfs/storage/files
## tracker_server地址,
tracker_server = 192.168.0.101:22122
#tracker_server = 192.168.209.122:22122

## 创建 base path, store path
[root@linux3 fastdfs-6.08]# mkdir -p /data/fastdfs/storage/files

4.3、启动 storage

## 启动
[root@linux3 fastdfs-6.08]# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf start

## 停止
[root@linux3 fastdfs-6.08]# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf stop

## 重启
[root@linux3 fastdfs-6.08]# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

## 查看进程
[root@linux3 fastdfs-6.08]# ps -ef | grep fdfs

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

## 切换/data/fastdfs/storage/logs目录
[root@linux3 fastdfs-6.08]# cd /data/fastdfs/storage/logs

## 查看日志
[root@linux3 logs]# cat storaged.log

需要创建 data 目录

## 创建目录
[root@linux3 logs]# mkdir -p /data/fastdfs/storage/files/data

## 重启
[root@linux3 logs]# fdfs_storaged /etc/fdfs/storage.conf restart

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

五、使用 FastDFS

5.1、Client 上传文件

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

## 编辑配置文件
[root@linux1 fdfs]# vi /etc/fdfs/client.conf

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

## tracker server 的地址
tracker_server = 192.168.0.101:22122
#tracker_server = 192.168.0.101:22122

## 创建 client 目录
[root@linux1 fdfs]# mkdir -p /data/fastdfs/client

创建 test 测试文件

## 切换/opt/home/fastdfs/目录
[root@linux1 fdfs]# cd /opt/home/fastdfs/

## 创建test.txt文件
[root@linux1 fastdfs]# vi test.txt

## 添加以下内容
My name is 徐先生
This is a test file.

## 查看文件内容
[root@linux1 fastdfs]# cat test.txt

执行上传文件命令

fdfs_test /etc/fdfs/client.conf upload test.txt

返回的结果如下:

group_name=group1, ip_addr=192.168.0.103, port=23000
storage_upload_by_filename
group_name=group1, remote_filename=M00/00/00/wKgAZ2Mj9MOAM1VuAAAAKru2FwE612.txt
source ip address: 192.168.0.103
file timestamp=2022-09-16 12:00:03
file size=42
file crc32=3149272833
example file url: http://192.168.0.103/group1/M00/00/00/wKgAZ2Mj9MOAM1VuAAAAKru2FwE612.txt
storage_upload_slave_by_filename
group_name=group1, remote_filename=M00/00/00/wKgAZ2Mj9MOAM1VuAAAAKru2FwE612_big.txt
source ip address: 192.168.0.103
file timestamp=2022-09-16 12:00:03
file size=42
file crc32=3149272833
example file url: http://192.168.0.103/group1/M00/00/00/wKgAZ2Mj9MOAM1VuAAAAKru2FwE612_big.txt

5.2、Client 下载文件

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

执行如下命令下载文件

fdfs_test /etc/fdfs/client.conf download group1 M00/00/00/wKgAZ2Mj9MOAM1VuAAAAKru2FwE612.txt

## 查看下载的文件
[root@linux1 fastdfs]# cat wKgAZ2Mj9MOAM1VuAAAAKru2FwE612.txt
My name is 徐先生
This is a test file.

登录 storage 服务器(linux3/192.168.0.103),查看是否上传成功

## 切换到文件目录
[root@linux3 ~]# cd /data/fastdfs/storage/files/data/00/00

## 查看文件

[root@linux3 00]# cat wKgAZ2Mj9MOAM1VuAAAAKru2FwE612.txt
My name is 徐先生
This is a test file.

5.3、Client 删除文件

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

执行如下命令删除文件

[root@linux1 fastdfs]# fdfs_test /etc/fdfs/client.conf delete group1 M00/00/00/wKgAZ2Mj9MOAM1VuAAAAKru2FwE612.txt

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

## 切换目录
[root@linux3 00]# cd /data/fastdfs/storage/files/data/00/00

## 查看列表
[root@linux3 00]# ll
总用量 8
-rw-r--r--. 1 root root 42 916 12:00 wKgAZ2Mj9MOAM1VuAAAAKru2FwE612_big.txt
-rw-r--r--. 1 root root 49 916 12:00 wKgAZ2Mj9MOAM1VuAAAAKru2FwE612_big.txt-m

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

example file url: http://192.168.0.103/group1/M00/00/00/wKgAZ2Mj9MOAM1VuAAAAKru2FwE612_big.txt

在这里插入图片描述

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

六、安装Nginx

6.1、在 storage 中安装 Nginx

安装编译工具及库文件

[root@linux3 fastdfs]# yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel

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

## 切换到/opt/home/fastdfs/目录
[root@linux3 fastdfs]# cd /opt/home/fastdfs/

## 下载
[root@linux3 fastdfs]# wget https://nginx.org/download/nginx-1.23.0.tar.gz

## 解压
[root@linux3 fastdfs]# tar -zxvf nginx-1.23.0.tar.gz

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

## 下载
[root@linux3 fastdfs]# wget https://github.com/happyfish100/fastdfs-nginx-module/archive/refs/tags/V1.22.tar.gz

## 解压
[root@linux3 fastdfs]# tar -zxvf V1.22.tar.gz

接下来,可以编译安装 Nginx。

## 创建目录
[root@linux3 nginx-1.23.0]# mkdir -p /opt/home/fastdfs/fdfs-nginx

## 进入到nginx目录
[root@linux3 fastdfs]# cd /opt/home/fastdfs/nginx-1.23.0

[root@linux3 nginx-1.23.0]# ./configure --prefix=/opt/home/fastdfs/fdfs-nginx --add-module=/opt/home/fastdfs/fastdfs-nginx-module-1.22/src

## 编译安装
 [root@linux3 fast-nginx]# make && make install
 
## 进入到 fast-nginx 目录
[root@linux3 nginx-1.23.0]# cd /opt/home/fastdfs/fdfs-nginx/

## 校验配置文件
[root@linux3 fast-nginx]# ./sbin/nginx -t
nginx: the configuration file /opt/home/fastdfs/fast-nginx/conf/nginx.conf syntax is ok
nginx: configuration file /opt/home/fastdfs/fast-nginx/conf/nginx.conf test is successful

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

[root@linux3 fast-nginx]# vi conf/nginx.conf

## 添加以下配置
location /group1/M00 {
	ngx_fastdfs_module;
}

## 测试配置没有问题
[root@linux3 fast-nginx]# ./sbin/nginx -t
nginx: the configuration file /opt/home/fastdfs/fast-nginx/conf/nginx.conf syntax is ok
nginx: configuration file /opt/home/fastdfs/fast-nginx/conf/nginx.conf test is successful

解决

## nginx的http模块使用pcre来解析正则表达式,需要在linux上安装pcre库
[root@linux3 nginx-1.23.0]# yum install ‐y pcre pcre‐devel

## 安装zlib库,nginx使用zlib对http包的内容进行gzip
[root@linux3 nginx-1.23.0]# yum install ‐y zlib zlib‐devel

## 安装openssl库,让 nginx 支持 https(即在ssl协议上传输http)
[root@linux3 nginx-1.23.0]# yum install ‐y openssl openssl‐devel

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

## 拷贝一份 mod_fastdfs.conf 配置文件到 /etc/fdfs 目录下
[root@linux3 fast-nginx]# cp /opt/home/fastdfs/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf /etc/fdfs/

## 编辑文件
[root@linux3 fast-nginx]# vi /etc/fdfs/mod_fastdfs.conf

## 设置存储日志的基础目录
base_path=/data/fastdfs/fastdfs-mod
## tracker server 的地址
tracker_server=192.168.0.101: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=/opt/home/fastdfs/fast-nginx/conf/mime.types
http.default_content_type=application/octet-stream

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

启动 Nginx

## 启动
[root@linux3 fast-nginx]# ./sbin/nginx

## 查看进程,启动成功
[root@linux3 fdfs-nginx]# ps -ef | grep nginx
root      69473      1  0 16:59 ?        00:00:00 nginx: master process ./sbin/nginx
nobody    69497  69473  0 17:02 ?        00:00:00 nginx: worker process
root      69501  37817  0 17:02 pts/2    00:00:00 grep --color=auto nginx

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

再次访问

example file url: http://192.168.0.103/group1/M00/00/00/wKgAZ2Mj9MOAM1VuAAAAKru2FwE612_big.txt

在这里插入图片描述

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

6.2、在 tracker 中安装 Nginx

安装编译工具及库文件

[root@linux1 fastdfs]# yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel

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

## 切换到/opt/home/fastdfs/目录
[root@linux1 fastdfs]# cd /opt/home/fastdfs/

## 下载
[root@linux1 fastdfs]# wget https://nginx.org/download/nginx-1.23.0.tar.gz

## 解压
[root@linux1 fastdfs]# tar -zxvf nginx-1.23.0.tar.gz

接下来,可以编译安装 Nginx。这里不加nginx模块

## 创建目录
[root@linux1 nginx-1.23.0]# mkdir -p /opt/home/fastdfs/fdfs-nginx

## 进入到nginx目录
[root@linux1 fastdfs]# cd /opt/home/fastdfs/nginx-1.23.0

[root@linux1 nginx-1.23.0]# ./configure --prefix=/opt/home/fastdfs/fdfs-nginx

## 编译安装
 [root@linux1 fast-nginx]# make && make install
 
## 进入到 fast-nginx 目录
[root@linux1 nginx-1.23.0]# cd /opt/home/fastdfs/fdfs-nginx/

配置conf/nginx.conf文件,添加如下内容,注意配置的位置,如图。

## 修改配置文件
[root@linux1 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@linux1 fdfs-nginx]# ./sbin/nginx

## 查看进程
[root@linux1 fdfs-nginx]# ps -ef | grep nginx
root       4389      1  0 21:16 ?        00:00:00 nginx: master process ./sbin/nginx
nobody     4390   4389  0 21:16 ?        00:00:00 nginx: worker process
root       4394   1751  0 21:16 pts/0    00:00:00 grep --color=auto nginx

刷新浏览器,再次访问。
在这里插入图片描述

七、Spring Boot 整合 FastDFS

7.1、FastDFS java client SDK

使用maven从源码安装,下载源码到本地磁盘,执行 git clone 命令。

git clone https://github.com/happyfish100/fastdfs-client-java.git

使用maven命令打成jar包

mvn clean package

安装到maven仓库

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

7.2、创建 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.0.101: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 配置文件、启动

@Component
public class FastDFS {
    @PostConstruct
    public void init() {
        try {
            ClientGlobal.initByProperties("fastdfs-client.properties");
            System.out.println("ClientGlobal.configInfo(): " + ClientGlobal.configInfo());
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (MyException e) {
            throw new RuntimeException(e);
        }
    }
}

7.3、文件的上传

@Override
public FileInfo uploadFile(MultipartFile file) {
    // 获取文件名称
    String fileExtName = FileUtil.getFileExtName(file.getOriginalFilename());

    // 创建Tracker客户端
    TrackerClient trackerClient = new TrackerClient();
    try {
        TrackerServer trackerServer = trackerClient.getTrackerServer();
        System.out.println(String.format("trackerServer %s:%s", trackerServer.getInetSocketAddress().getAddress(), trackerServer.getInetSocketAddress().getPort()));
        StorageServer storeStorage = trackerClient.getStoreStorage(trackerServer);
        System.out.println(String.format("storeStorage %s:%s", storeStorage.getInetSocketAddress().getAddress(), storeStorage.getInetSocketAddress().getPort()));

        StorageClient storageClient = new StorageClient(trackerServer, storeStorage);
        // 关键
        String[] strings = storageClient.upload_file(file.getBytes(), fileExtName, null);
        return fileInfoDao.save(new FileInfo(strings[0], strings[1], file.getOriginalFilename(), fileExtName));
    } catch (MyException e) {
        throw new RuntimeException(e);
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

7.4、文件的下载

@Override
public String download(Long id) {
    FileInfo fileInfo = fileInfoDao.findById(id).get();
    String localFilename = "/tmp/" + fileInfo.getOriginFilename();
    TrackerClient trackerClient = new TrackerClient();
    try {
        TrackerServer trackerServer = trackerClient.getTrackerServer();
        StorageServer storeStorage = trackerClient.getStoreStorage(trackerServer);
        StorageClient storageClient = new StorageClient(trackerServer, storeStorage);
        int i = storageClient.download_file(fileInfo.getGroupName(), fileInfo.getRemoteFilename(), localFilename);
        if (i == 0) {
            return String.format("文件已下载到 %s", localFilename);
        }
        return "下载失败";
    } catch (MyException e) {
        throw new RuntimeException(e);
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

7.5、文件的删除

    @Override
    public String deleteById(Long id) {
        FileInfo fileInfo = fileInfoDao.findById(id).get();
        TrackerClient trackerClient = new TrackerClient();
        try {
            TrackerServer trackerServer = trackerClient.getTrackerServer();
            StorageServer storeStorage = trackerClient.getStoreStorage(trackerServer, fileInfo.getGroupName());
            StorageClient storageClient = new StorageClient(trackerServer, storeStorage);
            int i = storageClient.delete_file(fileInfo.getGroupName(), fileInfo.getRemoteFilename());

            System.out.println(String.format("deleteById trackerServer %s:%s", trackerServer.getInetSocketAddress().getAddress(), trackerServer.getInetSocketAddress().getPort()));
            System.out.println(String.format("deleteById storeStorage %s:%s", storeStorage.getInetSocketAddress().getAddress(), storeStorage.getInetSocketAddress().getPort()));
            if (i == 0) {
                fileInfoDao.deleteById(id);
                return "删除成功";
            }
            return "删除失败";
        } catch (MyException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

7.6、总结

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

八、FastDFS高级特性

8.1、FastDFS 集群

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

8.2、FastDFS 集群部署

集群的架构图如下:
在这里插入图片描述
检查每台服务器是否已经下载了压缩包 fastdfs-6.08.tar.gz和必须的基础库 libfastcommon-1.0.58.tar.gz

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

## 创建项目目录
[root@linux2 ~]# mkdir -p /opt/home/fastdfs

## 进入目录后,下载到该目录
[root@linux2 ~]# cd /opt/home/fastdfs

## wget方式下载
[root@linux2 fastdfs]# wget https://github.com/happyfish100/fastdfs/archive/refs/tags/V6.08.tar.gz

[root@linux2 fastdfs]# wget https://github.com/happyfish100/libfastcommon/archive/refs/tags/V1.0.58.tar.gz

## 解压
[root@linux2 fastdfs]# tar -zxvf V6.08.tar.gz
[root@linux2 fastdfs]# tar -zxvf V1.0.58.tar.gz

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

[root@linux3 fastdfs]# ll
总用量 1336
drwxrwxr-x. 13 root root    4096 33 2022 fastdfs-6.08
drwxrwxr-x.  3 root root      47 1119 2019 fastdfs-nginx-module-1.22
drwxr-xr-x. 11 root root     151 916 16:57 fdfs-nginx
drwxrwxr-x.  6 root root     182 916 11:42 libfastcommon-1.0.58
drwxr-xr-x.  9 1001 1001     186 916 16:18 nginx-1.23.0
-rw-r--r--.  1 root root 1102940 622 00:21 nginx-1.23.0.tar.gz
-rw-r--r--.  1 root root  235779 916 11:35 V1.0.58.tar.gz
-rw-r--r--.  1 root root   19952 916 16:17 V1.22.tar.gz

重复上述步骤,在linux4(192.168.0.104)和linux5(192.168.0.105)服务器分别创建项目目录,上传源码

[root@linux4 fastdfs]# pwd
/opt/home/fastdfs
[root@linux4 fastdfs]# ll
总用量 1028
drwxrwxr-x. 13 root root   4096 33 2022 fastdfs-6.08
drwxrwxr-x.  6 root root    182 612 21:24 libfastcommon-1.0.58
-rw-r--r--.  1 root root 235779 916 23:05 V1.0.58.tar.gz
-rw-r--r--.  1 root root 809448 916 22:58 V6.08.tar.gz
[root@linux5 fastdfs]# pwd
/opt/home/fastdfs
[root@linux5 fastdfs]# ll
总用量 1028
drwxrwxr-x. 13 root root   4096 33 2022 fastdfs-6.08
drwxrwxr-x.  6 root root    182 612 21:24 libfastcommon-1.0.58
-rw-r--r--.  1 root root 235779 916 23:05 V1.0.58.tar.gz
-rw-r--r--.  1 root root 809448 916 22:58 V6.08.tar.gz

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

[root@linux1 ~]# yum install gcc gcc-c++ libevent openssl openssl-devel pcre pcre-devel perl
[root@linux2 ~]# yum install gcc gcc-c++ libevent openssl openssl-devel pcre pcre-devel perl
[root@linux3 ~]# yum install gcc gcc-c++ libevent openssl openssl-devel pcre pcre-devel perl
[root@linux4 ~]# yum install gcc gcc-c++ libevent openssl openssl-devel pcre pcre-devel perl
[root@linux5 ~]# yum install gcc gcc-c++ libevent openssl openssl-devel pcre pcre-devel perl

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

linux1

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

## 进入fastdfs-6.08根目录,进行编译、安装
[root@linux1 libfastcommon-1.0.58]# cd /opt/home/fastdfs/fastdfs-6.08/
[root@linux1 fastdfs-6.08]# ./make.sh
[root@linux1 fastdfs-6.08]# ./make.sh install

linux2、linux3、linux4、linux5分别执行上述操作,进行编译、安装。

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

linux1节点

## 配置 tracker.conf
[root@linux1 fastdfs-6.08]# vi /etc/fdfs/tracker.conf

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

linux2节点

## 配置 tracker.conf
[root@linux2 fastdfs-6.08]# vi /etc/fdfs/tracker.conf

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

对于linux3、linux4、linux5作为storage,需要配置 /etc/fdfs目录下的 storage.conf

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

## 配置 storage.conf
[root@linux3 fastdfs-6.08]# vi /etc/fdfs/storage.conf

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

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

## 配置 storage.conf
[root@linux5 fastdfs-6.08]# vi /etc/fdfs/storage.conf

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

启动集群:

在linux1服务器启动tracker

[root@linux1 fastdfs-6.08]# fdfs_trackerd /etc/fdfs/tracker.conf start
[2022-09-16 23:56:04] ERROR - file: process_ctrl.c, line: 312, "/data/fastdfs/tracker" can't be accessed, error info: No such file or directory

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

[root@linux1 fastdfs-6.08]# mkdir -p /data/fastdfs/tracker

再次启动,成功

[root@linux1 fastdfs-6.08]# fdfs_trackerd /etc/fdfs/tracker.conf start
[root@linux1 fastdfs-6.08]# ps -ef | grep fdfs
root       2356      1  0 23:57 ?        00:00:00 fdfs_trackerd /etc/fdfs/tracker.conf start
root       2364   1488  0 23:57 pts/0    00:00:00 grep --color=auto fdfs

在linux2服务器启动tracker

[root@linux2 fastdfs-6.08]# mkdir -p /data/fastdfs/tracker
[root@linux2 fastdfs-6.08]# fdfs_trackerd /etc/fdfs/tracker.conf start
[root@linux2 fastdfs-6.08]# ps -ef | grep fdfs
root      31072      1  0 23:58 ?        00:00:00 fdfs_trackerd /etc/fdfs/tracker.conf start
root      31080  30233  0 23:58 pts/0    00:00:00 grep --color=auto fdfs

接下来启动 linux3、linux4、linux5服务器的storage

在linux3节点启动storage

[root@linux3 fastdfs-6.08]# fdfs_storaged /etc/fdfs/storage.conf start
[2022-09-16 23:59:55] ERROR - file: process_ctrl.c, line: 312, "/data/fastdfs/storage" can't be accessed, error info: No such file or directory

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

[root@linux3 fastdfs-6.08]# mkdir -p /data/fastdfs/storage
[root@linux3 fastdfs-6.08]# mkdir -p /data/fastdfs/storage/files

再次启动,成功

[root@linux3 fastdfs-6.08]# fdfs_storaged /etc/fdfs/storage.conf start
[root@linux3 fastdfs-6.08]# ps -ef | grep fdfs
root       1741      1 27 00:01 ?        00:00:01 fdfs_storaged /etc/fdfs/storage.conf start
root       1752   1377  0 00:01 pts/0    00:00:00 grep --color=auto fdfs

linux4、linux5服务器的storage启动方式和上述操作步骤相同。

[root@linux4 fastdfs-6.08]# mkdir -p /data/fastdfs/storage
[root@linux4 fastdfs-6.08]# mkdir -p /data/fastdfs/storage/files
[root@linux4 fastdfs-6.08]# fdfs_storaged /etc/fdfs/storage.conf start
[root@linux4 fastdfs-6.08]# ps -ef | grep fdfs
root       2373      1 97 00:03 ?        00:00:03 fdfs_storaged /etc/fdfs/storage.conf start
root       2375   1488  0 00:03 pts/0    00:00:00 grep --color=auto fdfs
[root@linux5 fastdfs-6.08]# mkdir -p /data/fastdfs/storage
[root@linux5 fastdfs-6.08]#  mkdir -p /data/fastdfs/storage/files
[root@linux5 fastdfs-6.08]#  fdfs_storaged /etc/fdfs/storage.conf start
[root@linux5 fastdfs-6.08]# ps -ef | grep fdfs
root       2637      1 99 00:07 ?        00:00:04 fdfs_storaged /etc/fdfs/storage.conf start
root       2648   1415  0 00:07 pts/0    00:00:00 grep --color=auto fdfs

集群环境已经搭建成功,接下来启动 FastDFS客户端,上传文件测试:
在这里插入图片描述

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

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

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

在这里插入图片描述

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

8.3、FastDFS 集群负载均衡

修改 linux1(192.168.0.101)和 linux2(192.168.0.102)服务器的tracker.conf配置文件,配置如下:

vi /etc/fdfs/tracker.conf

store_lookup = 0

重启两台 tracker服务

fdfs_trackerd /etc/fdfs/tracker.conf restart

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

fastdfs.tracker_servers=192.168.0.101:22122

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

启动客户端服务,多次上传文件后,出现轮询效果,如图:
在这里插入图片描述
除此之外,如果想指定组进行上传,就容易多了。

8.4、FastDFS 集群指定组

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

## 修改tracker.conf
[root@linux2 fastdfs-6.08]# vi /etc/fdfs/tracker.conf

## 设置store_lookup为1,指定上传文件到组group2
# the method for selecting group to upload files
# 0: round robin
# 1: specify group
# 2: load balance, select the max free space group to upload file
store_lookup = 1

# which group to upload file
# when store_lookup set to 1, must set store_group to the group name
store_group = group2

## 重启tracker
fdfs_trackerd /etc/fdfs/tracker.conf restart

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

fastdfs.tracker_servers=192.168.0.102:22122

测试成功,所有的文件都上传到了组group2。
在这里插入图片描述
打开浏览器,选择上传成功的文件,拼接连接地址如下:

http://192.168.0.102/group2/M00/00/00/wKgAaWMkpUiANrSfAAC5GtOPhsA010.jpg

在这里插入图片描述
无法访问此网站,所以接下来,需要安装 Nginx。

8.5、安装Nginx

大家要注意,在每台服务器上安装的Nginx的作用略有不同。其中,linux1、linux2中的Nginx为负载均衡功能,linux3、linux4、linux5服务器中的Nginx会使用扩展模块访问文件。

所以,在安装Nginx时,linux1、linux2可以直接上传 nginx-1.23.0.tar.gz安装包。而linux3、linux4、linux5三台服务器除此之外,还需要上传扩展 fastdfs-nginx-module 模块。

在linux1、linux2节点上传Nginx安装包并解压

## 切换到/opt/home/fastdfs/目录
[root@linux1 fastdfs-6.08]# cd /opt/home/fastdfs/

## 下载
[root@linux1 fastdfs]# wget https://nginx.org/download/nginx-1.23.0.tar.gz

## 解压
[root@linux1 fastdfs]# tar -zxvf nginx-1.23.0.tar.gz
[root@linux2 fastdfs-6.08]# cd /opt/home/fastdfs/

[root@linux2 fastdfs]# wget https://nginx.org/download/nginx-1.23.0.tar.gz

[root@linux2 fastdfs]# tar -zxvf nginx-1.23.0.tar.gz

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

## 切换到/opt/home/fastdfs/目录
[root@linux3 fastdfs-6.08]# cd /opt/home/fastdfs/

## 下载
[root@linux3 fastdfs]# wget https://nginx.org/download/nginx-1.23.0.tar.gz

## 解压
[root@linux3 fastdfs]# tar -zxvf nginx-1.23.0.tar.gz

## 下载
[root@linux3 fastdfs]# wget https://github.com/happyfish100/fastdfs-nginx-module/archive/refs/tags/V1.22.tar.gz

## 解压
[root@linux3 fastdfs]# tar -zxvf V1.22.tar.gz

## 查看列表
[root@linux3 fastdfs]# ll
总用量 2436
drwxrwxr-x. 13 root root    4096 33 2022 fastdfs-6.08
drwxrwxr-x.  3 root root      47 1119 2019 fastdfs-nginx-module-1.22
drwxr-xr-x. 11 root root     151 916 16:57 fdfs-nginx
drwxrwxr-x.  6 root root     182 916 23:42 libfastcommon-1.0.58
drwxr-xr-x.  9 1001 1001     186 621 22:25 nginx-1.23.0
-rw-r--r--.  1 root root 1102940 622 00:21 nginx-1.23.0.tar.gz
-rw-r--r--.  1 root root 1102940 622 00:21 nginx-1.23.0.tar.gz.1
-rw-r--r--.  1 root root  235779 916 11:35 V1.0.58.tar.gz
-rw-r--r--.  1 root root   19952 916 16:17 V1.22.tar.gz
-rw-r--r--.  1 root root   19952 917 00:44 V1.22.tar.gz.1

在linux1、linux2节点编译、安装Nginx

## 删除单机时配置
[root@linux1 nginx-1.23.0]# rm -rf /opt/home/fastdfs/fdfs-nginx

## 创建安装目录
[root@linux1 nginx-1.23.0]# mkdir -p /opt/home/fastdfs/fdfs-nginx

## 进入nginx-1.23.0目录
[root@linux1 nginx-1.23.0]# cd /opt/home/fastdfs/nginx-1.23.0

[root@linux1 nginx-1.23.0]# ./configure --prefix=/opt/home/fastdfs/fdfs-nginx

## 编译安装
[root@linux1 nginx-1.23.0]# make && make install

## 查看
[root@linux1 nginx-1.23.0]# cd /opt/home/fastdfs/fdfs-nginx
[root@linux1 fdfs-nginx]# ll
总用量 4
drwxr-xr-x. 2 root root 4096 917 00:56 conf
drwxr-xr-x. 2 root root   40 917 00:56 html
drwxr-xr-x. 2 root root    6 917 00:56 logs
drwxr-xr-x. 2 root root   19 917 00:56 sbin

接下来在linux3、linux4、linux5编译、安装Nginx安装包和扩展模块

## 删除单机时配置
[root@linux3 fastdfs]# rm -rf /opt/home/fastdfs/fdfs-nginx

## 创建安装目录
[root@linux3 fastdfs]# mkdir -p /opt/home/fastdfs/fdfs-nginx

## 进入nginx-1.23.0目录
[root@linux3 fastdfs]# cd /opt/home/fastdfs/nginx-1.23.0

[root@linux3 nginx-1.23.0]# ./configure --prefix=/opt/home/fastdfs/fdfs-nginx --add-module=/opt/home/fastdfs/fastdfs-nginx-module-1.22/src

## 编译安装
[root@linux3 nginx-1.23.0]# make && make install

## 查看
[root@linux3 nginx-1.23.0]# cd /opt/home/fastdfs/fdfs-nginx
[root@linux3 fdfs-nginx]# ll
总用量 4
drwxr-xr-x. 2 root root 4096 917 01:00 conf
drwxr-xr-x. 2 root root   40 917 01:00 html
drwxr-xr-x. 2 root root    6 917 01:00 logs
drwxr-xr-x. 2 root root   36 917 01:00 sbin

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

配置Nginx:

在linux1、linux2节点分别配置 conf/nginx.conf

vi conf/nginx.conf

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

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

启动nginx

[root@linux1 fdfs-nginx]# ./sbin/nginx
[root@linux1 fdfs-nginx]# ps -ef | grep nginx
root       9845      1  0 01:13 ?        00:00:00 nginx: master process ./sbin/nginx
nobody     9846   9845  0 01:13 ?        00:00:00 nginx: worker process
root       9848   1488  0 01:13 pts/0    00:00:00 grep --color=auto nginx
[root@linux2 fdfs-nginx]# ./sbin/nginx
[root@linux2 fdfs-nginx]# ps -ef | grep nginx
root      38948      1  0 01:13 ?        00:00:00 nginx: master process ./sbin/nginx
nobody    38949  38948  0 01:13 ?        00:00:00 nginx: worker process
root      38951  30233  0 01:13 pts/0    00:00:00 grep --color=auto nginx

接下来在linux3、linux4、linux5节点分别配置 conf/nginx.conf

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


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

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

## 复制
[root@linux3 fdfs-nginx]# cp /opt/home/fastdfs/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf /etc/fdfs/

## 切换/etc/fdfs/目录
[root@linux3 fdfs-nginx]# cd /etc/fdfs/

## 编辑mod_fastdfs.conf
[root@linux3 fdfs]# vi mod_fastdfs.conf

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

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

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

[root@linux5 fdfs-nginx]# vi mod_fastdfs.conf

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
# the group name of the local storage server
group_name=group2

启动nginx

[root@linux4 fdfs-nginx]# cd /opt/home/fastdfs/fdfs-nginx/
[root@linux3 fdfs-nginx]# ./sbin/nginx
ngx_http_fastdfs_set pid=4489
[root@linux3 fdfs-nginx]# ps -ef | grep nginx
root       4490      1  0 01:28 ?        00:00:00 nginx: master process ./sbin/nginx
nobody     4491   4490  0 01:28 ?        00:00:00 nginx: worker process
root       4493   1377  0 01:28 pts/0    00:00:00 grep --color=auto nginx

报错

[2022-09-17 01:56:35] ERROR - file: ../storage/trunk_mgr/trunk_shared.c, line: 194, "No such file or directory" can't be accessed, error info: /data/fastdfs/mod-fastdfs
2022/09/17 01:56:35 [alert] 13395#0: worker process 13396 exited with fatal code 2 and cannot be respawned
[root@linux5 fdfs-nginx]# mkdir -p /data/fastdfs/mod-fastdfs

解决

[root@linux5 fdfs-nginx]# mkdir -p /data/fastdfs/mod-fastdfs

重启

[root@linux5 fdfs-nginx]#  ./sbin/nginx -s reload

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

暂时没有成功

Tracker的高可用,轮询方式

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

扩缩容的实现

数据的安全可靠

无法访问首先查看日志,其次排查配置文件有没有配置错误

8.6、扩容

现在对其进行升级,对group2分组进行扩容,添加linux6(192.168.0.106)。

下载了压缩包 fastdfs-6.08.tar.gz和必须的基础库 libfastcommon-1.0.58.tar.gz

## 创建项目目录
[root@linux6 ~]# mkdir -p /opt/home/fastdfs

## 进入目录后,下载到该目录
[root@linux6 ~]# cd /opt/home/fastdfs

## wget方式下载
[root@linux6 fastdfs]# wget https://github.com/happyfish100/fastdfs/archive/refs/tags/V6.08.tar.gz

[root@linux6 fastdfs]# wget https://github.com/happyfish100/libfastcommon/archive/refs/tags/V1.0.58.tar.gz

## 解压
[root@linux6 fastdfs]# tar -zxvf V6.08.tar.gz
[root@linux6 fastdfs]# tar -zxvf V1.0.58.tar.gz

## 查看目录
[root@linux6 fastdfs]# ll
总用量 1028
drwxrwxr-x. 13 root root   4096 33 2022 fastdfs-6.08
drwxrwxr-x.  6 root root    182 612 21:24 libfastcommon-1.0.58
-rw-r--r--.  1 root root 235779 917 22:52 V1.0.58.tar.gz
-rw-r--r--.  1 root root 809448 917 22:53 V6.08.tar.gz

安装FastDFS依赖的环境

[root@linux6 fastdfs]# yum install gcc gcc-c++ libevent openssl openssl-devel pcre pcre-devel perl

进行编译、安装。

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

## 进入fastdfs-6.08根目录,进行编译、安装
[root@linux6 libfastcommon-1.0.58]# cd /opt/home/fastdfs/fastdfs-6.08/
[root@linux6 fastdfs-6.08]# ./make.sh
[root@linux6 fastdfs-6.08]# ./make.sh install

配置 /etc/fdfs目录下的 storage.conf

## 配置 storage.conf
[root@linux6 fastdfs-6.08]# vi /etc/fdfs/storage.conf

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

创建目录

[root@linux6 fastdfs-6.08]# mkdir -p /data/fastdfs/storage
[root@linux6 fastdfs-6.08]# mkdir -p /data/fastdfs/storage/files

启动

[root@linux6 fastdfs-6.08]# fdfs_storaged /etc/fdfs/storage.conf start
[root@linux6 fastdfs-6.08]# ps -ef | grep fdfs
root       2584      1 74 23:05 ?        00:00:04 fdfs_storaged /etc/fdfs/storage.conf start
root       2596   1692  0 23:05 pts/0    00:00:00 grep --color=auto fdfs

查看同步状态

## 切换目录
[root@linux6 00]# cd /data/fastdfs/storage/files/data/00/00

## 查看文件,同步成功
[root@linux6 00]# ll
总用量 144
-rw-r--r--. 1 root root 59789 917 02:33 wKgAaWMkwYmAdqPXAADpjUmcJMs775.jpg
-rw-r--r--. 1 root root 81983 917 02:33 wKgAaWMkwYyAU8QAAAFAPzaN8zk487.jpg

安装Nginx安装包和扩展模块

## 切换到/opt/home/fastdfs/目录
[root@linux6 fastdfs-6.08]# cd /opt/home/fastdfs/

## 下载
[root@linux6 fastdfs]# wget https://nginx.org/download/nginx-1.23.0.tar.gz

## 解压
[root@linux6 fastdfs]# tar -zxvf nginx-1.23.0.tar.gz

## 下载
[root@linux6 fastdfs]# wget https://github.com/happyfish100/fastdfs-nginx-module/archive/refs/tags/V1.22.tar.gz

## 解压
[root@linux6 fastdfs]# tar -zxvf V1.22.tar.gz

## 查看列表
[root@linux6 fastdfs]# ll
总用量 2128
drwxrwxr-x. 13 root root    4096 33 2022 fastdfs-6.08
drwxrwxr-x.  3 root root      47 1119 2019 fastdfs-nginx-module-1.22
drwxrwxr-x.  6 root root     182 917 23:35 libfastcommon-1.0.58
drwxr-xr-x.  8 1001 1001     158 621 22:25 nginx-1.23.0
-rw-r--r--.  1 root root 1102940 622 00:21 nginx-1.23.0.tar.gz
-rw-r--r--.  1 root root  235779 917 23:34 V1.0.58.tar.gz
-rw-r--r--.  1 root root   19952 917 23:43 V1.22.tar.gz
-rw-r--r--.  1 root root  809448 917 23:33 V6.08.tar.gz

编译安装

## 删除单机时配置
[root@linux6 fastdfs]# rm -rf /opt/home/fastdfs/fdfs-nginx

## 创建安装目录
[root@linux6 fastdfs]# mkdir -p /opt/home/fastdfs/fdfs-nginx

## 进入nginx-1.23.0目录
[root@linux6 fastdfs]# cd /opt/home/fastdfs/nginx-1.23.0

[root@linux6 nginx-1.23.0]# ./configure --prefix=/opt/home/fastdfs/fdfs-nginx --add-module=/opt/home/fastdfs/fastdfs-nginx-module-1.22/src

## 编译安装
[root@linux3 nginx-1.23.0]# make && make install

## 查看
[root@linux6 nginx-1.23.0]# cd /opt/home/fastdfs/fdfs-nginx
[root@linux6 fdfs-nginx]# ll
总用量 4
drwxr-xr-x. 2 root root 4096 917 23:47 conf
drwxr-xr-x. 2 root root   40 917 23:47 html
drwxr-xr-x. 2 root root    6 917 23:47 logs
drwxr-xr-x. 2 root root   19 917 23:47 sbin

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

配置Nginx:

配置linux6 conf/nginx.conf

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



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

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

## 复制
[root@linux6 fdfs-nginx]# cp /opt/home/fastdfs/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf /etc/fdfs/

## 切换/etc/fdfs/目录
[root@linux6 fdfs-nginx]# cd /etc/fdfs/

## 编辑mod_fastdfs.conf
[root@linux6 fdfs]# vi mod_fastdfs.conf

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

## 切换目录
[root@linux6 fdfs]# cd /opt/home/fastdfs/fdfs-nginx/

## 启动nginx
[root@linux6 fdfs-nginx]# ./sbin/nginx

## 查看进程

[root@linux6 fdfs-nginx]# ps -ef | grep nginx
root       9875      1  0 23:54 ?        00:00:00 nginx: master process ./sbin/nginx
nobody     9876   9875  0 23:54 ?        00:00:00 nginx: worker process
root       9878   5932  0 23:54 pts/1    00:00:00 grep --color=auto nginx

修改linux5的mod_fastdfs.conf配置,添加以下配置。

## 切换/etc/fdfs/目录
[root@linux5 fdfs-nginx]# cd /etc/fdfs/

## 编辑mod_fastdfs.conf
[root@linux5 fdfs]# vi mod_fastdfs.conf

## 修改group_count为2
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


## 切换目录
[root@linux5 fastdfs-6.08]# cd /opt/home/fastdfs/fdfs-nginx/


## 重启nginx
[root@linux5 fdfs-nginx]# ./sbin/nginx -s reload

## 查看进程

[root@linux5 fdfs-nginx]#  ps -ef | grep nginx
root      13453      1  0 9月17 ?       00:00:00 nginx: master process ./sbin/nginx
nobody    13758  13453  0 00:49 ?        00:00:00 nginx: worker process
root      13760  13646  0 00:50 pts/1    00:00:00 grep --color=auto nginx

在linux1、linux2节点分别修改配置 conf/nginx.conf

## 切换目录
[root@linux1 ~]# cd /opt/home/fastdfs/fdfs-nginx


## 修改配置
[root@linux1 fdfs-nginx]# vi conf/nginx.conf

## 修改以下配置
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;
}

重启nginx

[root@linux1 fdfs-nginx]# ./sbin/nginx -s reload

## 查看进程
[root@linux1 fdfs-nginx]# ps -ef | grep nginx
root       9995      1  0 9月17 ?       00:00:00 nginx: master process ./sbin/nginx
nobody    10240   9995  0 00:53 ?        00:00:00 nginx: worker process
root      10242  10138  0 00:53 pts/1    00:00:00 grep --color=auto nginx

linux2同上操作

测试

查看上传到group2分组的文件,查看linux5和linux6是否存在文件。

id组名远程文件名原始文件名扩展名操作
74group1M00/00/00/wKgAaGMl_FyANBYmAAFezXaskE8538.jpg0fae22599d37ca9088421de65330318b.jpgjpg删除下载
75group2M00/00/00/wKgAaWMl_GGAMnwQAABhwQPuLKk463.jpg5e7b247761f3f4f421e6da50394de15d.jpgjpg删除下载
76group2M00/00/00/wKgAamMl_GSAaZ68AALJWH4LgDc704.jpg6a1d8e8f2741c95d5c3f9b9dfd690fe2.jpgjpg删除下载

查看是否存在id为75和76的文件

[root@linux5 fdfs-nginx]# cd /data/fastdfs/storage/files/data/00/00/
[root@linux5 00]# ll
总用量 464
-rw-r--r--. 1 root root 182616 918 00:57 wKgAamMl_GSAaZ68AALJWH4LgDc704.jpg
-rw-r--r--. 1 root root  59789 917 02:33 wKgAaWMkwYmAdqPXAADpjUmcJMs775.jpg
-rw-r--r--. 1 root root  81983 917 02:33 wKgAaWMkwYyAU8QAAAFAPzaN8zk487.jpg
-rw-r--r--. 1 root root 113096 918 00:55 wKgAaWMl_AWABOkDAAG5yO1sPg8175.jpg
-rw-r--r--. 1 root root  25025 918 00:57 wKgAaWMl_GGAMnwQAABhwQPuLKk463.jpg
[root@linux6 fdfs-nginx]# cd /data/fastdfs/storage/files/data/00/00/
[root@linux6 00]# ll
总用量 464
-rw-r--r--. 1 root root 182616 918 00:57 wKgAamMl_GSAaZ68AALJWH4LgDc704.jpg
-rw-r--r--. 1 root root  59789 917 02:33 wKgAaWMkwYmAdqPXAADpjUmcJMs775.jpg
-rw-r--r--. 1 root root  81983 917 02:33 wKgAaWMkwYyAU8QAAAFAPzaN8zk487.jpg
-rw-r--r--. 1 root root 113096 918 00:55 wKgAaWMl_AWABOkDAAG5yO1sPg8175.jpg
-rw-r--r--. 1 root root  25025 918 00:57 wKgAaWMl_GGAMnwQAABhwQPuLKk463.jpg
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值