FastDFS集群搭建
一、部署规划
署程序 | 集群/组 | 主机名称/IP | 描述 |
---|---|---|---|
tracker 1 | tracker cluster | linux1/192.168.0.101 | tracker 高可用 |
tracker 2 | tracker cluster | linux2/192.168.0.102 | tracker 高可用 |
storage 1 | storage server group 1 | linux3/192.168.0.103 | storage 线性扩展 |
storage 2 | storage server group 1 | linux4/192.168.0.104 | storage 线性扩展 |
storage 3 | storage server group 2 | linux5/192.168.0.105 | storage 线性扩展 |
storage 4 | storage server group 2 | linux6/192.168.0.106 | storage 线性扩展 |
由于使用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 9月 16 12:00 wKgAZ2Mj9MOAM1VuAAAAKru2FwE612_big.txt
-rw-r--r--. 1 root root 49 9月 16 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 3月 3 2022 fastdfs-6.08
drwxrwxr-x. 3 root root 47 11月 19 2019 fastdfs-nginx-module-1.22
drwxr-xr-x. 11 root root 151 9月 16 16:57 fdfs-nginx
drwxrwxr-x. 6 root root 182 9月 16 11:42 libfastcommon-1.0.58
drwxr-xr-x. 9 1001 1001 186 9月 16 16:18 nginx-1.23.0
-rw-r--r--. 1 root root 1102940 6月 22 00:21 nginx-1.23.0.tar.gz
-rw-r--r--. 1 root root 235779 9月 16 11:35 V1.0.58.tar.gz
-rw-r--r--. 1 root root 19952 9月 16 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 3月 3 2022 fastdfs-6.08
drwxrwxr-x. 6 root root 182 6月 12 21:24 libfastcommon-1.0.58
-rw-r--r--. 1 root root 235779 9月 16 23:05 V1.0.58.tar.gz
-rw-r--r--. 1 root root 809448 9月 16 22:58 V6.08.tar.gz
[root@linux5 fastdfs]# pwd
/opt/home/fastdfs
[root@linux5 fastdfs]# ll
总用量 1028
drwxrwxr-x. 13 root root 4096 3月 3 2022 fastdfs-6.08
drwxrwxr-x. 6 root root 182 6月 12 21:24 libfastcommon-1.0.58
-rw-r--r--. 1 root root 235779 9月 16 23:05 V1.0.58.tar.gz
-rw-r--r--. 1 root root 809448 9月 16 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 3月 3 2022 fastdfs-6.08
drwxrwxr-x. 3 root root 47 11月 19 2019 fastdfs-nginx-module-1.22
drwxr-xr-x. 11 root root 151 9月 16 16:57 fdfs-nginx
drwxrwxr-x. 6 root root 182 9月 16 23:42 libfastcommon-1.0.58
drwxr-xr-x. 9 1001 1001 186 6月 21 22:25 nginx-1.23.0
-rw-r--r--. 1 root root 1102940 6月 22 00:21 nginx-1.23.0.tar.gz
-rw-r--r--. 1 root root 1102940 6月 22 00:21 nginx-1.23.0.tar.gz.1
-rw-r--r--. 1 root root 235779 9月 16 11:35 V1.0.58.tar.gz
-rw-r--r--. 1 root root 19952 9月 16 16:17 V1.22.tar.gz
-rw-r--r--. 1 root root 19952 9月 17 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 9月 17 00:56 conf
drwxr-xr-x. 2 root root 40 9月 17 00:56 html
drwxr-xr-x. 2 root root 6 9月 17 00:56 logs
drwxr-xr-x. 2 root root 19 9月 17 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 9月 17 01:00 conf
drwxr-xr-x. 2 root root 40 9月 17 01:00 html
drwxr-xr-x. 2 root root 6 9月 17 01:00 logs
drwxr-xr-x. 2 root root 36 9月 17 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 3月 3 2022 fastdfs-6.08
drwxrwxr-x. 6 root root 182 6月 12 21:24 libfastcommon-1.0.58
-rw-r--r--. 1 root root 235779 9月 17 22:52 V1.0.58.tar.gz
-rw-r--r--. 1 root root 809448 9月 17 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 9月 17 02:33 wKgAaWMkwYmAdqPXAADpjUmcJMs775.jpg
-rw-r--r--. 1 root root 81983 9月 17 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 3月 3 2022 fastdfs-6.08
drwxrwxr-x. 3 root root 47 11月 19 2019 fastdfs-nginx-module-1.22
drwxrwxr-x. 6 root root 182 9月 17 23:35 libfastcommon-1.0.58
drwxr-xr-x. 8 1001 1001 158 6月 21 22:25 nginx-1.23.0
-rw-r--r--. 1 root root 1102940 6月 22 00:21 nginx-1.23.0.tar.gz
-rw-r--r--. 1 root root 235779 9月 17 23:34 V1.0.58.tar.gz
-rw-r--r--. 1 root root 19952 9月 17 23:43 V1.22.tar.gz
-rw-r--r--. 1 root root 809448 9月 17 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 9月 17 23:47 conf
drwxr-xr-x. 2 root root 40 9月 17 23:47 html
drwxr-xr-x. 2 root root 6 9月 17 23:47 logs
drwxr-xr-x. 2 root root 19 9月 17 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 | 组名 | 远程文件名 | 原始文件名 | 扩展名 | 操作 |
---|---|---|---|---|---|
74 | group1 | M00/00/00/wKgAaGMl_FyANBYmAAFezXaskE8538.jpg | 0fae22599d37ca9088421de65330318b.jpg | jpg | 删除下载 |
75 | group2 | M00/00/00/wKgAaWMl_GGAMnwQAABhwQPuLKk463.jpg | 5e7b247761f3f4f421e6da50394de15d.jpg | jpg | 删除下载 |
76 | group2 | M00/00/00/wKgAamMl_GSAaZ68AALJWH4LgDc704.jpg | 6a1d8e8f2741c95d5c3f9b9dfd690fe2.jpg | jpg | 删除下载 |
查看是否存在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 9月 18 00:57 wKgAamMl_GSAaZ68AALJWH4LgDc704.jpg
-rw-r--r--. 1 root root 59789 9月 17 02:33 wKgAaWMkwYmAdqPXAADpjUmcJMs775.jpg
-rw-r--r--. 1 root root 81983 9月 17 02:33 wKgAaWMkwYyAU8QAAAFAPzaN8zk487.jpg
-rw-r--r--. 1 root root 113096 9月 18 00:55 wKgAaWMl_AWABOkDAAG5yO1sPg8175.jpg
-rw-r--r--. 1 root root 25025 9月 18 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 9月 18 00:57 wKgAamMl_GSAaZ68AALJWH4LgDc704.jpg
-rw-r--r--. 1 root root 59789 9月 17 02:33 wKgAaWMkwYmAdqPXAADpjUmcJMs775.jpg
-rw-r--r--. 1 root root 81983 9月 17 02:33 wKgAaWMkwYyAU8QAAAFAPzaN8zk487.jpg
-rw-r--r--. 1 root root 113096 9月 18 00:55 wKgAaWMl_AWABOkDAAG5yO1sPg8175.jpg
-rw-r--r--. 1 root root 25025 9月 18 00:57 wKgAaWMl_GGAMnwQAABhwQPuLKk463.jpg